From 5b2484be3bda55227a8fc370f61d875303f72f7f Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Thu, 23 Apr 2026 16:52:23 +0200 Subject: [PATCH] feat: add showcase region on first run to enhance user experience MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implemented a mechanism to bootstrap a demo gravity flip region when regions.json is absent or empty. - The showcase region features a 10×20×10 box with upward force and Torch_Fire particles, allowing immediate demonstration of functionality. - Users can customize or remove this region via regions.json. --- .../gravityflip/GravityFlipPlugin.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java b/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java index 7ceb058..e639638 100644 --- a/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java +++ b/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java @@ -4,11 +4,14 @@ import com.hypixel.hytale.server.core.plugin.JavaPlugin; import com.hypixel.hytale.server.core.plugin.JavaPluginInit; import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.world.World; +import com.hypixel.hytale.math.shape.Box; +import com.hypixel.hytale.math.vector.Vector3d; import com.hypixel.hytale.server.core.util.Config; import com.mythlane.gravityflip.config.GravityFlipConfig; import com.mythlane.gravityflip.physics.FallDamageGuard; import com.mythlane.gravityflip.physics.FallDamageSuppressorSystem; import com.mythlane.gravityflip.physics.GravityApplier; +import com.mythlane.gravityflip.region.GravityFlipRegion; import com.mythlane.gravityflip.region.RegionRegistry; import com.mythlane.gravityflip.tick.RegionTickLoop; import com.mythlane.gravityflip.viz.RegionVisualizer; @@ -72,6 +75,12 @@ public class GravityFlipPlugin extends JavaPlugin { protected void start() { super.start(); GravityFlipConfig cfg = configHolder.get(); + if (cfg.getRegions().isEmpty()) { + cfg.getRegions().add(buildShowcaseRegion()); + configHolder.save(); + getLogger().at(Level.INFO).log( + "First-run: bootstrapped 1 showcase region in regions.json (edit or delete to customise)"); + } this.registry = new RegionRegistry(cfg, configHolder); this.gravityApplier = new GravityApplier( th -> getLogger().at(Level.WARNING).withCause(th).log("gravityApply failed"), @@ -120,6 +129,25 @@ public class GravityFlipPlugin extends JavaPlugin { super.shutdown(); } + /** + * Showcase zone seeded on first run (when {@code regions.json} is absent or empty). + * 10×20×10 box at {@code (0,100,0)..(10,120,10)} with Torch_Fire particles and a + * gentle upward force — lets a fresh install demonstrate the feature immediately. + * Users are free to edit or delete this zone via {@code regions.json}. + */ + private static GravityFlipRegion buildShowcaseRegion() { + GravityFlipRegion r = new GravityFlipRegion( + "demo-gravity-flip", + new Box(new Vector3d(0, 100, 0), new Vector3d(10, 120, 10)), + true); + r.setVerticalForce(0.3); + r.setVisualMode("Particles"); + r.setVisualParticleId("Torch_Fire"); + r.setVisualParticleDensity(0.3); + r.setVisualRefreshMs(300); + return r; + } + /** Exposed for Phase 3 (gravity physics) and Phase 4 (commands). */ public RegionRegistry regions() { return registry; }