From bee00c0c8133971f617d04eae16407830f5f436c Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Mon, 8 Jun 2026 14:39:17 +0200 Subject: [PATCH] fix: resolve 3 remaining bugs (checkPlayerFall, removeTrailBlocks, scoredBlocks) --- .../generator/lifecycle/loop/LifecycleEventManager.java | 2 ++ .../generator/lifecycle/loop/LifecycleTickManager.java | 2 +- .../generator/lifecycle/player/GeneratorCleanup.java | 6 ++++-- .../java/dev/loki/loparkour/player/core/ParkourPlayer.java | 7 +++++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java index cc2d69f..f1ae3db 100644 --- a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java +++ b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java @@ -99,6 +99,8 @@ public class LifecycleEventManager { if (generator.state.playerSpawn != null) { player.teleport(generator.state.playerSpawn); } + // Clear scored blocks so same coordinates can be re-scored after respawn + player.clearScoredBlocks(); } // Reset generator state diff --git a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleTickManager.java b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleTickManager.java index d56b838..7148d65 100644 --- a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleTickManager.java +++ b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleTickManager.java @@ -74,7 +74,7 @@ public class LifecycleTickManager { for (var player : generator.getPlayers()) { if (player.player.getLocation().getY() < fallThreshold) { generator.fall(); - break; // Only trigger once per tick + continue; // Don't break — keep checking remaining players } } } diff --git a/src/main/java/dev/loki/loparkour/generator/lifecycle/player/GeneratorCleanup.java b/src/main/java/dev/loki/loparkour/generator/lifecycle/player/GeneratorCleanup.java index 17a3548..1b9b30b 100644 --- a/src/main/java/dev/loki/loparkour/generator/lifecycle/player/GeneratorCleanup.java +++ b/src/main/java/dev/loki/loparkour/generator/lifecycle/player/GeneratorCleanup.java @@ -88,8 +88,10 @@ public class GeneratorCleanup { } } - // Remove from history - generator.state.history.subList(startIndex, endIndex).clear(); + // Remove from history (synchronized to prevent concurrent index shift) + synchronized (generator.state.history) { + generator.state.history.subList(startIndex, endIndex).clear(); + } } /** diff --git a/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java b/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java index 77e056e..ba43cda 100644 --- a/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java +++ b/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java @@ -115,6 +115,13 @@ public class ParkourPlayer extends ParkourUser { save(LoParkour.getPlugin().isEnabled()); } + /** + * Clear scored blocks set, typically on fall/respawn so same coordinates can be re-scored. + */ + public void clearScoredBlocks() { + scoredBlocks.clear(); + } + private static String blockKey(Block block) { return block.getX() + "," + block.getY() + "," + block.getZ(); }