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