From 31c80fa92d0dade1e934aa5fea4d9f313aef97f9 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Thu, 1 Sep 2022 10:10:25 +0200 Subject: [PATCH] Prevent dying shopsigns, Fixes #8 --- .../playershops/listener/ShopListener.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/com/alttd/playershops/listener/ShopListener.java b/src/main/java/com/alttd/playershops/listener/ShopListener.java index e011a35..53d6aa2 100644 --- a/src/main/java/com/alttd/playershops/listener/ShopListener.java +++ b/src/main/java/com/alttd/playershops/listener/ShopListener.java @@ -4,7 +4,9 @@ import com.alttd.playershops.PlayerShops; import com.alttd.playershops.config.MessageConfig; import com.alttd.playershops.handler.ShopHandler; import com.alttd.playershops.shop.PlayerShop; +import com.destroystokyo.paper.MaterialSetTag; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.TreeType; import org.bukkit.block.Block; @@ -18,13 +20,17 @@ import org.bukkit.block.data.type.WallSign; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.world.StructureGrowEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; import java.util.Iterator; @@ -207,4 +213,26 @@ public class ShopListener extends EventListener { event.setCancelled(true); } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onSignDye(PlayerInteractEvent event) { + if(!this.isRegistered) + return; + + Player player = event.getPlayer(); + if (!(event.getAction() == Action.RIGHT_CLICK_BLOCK)) + return; + + Block block = event.getClickedBlock(); + if (block == null || !Tag.WALL_SIGNS.isTagged(block.getType())) + return; + + PlayerShop shop = shopHandler.getShopBySignLocation(block.getLocation()); + if(shop == null) return; + + ItemStack itemStack = event.getHand() == EquipmentSlot.HAND ? event.getPlayer().getInventory().getItemInMainHand() : event.getPlayer().getInventory().getItemInOffHand(); + Material material = itemStack.getType(); + if (material == Material.INK_SAC || material == Material.GLOW_INK_SAC || material.name().endsWith("_DYE")) // TODO create a cache for these? + event.setCancelled(true); + } }