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();