修复玩家可以用弓箭打掉地图的问题
All checks were successful
Java CI-CD with Maven / build (push) Successful in 8m6s

This commit is contained in:
zhangyuheng 2024-07-30 17:26:12 +08:00
parent 79d7f13a94
commit 9e1ad7640a
3 changed files with 46 additions and 4 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId> <groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId> <artifactId>Dominion</artifactId>
<version>1.42.7-beta</version> <version>1.42.8-beta</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Dominion</name> <name>Dominion</name>

View File

@ -5,6 +5,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.XLogger;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -52,11 +53,28 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.ARMOR_STAND) { if (entity.getType() != EntityType.ARMOR_STAND) {
return; return;
} }
Entity damager = event.getDamager(); DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
if (isNotExplodeEntity(damager)) { 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; 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); checkFlag(dom, Flag.CREEPER_EXPLODE, event);
} }

View File

@ -291,6 +291,30 @@ public class PlayerEvents implements Listener {
event.setCancelled(true); 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 @EventHandler(priority = EventPriority.HIGHEST) // craft
public void onCraft(InventoryOpenEvent event) { public void onCraft(InventoryOpenEvent event) {
Inventory inv = event.getInventory(); Inventory inv = event.getInventory();