From 52dacc054b1efb99c94afd81ec5a98573beaae13 Mon Sep 17 00:00:00 2001 From: SidShakal Date: Sat, 19 Jul 2014 09:37:37 -0500 Subject: Fix sticky piston retract breaking essentials sign Sticky pistons could break signs that were mounted on blocks the pistons were retracting. This patch extends the protection from just the piston base to include the extended piston arm and the block at the end of the piston arm as well. This method will very likely need to be changed again when 1.8 comes out, but this should bring us a bit closer, by wrapping the block tests in a loop. --- .../essentials/signs/SignBlockListener.java | 34 ++++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index e42b13d27..e59245596 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -271,23 +271,33 @@ public class SignBlockListener implements Listener if (event.isSticky()) { - final Block block = event.getBlock(); - if (((block.getType() == WALL_SIGN - || block.getType() == SIGN_POST) - && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) - || EssentialsSign.checkIfBlockBreaksSigns(block)) - { - event.setCancelled(true); - return; - } - for (EssentialsSign sign : ess.getSettings().enabledSigns()) + final Block pistonBaseBlock = event.getBlock(); + final Block[] affectedBlocks = new Block[] + { + pistonBaseBlock, + pistonBaseBlock.getRelative(event.getDirection()), + event.getRetractLocation().getBlock() + }; + + for (Block block : affectedBlocks) { - if (sign.areHeavyEventRequired() && sign.getBlocks().contains(block.getType()) - && !sign.onBlockPush(block, ess)) + if (((block.getType() == WALL_SIGN + || block.getType() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) { event.setCancelled(true); return; } + for (EssentialsSign sign : ess.getSettings().enabledSigns()) + { + if (sign.areHeavyEventRequired() && sign.getBlocks().contains(block.getType()) + && !sign.onBlockPush(block, ess)) + { + event.setCancelled(true); + return; + } + } } } } -- cgit v1.2.3