From f7dcc7d59aba138fc7e2872c729cf77edbc4bd32 Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Thu, 23 Apr 2026 10:32:28 +0200 Subject: [PATCH] feat(03-01): wire GravityApplier into RegionTickLoop + plugin (Task 2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RegionTickLoop gagne un constructeur 3-args (registry, gravityApplier, errorHandler) - Ancien constructeur 2-args conservé pour rétrocompat des tests Phase 02 - Tick body appelle gravityApplier.apply(w, registry.currentSnapshot(w)) après refreshFor - GravityFlipPlugin.start() construit l'applier et l'injecte dans le tickLoop - Log de démarrage mis à jour: 'gravity inversion active' --- .../com/mythlane/gravityflip/GravityFlipPlugin.java | 8 ++++++-- .../com/mythlane/gravityflip/tick/RegionTickLoop.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) 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); }