feat: add showcase region on first run to enhance user experience

- 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.
This commit is contained in:
2026-04-23 16:52:23 +02:00
parent f5e6cc24f5
commit 5b2484be3b
@@ -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.plugin.JavaPluginInit;
import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.Universe;
import com.hypixel.hytale.server.core.universe.world.World; 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.hypixel.hytale.server.core.util.Config;
import com.mythlane.gravityflip.config.GravityFlipConfig; import com.mythlane.gravityflip.config.GravityFlipConfig;
import com.mythlane.gravityflip.physics.FallDamageGuard; import com.mythlane.gravityflip.physics.FallDamageGuard;
import com.mythlane.gravityflip.physics.FallDamageSuppressorSystem; import com.mythlane.gravityflip.physics.FallDamageSuppressorSystem;
import com.mythlane.gravityflip.physics.GravityApplier; import com.mythlane.gravityflip.physics.GravityApplier;
import com.mythlane.gravityflip.region.GravityFlipRegion;
import com.mythlane.gravityflip.region.RegionRegistry; import com.mythlane.gravityflip.region.RegionRegistry;
import com.mythlane.gravityflip.tick.RegionTickLoop; import com.mythlane.gravityflip.tick.RegionTickLoop;
import com.mythlane.gravityflip.viz.RegionVisualizer; import com.mythlane.gravityflip.viz.RegionVisualizer;
@@ -72,6 +75,12 @@ public class GravityFlipPlugin extends JavaPlugin {
protected void start() { protected void start() {
super.start(); super.start();
GravityFlipConfig cfg = configHolder.get(); 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.registry = new RegionRegistry(cfg, configHolder);
this.gravityApplier = new GravityApplier( this.gravityApplier = new GravityApplier(
th -> getLogger().at(Level.WARNING).withCause(th).log("gravityApply failed"), th -> getLogger().at(Level.WARNING).withCause(th).log("gravityApply failed"),
@@ -120,6 +129,25 @@ public class GravityFlipPlugin extends JavaPlugin {
super.shutdown(); 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). */ /** Exposed for Phase 3 (gravity physics) and Phase 4 (commands). */
public RegionRegistry regions() { return registry; } public RegionRegistry regions() { return registry; }