From a34a0fecabb3c31fd5ac6c228ac41e632f5c5048 Mon Sep 17 00:00:00 2001 From: jacob1 Date: Mon, 12 Oct 2020 00:15:54 -0400 Subject: [PATCH] Fix piston retraction checking one block further than it needs to (#1036) --- .../GriefPrevention/BlockEventHandler.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java index 5d1e0a2..a9cdba7 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java @@ -493,18 +493,18 @@ public class BlockEventHandler implements Listener @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onBlockPistonExtend(BlockPistonExtendEvent event) { - onPistonEvent(event, event.getBlocks()); + onPistonEvent(event, event.getBlocks(), false); } // Prevent pistons pulling blocks into or out of claims. @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onBlockPistonRetract(BlockPistonRetractEvent event) { - onPistonEvent(event, event.getBlocks()); + onPistonEvent(event, event.getBlocks(), true); } // Handle piston push and pulls. - private void onPistonEvent(BlockPistonEvent event, List blocks) + private void onPistonEvent(BlockPistonEvent event, List blocks, boolean isRetract) { PistonMode pistonMode = GriefPrevention.instance.config_pistonMovement; // Return if piston movements are ignored. @@ -514,6 +514,11 @@ public class BlockEventHandler implements Listener if (!GriefPrevention.instance.claimsEnabledForWorld(event.getBlock().getWorld())) return; BlockFace direction = event.getDirection(); + + // Direction is always piston facing, correct for retraction. + if (isRetract) + direction = direction.getOppositeFace(); + Block pistonBlock = event.getBlock(); Claim pistonClaim = this.dataStore.getClaimAt(pistonBlock.getLocation(), false, null); @@ -583,7 +588,7 @@ public class BlockEventHandler implements Listener } // Pushing down or pulling up is safe if all blocks are in line with the piston. - if (minX == maxX && minZ == maxZ && direction == (event instanceof BlockPistonExtendEvent ? BlockFace.DOWN : BlockFace.UP)) return; + if (minX == maxX && minZ == maxZ && direction == (isRetract ? BlockFace.UP : BlockFace.DOWN)) return; // Fast mode: Use the intersection of a cuboid containing all blocks instead of individual locations. if (pistonMode == PistonMode.EVERYWHERE_SIMPLE)