diff --git a/pom.xml b/pom.xml index a7c3e38..fefb66a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.19.0-beta + 1.19.1-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 6a24930..46eca5c 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -8,6 +8,7 @@ import cn.lunadeer.dominion.utils.Notification; import io.papermc.paper.event.entity.EntityDyeEvent; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.block.Block; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; @@ -19,13 +20,19 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityPlaceEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.*; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; import org.spigotmc.event.entity.EntityMountEvent; +import java.util.Objects; + import static cn.lunadeer.dominion.events.Apis.getInvDominion; public class PlayerEvents implements Listener { @@ -223,25 +230,50 @@ public class PlayerEvents implements Listener { @EventHandler(priority = EventPriority.HIGHEST) // break public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); - DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation()); - if (dom == null) { + if (onBreak(player, event.getBlock().getLocation())) { return; } - if (Apis.hasPermission(player, dom)) { + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // break - item frame + public void onItemFrameBreak(HangingBreakByEntityEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof ItemFrame)) { return; } + ItemFrame itemFrame = (ItemFrame) entity; + Entity remover = event.getRemover(); + if (!(remover instanceof Player)) { + return; + } + if (onBreak((Player) event.getRemover(), itemFrame.getLocation())) { + return; + } + itemFrame.remove(); + event.setCancelled(true); + } + + public static boolean onBreak(Player player, Location location) { + DominionDTO dom = Cache.instance.getDominion(location); + if (dom == null) { + return true; + } + if (Apis.hasPermission(player, dom)) { + return true; + } PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); if (privilege != null) { if (privilege.getBreak()) { - return; + return true; } } else { if (dom.getBreak()) { - return; + return true; } } Notification.error(player, "你没有破坏方块的权限"); - event.setCancelled(true); + return false; } @EventHandler(priority = EventPriority.HIGHEST) // button @@ -933,17 +965,31 @@ public class PlayerEvents implements Listener { if (onPlace(player, event.getBlock().getLocation())) { return; } - Notification.error(player, "你没有放置方块的权限"); event.setCancelled(true); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) // place - lava or water public void onPlaceLavaOrWater(PlayerBucketEmptyEvent event) { Player player = event.getPlayer(); if (onPlace(player, event.getBlock().getLocation())) { return; } - Notification.error(player, "你没有放置方块的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // place - item frame + public void placeItemFrame(HangingPlaceEvent event) { + Entity entity = event.getEntity(); + if (entity.getType() != EntityType.ITEM_FRAME && entity.getType() != EntityType.GLOW_ITEM_FRAME) { + return; + } + Player player = event.getPlayer(); + if (player == null) { + return; + } + if (onPlace(player, entity.getLocation())) { + return; + } event.setCancelled(true); } @@ -957,10 +1003,16 @@ public class PlayerEvents implements Listener { } PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); if (privilege != null) { - return privilege.getPlace(); + if (privilege.getPlace()) { + return true; + } } else { - return dom.getPlace(); + if (dom.getPlace()) { + return true; + } } + Notification.error(player, "你没有放置方块的权限"); + return false; } @EventHandler(priority = EventPriority.HIGHEST) // pressure