diff --git a/src/me/ryanhamshire/GriefPrevention/BlockEventHandler.java b/src/me/ryanhamshire/GriefPrevention/BlockEventHandler.java index 546f7cc..3501af5 100644 --- a/src/me/ryanhamshire/GriefPrevention/BlockEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/BlockEventHandler.java @@ -474,55 +474,62 @@ public class BlockEventHandler implements Listener //pulling up is always safe if(event.getDirection() == BlockFace.UP) return; - //don't track in worlds where claims are not enabled - if(!GriefPrevention.instance.claimsEnabledForWorld(event.getBlock().getWorld())) return; - - //if pistons limited to only pulling blocks which are in the same claim the piston is in - if(GriefPrevention.instance.config_pistonsInClaimsOnly) + try { - //if piston not in a land claim, cancel event - Claim pistonClaim = this.dataStore.getClaimAt(event.getBlock().getLocation(), false, null); - if(pistonClaim == null) - { - event.setCancelled(true); - return; - } - - for(Block movedBlock : event.getBlocks()) - { - //if pulled block isn't in the same land claim, cancel the event - if(!pistonClaim.contains(movedBlock.getLocation(), false, false)) + //don't track in worlds where claims are not enabled + if(!GriefPrevention.instance.claimsEnabledForWorld(event.getBlock().getWorld())) return; + + //if pistons limited to only pulling blocks which are in the same claim the piston is in + if(GriefPrevention.instance.config_pistonsInClaimsOnly) + { + //if piston not in a land claim, cancel event + Claim pistonClaim = this.dataStore.getClaimAt(event.getBlock().getLocation(), false, null); + if(pistonClaim == null) { event.setCancelled(true); return; } - } - } - - //otherwise, consider ownership of both piston and block - else - { - //who owns the piston, if anyone? - String pistonOwnerName = "_"; - Location pistonLocation = event.getBlock().getLocation(); - Claim pistonClaim = this.dataStore.getClaimAt(pistonLocation, false, null); - if(pistonClaim != null) pistonOwnerName = pistonClaim.getOwnerName(); - - String movingBlockOwnerName = "_"; - for(Block movedBlock : event.getBlocks()) + + for(Block movedBlock : event.getBlocks()) + { + //if pulled block isn't in the same land claim, cancel the event + if(!pistonClaim.contains(movedBlock.getLocation(), false, false)) + { + event.setCancelled(true); + return; + } + } + } + + //otherwise, consider ownership of both piston and block + else { - //who owns the moving block, if anyone? - Claim movingBlockClaim = this.dataStore.getClaimAt(movedBlock.getLocation(), false, pistonClaim); - if(movingBlockClaim != null) movingBlockOwnerName = movingBlockClaim.getOwnerName(); - - //if there are owners for the blocks, they must be the same player - //otherwise cancel the event - if(!pistonOwnerName.equals(movingBlockOwnerName)) + //who owns the piston, if anyone? + String pistonOwnerName = "_"; + Location pistonLocation = event.getBlock().getLocation(); + Claim pistonClaim = this.dataStore.getClaimAt(pistonLocation, false, null); + if(pistonClaim != null) pistonOwnerName = pistonClaim.getOwnerName(); + + String movingBlockOwnerName = "_"; + for(Block movedBlock : event.getBlocks()) { - event.setCancelled(true); + //who owns the moving block, if anyone? + Claim movingBlockClaim = this.dataStore.getClaimAt(movedBlock.getLocation(), false, pistonClaim); + if(movingBlockClaim != null) movingBlockOwnerName = movingBlockClaim.getOwnerName(); + + //if there are owners for the blocks, they must be the same player + //otherwise cancel the event + if(!pistonOwnerName.equals(movingBlockOwnerName)) + { + event.setCancelled(true); + } } } } + catch(NoSuchMethodError exception) + { + GriefPrevention.AddLogEntry("Your server is running an outdated version of 1.8 which has a griefing vulnerability. Update your server (reruns buildtools.jar to get an updated server JAR file) to ensure playres can't steal claimed blocks using pistons."); + } } //blocks are ignited ONLY by flint and steel (not by being near lava, open flames, etc), unless configured otherwise