From 97071165cdbb514134aa96e0ab597eab3bcc7b79 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sun, 5 Apr 2026 12:08:29 +0200 Subject: [PATCH] Fix IngameListener, OutsideWincondition, TowerGenerator --- .../de/steamwar/towerrun/generator/TowerGenerator.java | 4 ++-- .../src/de/steamwar/towerrun/listener/IngameListener.java | 8 ++++++-- .../towerrun/winconditions/OutsideWincondition.java | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/TowerRun/src/de/steamwar/towerrun/generator/TowerGenerator.java b/TowerRun/src/de/steamwar/towerrun/generator/TowerGenerator.java index ce0a33b7..0e1c8781 100644 --- a/TowerRun/src/de/steamwar/towerrun/generator/TowerGenerator.java +++ b/TowerRun/src/de/steamwar/towerrun/generator/TowerGenerator.java @@ -159,8 +159,8 @@ public class TowerGenerator { noKeyFloors--; if (!chestBlocks.isEmpty() && noKeyFloors < 0 && random.nextDouble() < config.keyChance) { noKeyFloors = random.nextInt(config.maxNoKeyFloors - config.minNoKeyFloors) + config.minNoKeyFloors; - for (int i = 0; i < 2; i++) { - Container container = chestBlocks.get(random.nextInt(chestBlocks.size())); + for (int i = 0; i < 2 && !chestBlocks.isEmpty(); i++) { + Container container = chestBlocks.remove(random.nextInt(chestBlocks.size())); keys.add(container.getLocation()); } diff --git a/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java b/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java index d85eafdf..c5550f72 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java @@ -161,7 +161,7 @@ public class IngameListener extends GameStateBukkitListener { event.setCancelled(true); if (!event.hasBlock()) return; if (event.getClickedBlock().getType() != Material.IRON_DOOR) return; - event.getPlayer().getInventory().setItemInMainHand(null); + event.getPlayer().getInventory().remove(event.getItem()); event.getClickedBlock().breakNaturally(); } @@ -223,6 +223,8 @@ public class IngameListener extends GameStateBukkitListener { shouldMelt(block.getRelative(0, 0, -1)); } + private static final Random RANDOM = new Random(); + private void shouldMelt(Block block) { if (block.getType().isBurnable()) return; if (block.getType().isAir()) return; @@ -269,7 +271,9 @@ public class IngameListener extends GameStateBukkitListener { break; } Pos pos = new Pos(block.getLocation().getBlockX(), block.getLocation().getBlockY(), block.getLocation().getBlockZ()); - blocksToMelt.putIfAbsent(pos, time + meltingTime + 1); + int delay = meltingTime + 1 + RANDOM.nextInt(30*20)-30*10; + if (delay < 0) delay = meltingTime + 1; + blocksToMelt.putIfAbsent(pos, time + delay); } @EventHandler diff --git a/TowerRun/src/de/steamwar/towerrun/winconditions/OutsideWincondition.java b/TowerRun/src/de/steamwar/towerrun/winconditions/OutsideWincondition.java index 8b241da5..fe7dc64a 100644 --- a/TowerRun/src/de/steamwar/towerrun/winconditions/OutsideWincondition.java +++ b/TowerRun/src/de/steamwar/towerrun/winconditions/OutsideWincondition.java @@ -42,6 +42,10 @@ public abstract class OutsideWincondition extends WinCondition { @EventHandler public void onPlayerMove(PlayerMoveEvent event) { if (event.getTo().getY() > WorldConfig.ESCAPE_HEIGHT) { + if (Arrays.stream(WorldConfig.REGIONS).noneMatch(region -> region.contains(event.getTo().toVector()))) { + TowerRunPlayer tPlayer = TowerRunPlayer.get(event.getPlayer()); + tPlayer.player().damage(Integer.MAX_VALUE); + } return; }