From 9e1ad7640a6f61bad43cada8a00100831e71bc46 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Tue, 30 Jul 2024 17:26:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=8E=A9=E5=AE=B6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E7=94=A8=E5=BC=93=E7=AE=AD=E6=89=93=E6=8E=89=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../dominion/events/EnvironmentEvents.java | 24 ++++++++++++++++--- .../dominion/events/PlayerEvents.java | 24 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 6286982..b3e39f5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.42.7-beta + 1.42.8-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java index 470db01..5fb1028 100644 --- a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -5,6 +5,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.minecraftpluginutils.XLogger; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; @@ -52,11 +53,28 @@ public class EnvironmentEvents implements Listener { if (entity.getType() != EntityType.ARMOR_STAND) { return; } - Entity damager = event.getDamager(); - if (isNotExplodeEntity(damager)) { + DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation()); + checkFlag(dom, Flag.CREEPER_EXPLODE, event); + } + + @EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - other entity shoot + public void removeSomeOnItemFrameByArrow(EntityDamageByEntityEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof ItemFrame)) { return; } - DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation()); + ItemFrame itemFrame = (ItemFrame) entity; + if (itemFrame.getItem().getType() == Material.AIR) { + return; + } + if (!(event.getDamager() instanceof Arrow)) { + return; + } + Arrow arrow = (Arrow) event.getDamager(); + if (arrow.getShooter() instanceof Player) { + return; + } + DominionDTO dom = Cache.instance.getDominionByLoc(itemFrame.getLocation()); checkFlag(dom, Flag.CREEPER_EXPLODE, event); } diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 4afcb13..5a2f13e 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -291,6 +291,30 @@ public class PlayerEvents implements Listener { event.setCancelled(true); } + @EventHandler(priority = EventPriority.HIGHEST) // container (item frame get) + public void removeSomeOnItemFrameByArrow(EntityDamageByEntityEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof ItemFrame)) { + return; + } + ItemFrame itemFrame = (ItemFrame) entity; + if (itemFrame.getItem().getType() == Material.AIR) { + return; + } + if (!(event.getDamager() instanceof Arrow)) { + return; + } + Arrow arrow = (Arrow) event.getDamager(); + if (!(arrow.getShooter() instanceof Player)) { + return; + } + Player bukkitPlayer = (Player) arrow.getShooter(); + if (hasContainerPermission(bukkitPlayer, itemFrame.getLocation())) { + return; + } + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.HIGHEST) // craft public void onCraft(InventoryOpenEvent event) { Inventory inv = event.getInventory();