diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java index 83a0a7d..c9942ab 100644 --- a/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java @@ -65,11 +65,7 @@ public class EndlessJumper { else generator.onMove(event.getNewPosition()); }); - // nur Brücken- und Rettungsblöcke dürfen abgebaut werden (Notausgang), Streckenblöcke nie - eventHandler.addListener(PlayerBlockBreakEvent.class, event -> { - JumpGenerator generator = games.get(event.getPlayer()); - if(generator == null || !generator.isBreakable(event.getBlockPosition())) event.setCancelled(true); - }); + eventHandler.addListener(PlayerBlockBreakEvent.class, event -> event.setCancelled(true)); eventHandler.addListener(PlayerBlockPlaceEvent.class, event -> event.setCancelled(true)); eventHandler.addListener(ItemDropEvent.class, event -> event.setCancelled(true)); eventHandler.addListener(PlayerSwapItemEvent.class, event -> event.setCancelled(true)); diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java index e0a5a2e..40d8337 100644 --- a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java @@ -77,8 +77,7 @@ public class JumpGenerator { private int bridgeStart = -1; private int bridgeEnd = -1; - // Rettung durch das Totem: Plattform mit Leiter unter dem Block, von dem man gefallen ist - private final Map rescueBlocks = new HashMap<>(); + // laufende Rettung durch das Totem: der Block, auf den man über die Leiter zurückklettert private Pos rescueSafe; /** @param startIndex Fortschritt, ab dem gespielt wird (0 oder ein gespeicherter Checkpoint) */ @@ -288,9 +287,9 @@ public class JumpGenerator { double y = this.player.getPosition().y(); if(this.rescueSafe != null) { - if(y >= this.rescueSafe.y() + 0.9) this.endRescue(); + if(y >= this.rescueSafe.y() + 0.9) this.rescueSafe = null; else if(y < this.rescueSafe.blockY() - RESCUE_DEPTH - 3) { - this.endRescue(); + this.rescueSafe = null; this.reset(); } return; @@ -332,23 +331,7 @@ public class JumpGenerator { /** Brückenglas darf überschrieben werden, sonst könnte ein früherer Brückenweg die Leiter versperren. */ private void placeRescue(Pos pos, Block block) { Block existing = this.world.getBlock(pos); - if(!existing.compare(Block.AIR) && !existing.compare(BRIDGE_BLOCK)) return; - this.world.setBlock(pos, block); - this.rescueBlocks.put(pos, block); - } - - private void endRescue() { - this.rescueSafe = null; - Map placed = Map.copyOf(this.rescueBlocks); - this.rescueBlocks.clear(); - removeLater(this.world, placed); - } - - /** Entfernt nur, was noch unverändert steht (Rettungsblöcke dürfen abgebaut werden). */ - private static void removeLater(Instance world, Map placed) { - world.scheduler().buildTask(() -> placed.forEach((pos, block) -> { - if(world.getBlock(pos).compare(block)) world.setBlock(pos, Block.AIR); - })).delay(TaskSchedule.seconds(8)).schedule(); + if(existing.compare(Block.AIR) || existing.compare(BRIDGE_BLOCK)) this.world.setBlock(pos, block); } /** Beendet alles, was an den Spieler gebunden weiterläuft (Partikel, Musik). */ @@ -356,11 +339,6 @@ public class JumpGenerator { this.atmosphere.stop(); } - /** Streckenblöcke und ihr Licht sind geschützt, alles andere (Brücke, Rettung) darf abgebaut werden. */ - public boolean isBreakable(Point pos) { - return !this.world.getBlock(pos).compare(Block.LIGHT) && !this.courseIndex.containsKey(BlockKey.of(pos)); - } - private void reset() { this.player.teleport(this.checkpoint.add(0.5, 1, 0.5)); this.combo = 0;