diff --git a/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java b/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java index 208a234..6d5b8ae 100644 --- a/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java +++ b/src/main/java/com/mythlane/gravityflip/GravityFlipPlugin.java @@ -6,6 +6,7 @@ import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.world.World; import com.hypixel.hytale.server.core.util.Config; import com.mythlane.gravityflip.config.GravityFlipConfig; +import com.mythlane.gravityflip.physics.GravityApplier; import com.mythlane.gravityflip.region.RegionRegistry; import com.mythlane.gravityflip.tick.RegionTickLoop; @@ -36,6 +37,7 @@ public class GravityFlipPlugin extends JavaPlugin { private RegionRegistry registry; private RegionTickLoop tickLoop; + private GravityApplier gravityApplier; public GravityFlipPlugin(JavaPluginInit init) { super(init); @@ -61,7 +63,9 @@ public class GravityFlipPlugin extends JavaPlugin { super.start(); GravityFlipConfig cfg = configHolder.get(); this.registry = new RegionRegistry(cfg, configHolder); - this.tickLoop = new RegionTickLoop(registry, th -> + this.gravityApplier = new GravityApplier(th -> + getLogger().at(Level.WARNING).withCause(th).log("gravityApply failed")); + this.tickLoop = new RegionTickLoop(registry, gravityApplier, th -> getLogger().at(Level.WARNING).withCause(th).log("detectTick failed")); // Lazy world resolution — see setup() comment. @@ -81,7 +85,7 @@ public class GravityFlipPlugin extends JavaPlugin { } catch (Throwable ignored) { /* manual shutdown() fallback */ } getLogger().at(Level.INFO).log( - "Gravity Flip enabled — %d region(s) loaded, detector @100ms", + "Gravity Flip enabled — %d region(s) loaded, detector @100ms, gravity inversion active", cfg.getRegions().size()); } diff --git a/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java b/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java index 18025a2..aa8e748 100644 --- a/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java +++ b/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java @@ -1,6 +1,7 @@ package com.mythlane.gravityflip.tick; import com.hypixel.hytale.server.core.universe.world.World; +import com.mythlane.gravityflip.physics.GravityApplier; import com.mythlane.gravityflip.region.RegionRegistry; import java.util.concurrent.Executors; @@ -32,9 +33,15 @@ public final class RegionTickLoop { private volatile ScheduledFuture future; private final Consumer errorHandler; private final RegionRegistry registry; + private final GravityApplier gravityApplier; public RegionTickLoop(RegionRegistry registry, Consumer errorHandler) { + this(registry, null, errorHandler); + } + + public RegionTickLoop(RegionRegistry registry, GravityApplier gravityApplier, Consumer errorHandler) { this.registry = registry; + this.gravityApplier = gravityApplier; this.errorHandler = errorHandler == null ? t -> {} : errorHandler; this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> { Thread t = new Thread(r, "GravityFlip-Detect"); @@ -65,6 +72,9 @@ public final class RegionTickLoop { World w = worldSupplier.get(); if (w == null) return; registry.refreshFor(w); + if (gravityApplier != null) { + gravityApplier.apply(w, registry.currentSnapshot(w)); + } }; scheduleGuarded(initialDelayMs, tick); }