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