Hotfix PistonCalculator

This commit is contained in:
2025-07-29 10:52:18 +02:00
parent 69260a9b73
commit 4104c60f6b
@@ -91,7 +91,7 @@ public class PistonCalculator implements Listener {
public void onBlockPistonExtend(BlockPistonExtendEvent event) { public void onBlockPistonExtend(BlockPistonExtendEvent event) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
pistOrders.values().forEach(PistOrder::calculate); pistOrders.values().forEach(PistOrder::calculate);
}, 1); }, 3);
} }
@EventHandler @EventHandler
@@ -146,7 +146,7 @@ public class PistonCalculator implements Listener {
private boolean pulling = false; private boolean pulling = false;
private List<Location> movedBlocks = new ArrayList<>(); private List<Location> movedBlocks = new ArrayList<>();
private List<Location> brokenBlocks = new ArrayList<>(); private List<Location> brokenBlocks = new ArrayList<>();
private List<Location> immovableBlocks = new ArrayList<>(); private Set<Location> immovableBlocks = new HashSet<>();
public void calculate() { public void calculate() {
movedBlocks.clear(); movedBlocks.clear();
@@ -173,7 +173,6 @@ public class PistonCalculator implements Listener {
Collections.reverse(movedBlocks); Collections.reverse(movedBlocks);
Collections.reverse(brokenBlocks); Collections.reverse(brokenBlocks);
Collections.reverse(immovableBlocks);
visualize(); visualize();
} }
@@ -208,6 +207,7 @@ public class PistonCalculator implements Listener {
movedBlocks.remove(origin.getLocation()); movedBlocks.remove(origin.getLocation());
if (facing != direction) movedBlocks.remove(origin.getRelative(facing, 1).getLocation()); if (facing != direction) movedBlocks.remove(origin.getRelative(facing, 1).getLocation());
if (pulling) immovableBlocks.remove(origin.getRelative(facing).getLocation());
} }
private void calcDirection(Block origin, Block blockOrigin, Block calcOrigin, Block ignore, BlockFace facing, BlockFace direction, List<Block> toCalc) { private void calcDirection(Block origin, Block blockOrigin, Block calcOrigin, Block ignore, BlockFace facing, BlockFace direction, List<Block> toCalc) {
@@ -215,7 +215,9 @@ public class PistonCalculator implements Listener {
Block block = calcOrigin.getRelative(direction, i); Block block = calcOrigin.getRelative(direction, i);
if (block.equals(ignore)) return; if (block.equals(ignore)) return;
if (block.getPistonMoveReaction() == PistonMoveReaction.BREAK) { if (block.getPistonMoveReaction() == PistonMoveReaction.BREAK) {
if (!brokenBlocks.contains(block.getLocation())) {
brokenBlocks.add(block.getLocation()); brokenBlocks.add(block.getLocation());
}
return; return;
} }
if (isImmovable(block)) { if (isImmovable(block)) {
@@ -302,6 +304,9 @@ public class PistonCalculator implements Listener {
} }
private boolean isImmovable(Block block) { private boolean isImmovable(Block block) {
if (block.isEmpty() || block.isLiquid()) {
return false;
}
BlockData blockData = block.getBlockData(); BlockData blockData = block.getBlockData();
if (blockData instanceof Piston) { if (blockData instanceof Piston) {
return ((Piston) blockData).isExtended(); return ((Piston) blockData).isExtended();