From da8aa007d4d6511f9d52d55d6208ceb13c113e4e Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Fri, 15 Mar 2024 01:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=94=E7=94=B2=E6=9E=B6?= =?UTF-8?q?=E3=80=81=E5=B1=95=E7=A4=BA=E6=A1=86=E6=9D=83=E9=99=90=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=EF=BC=88=E5=BD=92=E5=B1=9E=E5=88=B0=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- pom.xml | 2 +- .../dominion/events/PlayerEvents.java | 74 +++++++++++++++---- .../dominion/tuis/DominionFlagInfo.java | 4 +- .../lunadeer/dominion/tuis/PrivilegeInfo.java | 4 +- 5 files changed, 68 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index e7d2b53..83988ba 100644 --- a/README.md +++ b/README.md @@ -120,10 +120,10 @@ ## 指令 -### 玩家指令 - 以下指令尖括号`<>`表示必填参数,方括号`[]`表示可选参数。 +### 玩家指令 + | 指令名 | 指令 | |------------|-------------------------------------------------------------| | 打开交互菜单 | `/dominion menu` | diff --git a/pom.xml b/pom.xml index 19f7358..9f0a708 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.11.9-beta + 1.11.10-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 f475a3c..03cc4d2 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -7,6 +7,7 @@ import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.dominion.utils.Notification; import io.papermc.paper.event.entity.EntityDyeEvent; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.block.Block; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; @@ -22,6 +23,7 @@ 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.persistence.PersistentDataType; import org.spigotmc.event.entity.EntityMountEvent; public class PlayerEvents implements Listener { @@ -314,6 +316,29 @@ public class PlayerEvents implements Listener { event.setCancelled(true); } + // 检查是否有容器权限 + private static boolean hasContainerPermission(Player player) { + DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player); + if (dom == null) { + return true; + } + if (Apis.hasPermission(player, dom)) { + return true; + } + PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); + if (privilege != null) { + if (privilege.getContainer()) { + return true; + } + } else { + if (dom.getContainer()) { + return true; + } + } + Notification.error(player, "你没有使用容器/盔甲架/展示框的权限"); + return false; + } + @EventHandler(priority = EventPriority.HIGHEST) // container public void openContainer(InventoryOpenEvent event) { if (event.getInventory().getType() != InventoryType.CHEST && @@ -325,24 +350,47 @@ public class PlayerEvents implements Listener { return; } Player bukkitPlayer = (Player) event.getPlayer(); - DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer); - if (dom == null) { + if (hasContainerPermission(bukkitPlayer)) { return; } - if (Apis.hasPermission(bukkitPlayer, dom)) { + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // container (armor stand) + public void manipulateArmorStand(PlayerArmorStandManipulateEvent event) { + Player bukkitPlayer = event.getPlayer(); + if (hasContainerPermission(bukkitPlayer)) { return; } - PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom); - if (privilege != null) { - if (privilege.getContainer()) { - return; - } - } else { - if (dom.getContainer()) { - return; - } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // container (item frame) + public void putSomeOnItemFrame(PlayerInteractEntityEvent event) { + Entity entity = event.getRightClicked(); + if (!(entity instanceof ItemFrame)) { + return; + } + Player bukkitPlayer = event.getPlayer(); + if (hasContainerPermission(bukkitPlayer)) { + return; + } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // container (item frame) + public void removeSomeOnItemFrame(EntityDamageByEntityEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof ItemFrame)) { + return; + } + if (!(event.getDamager() instanceof Player)) { + return; + } + Player bukkitPlayer = (Player) event.getDamager(); + if (hasContainerPermission(bukkitPlayer)) { + return; } - Notification.error(bukkitPlayer, "你没有使用容器的权限"); event.setCancelled(true); } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java index 7e46dcf..f95d5a1 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -122,11 +122,11 @@ public class DominionFlagInfo { if (dominion.getContainer()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set container false " + dominion.getName() + " " + page)) - .append("箱子/木桶/潜影盒")); + .append("箱子/木桶/潜影盒/盔甲架/展示框")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set container true " + dominion.getName() + " " + page)) - .append("箱子/木桶/潜影盒")); + .append("箱子/木桶/潜影盒/盔甲架/展示框")); } if (dominion.getCraft()) { view.add(Line.create() diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java index a986f26..dc77495 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java @@ -146,11 +146,11 @@ public class PrivilegeInfo { if (privilege.getContainer()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " container false " + dominion.getName() + " " + page)) - .append("箱子/木桶/潜影盒")); + .append("箱子/木桶/潜影盒/盔甲架/展示框")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " container true " + dominion.getName() + " " + page)) - .append("箱子/木桶/潜影盒")); + .append("箱子/木桶/潜影盒/盔甲架/展示框")); } if (privilege.getCraft()) { view.add(Line.create()