From 6e055c90c37dff44adfd6ae4b9e006469e24a2c1 Mon Sep 17 00:00:00 2001 From: DrBot7 <46543473+DrBot7@users.noreply.github.com> Date: Sat, 26 Sep 2020 14:54:19 -0500 Subject: [PATCH] Stop boats from breaking item frames in claims (#1029) --- .../GriefPrevention/BlockEventHandler.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java index 7a5607b..818ef38 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java @@ -57,6 +57,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.InventoryHolder; @@ -1015,4 +1016,21 @@ public class BlockEventHandler implements Listener } } } + + @EventHandler(ignoreCancelled = true) + public void onItemFrameBrokenByBoat(final HangingBreakEvent event) + { + // Checks if the event is caused by physics - 90% of cases caused by a boat (other 10% would be block, + // however since it's in a claim, unless you use a TNT block we don't need to worry about it). + if (event.getCause() != HangingBreakEvent.RemoveCause.PHYSICS) + { + return; + } + + // Cancels the event if in a claim, as we can not efficiently retrieve the person/entity who broke the Item Frame/Hangable Item. + if (this.dataStore.getClaimAt(event.getEntity().getLocation(), false, null) != null) + { + event.setCancelled(true); + } + } }