From d5f702f2cba892321e0cb1dcedd27d5ea56244d8 Mon Sep 17 00:00:00 2001 From: GunfighterJ Date: Mon, 25 Feb 2013 17:15:20 -0600 Subject: [PATCH] [Protect] Prevent creepers from breaking paintings if their explosions are disabled. Backport from 3.0 --- .../EssentialsProtectEntityListener.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index d9102c023..4ba608d48 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -13,6 +13,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.*; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityTargetEvent.TargetReason; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingBreakEvent; public class EssentialsProtectEntityListener implements Listener @@ -176,7 +178,7 @@ public class EssentialsProtectEntityListener implements Listener private boolean shouldBeDamaged(final User user, final String type) { return (user.isAuthorized("essentials.protect.damage.".concat(type)) - && !user.isAuthorized("essentials.protect.damage.disable")); + && !user.isAuthorized("essentials.protect.damage.disable")); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -232,7 +234,7 @@ public class EssentialsProtectEntityListener implements Listener event.setCancelled(true); return; } - + // This code will prevent explosions near protected rails, signs or protected chests // TODO: Use protect db instead of this code @@ -332,4 +334,15 @@ public class EssentialsProtectEntityListener implements Listener event.setCancelled(true); } } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPaintingBreak(HangingBreakByEntityEvent event) + { + if (event.getCause() == HangingBreakEvent.RemoveCause.ENTITY + && event.getRemover() instanceof Creeper + && prot.getSettingBool(ProtectConfig.prevent_creeper_explosion)) + { + event.setCancelled(true); + } + } }