feat(03-01): wire GravityApplier into RegionTickLoop + plugin (Task 2)
- 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'
This commit is contained in:
@@ -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.universe.world.World;
|
||||||
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.GravityApplier;
|
||||||
import com.mythlane.gravityflip.region.RegionRegistry;
|
import com.mythlane.gravityflip.region.RegionRegistry;
|
||||||
import com.mythlane.gravityflip.tick.RegionTickLoop;
|
import com.mythlane.gravityflip.tick.RegionTickLoop;
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ public class GravityFlipPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
private RegionRegistry registry;
|
private RegionRegistry registry;
|
||||||
private RegionTickLoop tickLoop;
|
private RegionTickLoop tickLoop;
|
||||||
|
private GravityApplier gravityApplier;
|
||||||
|
|
||||||
public GravityFlipPlugin(JavaPluginInit init) {
|
public GravityFlipPlugin(JavaPluginInit init) {
|
||||||
super(init);
|
super(init);
|
||||||
@@ -61,7 +63,9 @@ public class GravityFlipPlugin extends JavaPlugin {
|
|||||||
super.start();
|
super.start();
|
||||||
GravityFlipConfig cfg = configHolder.get();
|
GravityFlipConfig cfg = configHolder.get();
|
||||||
this.registry = new RegionRegistry(cfg, configHolder);
|
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"));
|
getLogger().at(Level.WARNING).withCause(th).log("detectTick failed"));
|
||||||
|
|
||||||
// Lazy world resolution — see setup() comment.
|
// Lazy world resolution — see setup() comment.
|
||||||
@@ -81,7 +85,7 @@ public class GravityFlipPlugin extends JavaPlugin {
|
|||||||
} catch (Throwable ignored) { /* manual shutdown() fallback */ }
|
} catch (Throwable ignored) { /* manual shutdown() fallback */ }
|
||||||
|
|
||||||
getLogger().at(Level.INFO).log(
|
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());
|
cfg.getRegions().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.mythlane.gravityflip.tick;
|
package com.mythlane.gravityflip.tick;
|
||||||
|
|
||||||
import com.hypixel.hytale.server.core.universe.world.World;
|
import com.hypixel.hytale.server.core.universe.world.World;
|
||||||
|
import com.mythlane.gravityflip.physics.GravityApplier;
|
||||||
import com.mythlane.gravityflip.region.RegionRegistry;
|
import com.mythlane.gravityflip.region.RegionRegistry;
|
||||||
|
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@@ -32,9 +33,15 @@ public final class RegionTickLoop {
|
|||||||
private volatile ScheduledFuture<?> future;
|
private volatile ScheduledFuture<?> future;
|
||||||
private final Consumer<Throwable> errorHandler;
|
private final Consumer<Throwable> errorHandler;
|
||||||
private final RegionRegistry registry;
|
private final RegionRegistry registry;
|
||||||
|
private final GravityApplier gravityApplier;
|
||||||
|
|
||||||
public RegionTickLoop(RegionRegistry registry, Consumer<Throwable> errorHandler) {
|
public RegionTickLoop(RegionRegistry registry, Consumer<Throwable> errorHandler) {
|
||||||
|
this(registry, null, errorHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegionTickLoop(RegionRegistry registry, GravityApplier gravityApplier, Consumer<Throwable> errorHandler) {
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
|
this.gravityApplier = gravityApplier;
|
||||||
this.errorHandler = errorHandler == null ? t -> {} : errorHandler;
|
this.errorHandler = errorHandler == null ? t -> {} : errorHandler;
|
||||||
this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
|
this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
|
||||||
Thread t = new Thread(r, "GravityFlip-Detect");
|
Thread t = new Thread(r, "GravityFlip-Detect");
|
||||||
@@ -65,6 +72,9 @@ public final class RegionTickLoop {
|
|||||||
World w = worldSupplier.get();
|
World w = worldSupplier.get();
|
||||||
if (w == null) return;
|
if (w == null) return;
|
||||||
registry.refreshFor(w);
|
registry.refreshFor(w);
|
||||||
|
if (gravityApplier != null) {
|
||||||
|
gravityApplier.apply(w, registry.currentSnapshot(w));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
scheduleGuarded(initialDelayMs, tick);
|
scheduleGuarded(initialDelayMs, tick);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user