From 6409748d32be958dc1b6eb36bf9b893fce6962bc Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 1 Sep 2023 16:26:07 +0200 Subject: [PATCH] Fix AxisMovementLimiter Signed-off-by: yoyosource --- .../preview/AxisMovementLimiter.java | 12 +- .../features/simulator/SimulatorCursor.java | 2 +- .../simulator/TNTSimulatorListener.java | 103 +++++++++--------- 3 files changed, 58 insertions(+), 59 deletions(-) diff --git a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/AxisMovementLimiter.java b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/AxisMovementLimiter.java index 2e288071..17d2df1b 100644 --- a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/AxisMovementLimiter.java +++ b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/AxisMovementLimiter.java @@ -81,7 +81,7 @@ public class AxisMovementLimiter { } break; } - System.out.println(axis + " " + minX + " -> " + maxX + " " + minY + " -> " + maxY + " " + minZ + " -> " + maxZ); + // System.out.println(axis + " " + minX + " -> " + maxX + " " + minY + " -> " + maxY + " " + minZ + " -> " + maxZ); } private List possibleCollisions() { @@ -160,14 +160,16 @@ public class AxisMovementLimiter { if (collision == null) { return movement; } else { - System.out.println(axis + " " + movement + " " + collision); switch (axis) { case X: - return x - collision; + // System.out.println(axis + " " + movement + " " + x + " " + collision); + return collision - x; case Y: - return y - collision; + // System.out.println(axis + " " + movement + " " + y + " " + collision); + return collision - y; case Z: - return z - collision; + // System.out.println(axis + " " + movement + " " + z + " " + collision); + return collision - z; default: throw new IllegalStateException("Unexpected value: " + axis); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java index e8fc1bac..c0d1bab5 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java @@ -67,7 +67,7 @@ public class SimulatorCursor { return; } - if (SimulatorStorage.getSimulator(player.getInventory().getItemInOffHand()) != null && result.getHitPosition().distanceSquared(player.getLocation().toVector()) < 25) { + if (SimulatorStorage.getSimulator(player.getInventory().getItemInOffHand()) != null && result.getHitPosition().distanceSquared(player.getLocation().toVector()) < 16) { return; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java index 930acf7a..a8e5aa8e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java @@ -44,6 +44,9 @@ import java.util.function.Function; @Linked public class TNTSimulatorListener implements Listener { + private Map previewRecordMap = new HashMap<>(); + private Map currentSimulator = new HashMap<>(); + private boolean permissionCheck(Player player) { if (!Permission.hasPermission(player, Permission.WORLD)) { BauSystem.MESSAGE.send("SIMULATOR_NO_PERMS", player); @@ -52,88 +55,82 @@ public class TNTSimulatorListener implements Listener { return true; } + private Pair getSimulator(Player player) { + if (ItemUtils.isItem(player.getInventory().getItemInOffHand(), "simulator")) { + return new Pair<>(SimulatorStorage.getSimulator(player.getInventory().getItemInOffHand()), true); + } + if (ItemUtils.isItem(player.getInventory().getItemInMainHand(), "simulator")) { + return new Pair<>(SimulatorStorage.getSimulator(player.getInventory().getItemInMainHand()), false); + } + return new Pair<>(null, false); + } + static RayTraceUtils.RRayTraceResult trace(Player player, Location to, TNTSimulator simulator) { return RayTraceUtils.traceREntity(player, to, simulator.getEntities()); } + private void hideShow(Player player, TNTSimulator simulator) { + TNTSimulator tntSimulator = currentSimulator.remove(player); + if (tntSimulator == simulator) return; + if (tntSimulator != null) tntSimulator.hide(player); + if (simulator != null) { + simulator.show(player); + SimulatorCursor.show(player, simulator, trace(player, player.getLocation(), simulator)); + } + } + @EventHandler public void onPlayerMove(PlayerMoveEvent e) { - if (ItemUtils.isItem(e.getPlayer().getInventory().getItemInMainHand(), "simulator")) { - simulatorShowHide(e.getPlayer(), i -> null, PlayerInventory::getItemInMainHand, e.getTo()); - } else { - SimulatorCursor.hide(e.getPlayer()); - } + Pair simulatorPair = getSimulator(e.getPlayer()); + hideShow(e.getPlayer(), simulatorPair.getKey()); } @EventHandler public void onPlayerItemHeld(PlayerItemHeldEvent e) { - simulatorShowHide(e.getPlayer(), i -> i.getItem(e.getPreviousSlot()), i -> i.getItem(e.getNewSlot()), e.getPlayer().getLocation()); + Pair simulatorPair = getSimulator(e.getPlayer()); + hideShow(e.getPlayer(), simulatorPair.getKey()); } @EventHandler public void onPlayerDropItem(PlayerDropItemEvent e) { - simulatorShowHide(e.getPlayer(), i -> e.getItemDrop().getItemStack(), i -> null, e.getPlayer().getLocation()); - } - - private TNTSimulator simulatorShowHide(Player player, Function oldItemFunction, Function newItemFunction, Location location) { - TNTSimulator oldSimulator = SimulatorStorage.getSimulator(oldItemFunction.apply(player.getInventory())); - SimulatorCursor.hide(player, oldSimulator); - - TNTSimulator simulator = SimulatorStorage.getSimulator(newItemFunction.apply(player.getInventory())); - if (simulator == null) return null; - - SimulatorCursor.show(player, simulator, trace(player, location, simulator)); - return simulator; + Pair simulatorPair = getSimulator(e.getPlayer()); + hideShow(e.getPlayer(), simulatorPair.getKey()); } @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { - if (ItemUtils.isItem(e.getPlayer().getInventory().getItemInMainHand(), "simulator")) { - simulatorShowHide(e.getPlayer(), i -> null, PlayerInventory::getItemInMainHand, e.getPlayer().getLocation()); - } + Pair simulatorPair = getSimulator(e.getPlayer()); + hideShow(e.getPlayer(), simulatorPair.getKey()); } @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - SimulatorCursor.hide(event.getPlayer(), null); - SimulatorStorage.getSimulatorNames().forEach(s -> { - SimulatorStorage.getSimulator(s)._hide(event.getPlayer()); - }); - PreviewRecord previewRecord = previewRecordMap.remove(event.getPlayer()); - if (previewRecord != null) { - previewRecord.close(event.getPlayer()); - } + public void onPlayerQuit(PlayerQuitEvent e) { + hideShow(e.getPlayer(), null); } - private Map previewRecordMap = new HashMap<>(); - @EventHandler - public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { - PreviewRecord current = previewRecordMap.remove(event.getPlayer()); - if (current != null) { - current.close(event.getPlayer()); - } + public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent e) { + Pair simulatorPair = getSimulator(e.getPlayer()); + hideShow(e.getPlayer(), simulatorPair.getKey()); - if (!ItemUtils.isItem(event.getOffHandItem(), "simulator")) { - return; - } - if (ItemUtils.isItem(event.getMainHandItem(), "simulator")) { - return; - } - if (!permissionCheck(event.getPlayer())) { - return; - } + if (!simulatorPair.getValue()) return; - TNTSimulator simulator = SimulatorStorage.getSimulator(event.getOffHandItem()); - if (simulator == null) return; - Pair>>>> toCalculate = simulator.locations(event.getPlayer()); + TNTSimulator simulator = SimulatorStorage.getSimulator(e.getOffHandItem()); + if (preview(e.getPlayer(), simulator)) { + e.setCancelled(true); + } + } + + private boolean preview(Player player, TNTSimulator simulator) { + if (simulator == null) return false; + Pair>>>> toCalculate = simulator.locations(player); PreviewRecord previewRecord = Simulator.impl.run(toCalculate); if (previewRecord == null) { - event.setCancelled(true); - return; + return true; } - previewRecord.add(event.getPlayer()); - previewRecordMap.put(event.getPlayer(), previewRecord); + previewRecord.add(player); + previewRecordMap.put(player, previewRecord); + return false; } @EventHandler