领地拾取/丢弃权限重构: denyPickup/denyDrop → allowPickup/allowDrop(正向命名),修复访客权限检查

This commit is contained in:
2026-07-02 19:17:17 +08:00
parent 2f35b945fc
commit 925017e21a
4 changed files with 59 additions and 47 deletions
+13 -14
View File
@@ -530,8 +530,8 @@ public class AreaCLIManager {
case "potion": oldState = land.denyPotion; land.denyPotion = !land.denyPotion; break;
case "fire": oldState = land.denyFire; land.denyFire = !land.denyFire; break;
case "fire_spread": oldState = land.denyFireSpread; land.denyFireSpread = !land.denyFireSpread; break;
case "pickup": oldState = land.denyPickup; land.denyPickup = !land.denyPickup; break;
case "drop": oldState = land.denyDrop; land.denyDrop = !land.denyDrop; break;
case "pickup": oldState = land.allowPickup; land.allowPickup = !land.allowPickup; break;
case "drop": oldState = land.allowDrop; land.allowDrop = !land.allowDrop; break;
case "explosion": oldState = land.denyExplosion; land.denyExplosion = !land.denyExplosion; break;
case "fall_damage": oldState = land.denyFallDamage; land.denyFallDamage = !land.denyFallDamage; break;
case "hunger": oldState = land.denyHunger; land.denyHunger = !land.denyHunger; break;
@@ -555,7 +555,6 @@ public class AreaCLIManager {
String permName = getPermNameByKey(permKey);
boolean newState = !oldState;
// ★ newState是deny值:true=禁止,false=允许
p.sendMessage("§a已切换 §e" + permName + " §7→ " + (newState ? "§a已启用" : "§c已关闭"));
}
@@ -586,8 +585,8 @@ public class AreaCLIManager {
case "potion": return "denyPotion";
case "fire": return "denyFire";
case "fire_spread": return "denyFireSpread";
case "pickup": return "denyPickup";
case "drop": return "denyDrop";
case "pickup": return "allowPickup";
case "drop": return "allowDrop";
case "explosion": return "denyExplosion";
case "fall_damage": return "denyFallDamage";
case "hunger": return "denyHunger";
@@ -642,8 +641,8 @@ public class AreaCLIManager {
perms.add(new PermItem("potion", "药水效果", !land.denyPotion));
perms.add(new PermItem("fire", land.denyFire ? "禁止点燃" : "启用点燃", !land.denyFire));
perms.add(new PermItem("fire_spread", "火焰蔓延", !land.denyFireSpread));
perms.add(new PermItem("pickup", "禁止拾取", !land.denyPickup));
perms.add(new PermItem("drop", "丢弃物品", !land.denyDrop));
perms.add(new PermItem("pickup", "允许拾取", land.allowPickup));
perms.add(new PermItem("drop", "允许丢弃", land.allowDrop));
perms.add(new PermItem("explosion", "爆炸", !land.denyExplosion));
perms.add(new PermItem("fall_damage", "摔落伤害", !land.denyFallDamage));
perms.add(new PermItem("hunger", "饥饿", !land.denyHunger));
@@ -679,8 +678,8 @@ public class AreaCLIManager {
case "potion": return "药水效果";
case "fire": return "点燃";
case "fire_spread": return "火焰蔓延";
case "pickup": return "禁止拾取";
case "drop": return "丢弃物品";
case "pickup": return "允许拾取";
case "drop": return "允许丢弃";
case "explosion": return "爆炸";
case "fall_damage": return "摔落伤害";
case "hunger": return "饥饿";
@@ -1033,7 +1032,7 @@ public class AreaCLIManager {
areaProtect.setPlayerPerm(landId, targetPlayer, denyField, newVal);
String permName = getPermNameByKey(permKey);
p.sendMessage("§a已设置 §e" + targetPlayer + " §a的 §e" + permName + " §7→ " + (!newVal ? "§a允许" : "§c禁止"));
p.sendMessage("§a已设置 §e" + targetPlayer + " §a的 §e" + permName + " §7→ " + (newVal ? "§a允许" : "§c禁止"));
// 刷新页面
showPlayerPerm(p, landName, targetPlayer, page);
@@ -1088,8 +1087,8 @@ public class AreaCLIManager {
{"potion", "药水效果", "denyPotion"},
{"fire", "点燃", "denyFire"},
{"fire_spread", "火焰蔓延", "denyFireSpread"},
{"pickup", "禁止拾取", "denyPickup"},
{"drop", "丢弃物品", "denyDrop"},
{"pickup", "允许拾取", "allowPickup"},
{"drop", "允许丢弃", "allowDrop"},
{"explosion", "爆炸", "denyExplosion"},
{"fall_damage", "摔落伤害", "denyFallDamage"},
{"hunger", "饥饿", "denyHunger"},
@@ -1166,8 +1165,8 @@ public class AreaCLIManager {
case "denyPotion": return land.denyPotion;
case "denyFire": return land.denyFire;
case "denyFireSpread": return land.denyFireSpread;
case "denyPickup": return land.denyPickup;
case "denyDrop": return land.denyDrop;
case "denyPickup": return land.allowPickup;
case "denyDrop": return land.allowDrop;
case "denyExplosion": return land.denyExplosion;
case "denyFallDamage": return land.denyFallDamage;
case "denyHunger": return land.denyHunger;
+16 -10
View File
@@ -468,7 +468,7 @@ public class AreaGUIManager implements Listener {
{"容器管理", "denyContainer"}, {"玩家对战", "denyPVP"}, {"骑乘坐具", "denyMount"}, {"投掷末影珍珠", "denyEnderPearl"},
{"投掷物", "denyThrownProjectiles"}, {"禁止袭击", "denyRaid"}, {"弓箭射击", "denyBow"},
{"药水效果", "denyPotion"}, {"点燃", "denyFire"}, {"火焰蔓延", "denyFireSpread"},
{"禁止拾取", "denyPickup"}, {"丢弃物品", "denyDrop"}, {"爆炸", "denyExplosion"},
{"允许拾取", "allowPickup"}, {"允许丢弃", "allowDrop"}, {"爆炸", "denyExplosion"},
{"摔落伤害", "denyFallDamage"}, {"饥饿", "denyHunger"}, {"所有伤害", "denyAllDamage"},
{"所有效果", "denyAllEffects"}, {"禁止展示框", "denyItemFrame"}, {"红石电路", "denyRedstoneInteraction"},
{"禁止门禁", "denyDoorInteraction"}, {"音频", "denyNoteblockJukebox"}, {"拴绳使用", "denyLead"},
@@ -503,8 +503,14 @@ public class AreaGUIManager implements Listener {
name = landDefault ? "禁止攻击生物" : "允许攻击生物";
}
// enabled = true 表示"允许操作"(即deny=false)
boolean allowed = !effective;
// ★ 对于 allowPickup/allowDrop,enabled=true 表示"允许操作"(即 allow=true)
// 其他权限,enabled = true 表示"允许操作"(即 deny=false)
boolean allowed;
if (field.equals("allowPickup") || field.equals("allowDrop")) {
allowed = effective;
} else {
allowed = !effective;
}
Material mat = allowed ? Material.LIME_DYE : Material.GRAY_DYE;
String status = allowed ? "§a✔ 允许" : "§c✘ 禁止";
String overrideTag = isOverridden ? " §e★自定义" : " §7[默认]";
@@ -555,8 +561,8 @@ public class AreaGUIManager implements Listener {
case "denyPotion": return land.denyPotion;
case "denyFire": return land.denyFire;
case "denyFireSpread": return land.denyFireSpread;
case "denyPickup": return land.denyPickup;
case "denyDrop": return land.denyDrop;
case "allowPickup": return land.allowPickup;
case "allowDrop": return land.allowDrop;
case "denyExplosion": return land.denyExplosion;
case "denyFallDamage": return land.denyFallDamage;
case "denyHunger": return land.denyHunger;
@@ -637,8 +643,8 @@ public class AreaGUIManager implements Listener {
perms.add(new PermEntry("药水效果", !land.denyPotion));
perms.add(new PermEntry(land.denyFire ? "禁止点燃" : "启用点燃", !land.denyFire));
perms.add(new PermEntry("火焰蔓延", !land.denyFireSpread));
perms.add(new PermEntry("禁止拾取", !land.denyPickup));
perms.add(new PermEntry("丢弃物品", !land.denyDrop));
perms.add(new PermEntry("允许拾取", land.allowPickup));
perms.add(new PermEntry("允许丢弃", land.allowDrop));
perms.add(new PermEntry("爆炸", !land.denyExplosion));
perms.add(new PermEntry("摔落伤害", !land.denyFallDamage));
perms.add(new PermEntry("饥饿", !land.denyHunger));
@@ -693,8 +699,8 @@ public class AreaGUIManager implements Listener {
case "禁止点燃": land.denyFire = !land.denyFire; break;
case "启用点燃": land.denyFire = !land.denyFire; break;
case "火焰蔓延": land.denyFireSpread = !land.denyFireSpread; break;
case "禁止拾取": land.denyPickup = !land.denyPickup; break;
case "丢弃物品": land.denyDrop = !land.denyDrop; break;
case "允许拾取": land.allowPickup = !land.allowPickup; break;
case "允许丢弃": land.allowDrop = !land.allowDrop; break;
case "爆炸": land.denyExplosion = !land.denyExplosion; break;
case "摔落伤害": land.denyFallDamage = !land.denyFallDamage; break;
case "饥饿": land.denyHunger = !land.denyHunger; break;
@@ -1075,7 +1081,7 @@ public class AreaGUIManager implements Listener {
{"容器管理", "denyContainer"}, {"玩家对战", "denyPVP"}, {"骑乘坐具", "denyMount"}, {"投掷末影珍珠", "denyEnderPearl"},
{"投掷物", "denyThrownProjectiles"}, {"禁止袭击", "denyRaid"}, {"弓箭射击", "denyBow"},
{"药水效果", "denyPotion"}, {"点燃", "denyFire"}, {"火焰蔓延", "denyFireSpread"},
{"禁止拾取", "denyPickup"}, {"丢弃物品", "denyDrop"}, {"爆炸", "denyExplosion"},
{"允许拾取", "allowPickup"}, {"允许丢弃", "allowDrop"}, {"爆炸", "denyExplosion"},
{"摔落伤害", "denyFallDamage"}, {"饥饿", "denyHunger"}, {"所有伤害", "denyAllDamage"},
{"所有效果", "denyAllEffects"}, {"禁止展示框", "denyItemFrame"}, {"红石电路", "denyRedstoneInteraction"},
{"禁止门禁", "denyDoorInteraction"}, {"音频", "denyNoteblockJukebox"}, {"拴绳使用", "denyLead"},
+26 -16
View File
@@ -977,7 +977,7 @@ public class AreaProtection implements Listener {
ac.denyFallDamage = rs.getInt("deny_fall_damage") == 1;
ac.denyHunger = rs.getInt("deny_hunger") == 1;
ac.denyAllDamage = rs.getInt("deny_all_damage") == 1;
ac.denyDrop = rs.getInt("deny_drop") == 1;
ac.allowDrop = rs.getInt("deny_drop") == 1;
ac.denyMount = rs.getInt("deny_mount") == 1;
ac.denyEnderPearl = rs.getInt("deny_ender_pearl") == 1;
ac.denyBow = rs.getInt("deny_bow") == 1;
@@ -988,7 +988,7 @@ public class AreaProtection implements Listener {
ac.denyAllEffects = rs.getInt("deny_all_effects") == 1;
ac.denyItemFrame = rs.getInt("deny_item_frame") == 1;
try { ac.denyMove = rs.getInt("deny_move") == 1; } catch (Exception ignored) {}
try { ac.denyPickup = rs.getInt("deny_pickup") == 1; } catch (Exception ignored) {}
try { ac.allowPickup = rs.getInt("deny_pickup") == 1; } catch (Exception ignored) {}
try { ac.denyFire = rs.getInt("deny_fire") == 1; } catch (Exception ignored) {}
try { ac.denyThrownProjectiles = rs.getInt("deny_thrown_projectiles") == 1; } catch (Exception ignored) {}
try { ac.denyGlowing = rs.getInt("deny_glowing") == 1; } catch (Exception ignored) {}
@@ -1315,7 +1315,7 @@ public class AreaProtection implements Listener {
insertStmt.setInt(19, ac.denyFallDamage ? 1 : 0);
insertStmt.setInt(20, ac.denyHunger ? 1 : 0);
insertStmt.setInt(21, ac.denyAllDamage ? 1 : 0);
insertStmt.setInt(22, ac.denyDrop ? 1 : 0);
insertStmt.setInt(22, ac.allowDrop ? 1 : 0);
insertStmt.setInt(23, ac.denyMount ? 1 : 0);
insertStmt.setInt(24, ac.denyEnderPearl ? 1 : 0);
insertStmt.setInt(25, ac.denyBow ? 1 : 0);
@@ -1326,7 +1326,7 @@ public class AreaProtection implements Listener {
insertStmt.setInt(30, ac.denyAllEffects ? 1 : 0);
insertStmt.setInt(31, ac.denyItemFrame ? 1 : 0);
insertStmt.setInt(32, ac.denyMove ? 1 : 0);
insertStmt.setInt(33, ac.denyPickup ? 1 : 0);
insertStmt.setInt(33, ac.allowPickup ? 1 : 0);
insertStmt.setInt(34, ac.denyFire ? 1 : 0);
insertStmt.setInt(35, ac.peaceMode ? 1 : 0);
insertStmt.setInt(36, ac.peaceModeDuration / 1000); // 存秒
@@ -1653,8 +1653,8 @@ public class AreaProtection implements Listener {
ac.denyHunger = true;
} else if (line.equals("禁止一切伤害")) {
ac.denyAllDamage = true;
} else if (line.equals("禁止丢弃物品")) {
ac.denyDrop = true;
} else if (line.equals("允许丢弃物品")) {
ac.allowDrop = true;
} else if (line.equals("禁止末影珍珠")) {
ac.denyEnderPearl = true;
} else if (line.equals("禁止使用弓箭")) {
@@ -2501,7 +2501,7 @@ public class AreaProtection implements Listener {
case "denyFallDamage": return ac.denyFallDamage;
case "denyHunger": return ac.denyHunger;
case "denyAllDamage": return ac.denyAllDamage;
case "denyDrop": return ac.denyDrop;
case "denyDrop": return ac.allowDrop;
case "denyMount": return ac.denyMount;
case "denyEnderPearl": return ac.denyEnderPearl;
case "denyBow": return ac.denyBow;
@@ -2511,7 +2511,7 @@ public class AreaProtection implements Listener {
case "denyFireSpread": return ac.denyFireSpread;
case "denyAllEffects": return ac.denyAllEffects;
case "denyItemFrame": return ac.denyItemFrame;
case "denyPickup": return ac.denyPickup;
case "denyPickup": return ac.allowPickup;
case "denyFire": return ac.denyFire;
case "denyThrownProjectiles": return ac.denyThrownProjectiles;
case "denyGlowing": return ac.denyGlowing;
@@ -4326,13 +4326,18 @@ public class AreaProtection implements Listener {
p.getLocation().getBlockX(),
p.getLocation().getBlockY(),
p.getLocation().getBlockZ());
if (ac != null && getEffectiveDeny(p, ac, "denyDrop")) {
if (ac != null && ac.allowDrop) {
// allowDrop=true 表示允许丢弃,不阻止
return;
}
// allowDrop=false 或 no land → 默认不允许丢弃
if (ac != null) {
e.setCancelled(true);
p.sendMessage("§c§l[区域防护] §f禁止丢弃物品");
}
}
// ★ 拾取限制:denyPickup=true时禁止拾取地上物品(节流5~10秒随机提示)
// ★ 拾取限制:allowPickup=true时允许拾取,false时禁止拾取
@EventHandler
public void onPlayerPickup(PlayerPickupItemEvent e) {
Player p = e.getPlayer();
@@ -4341,7 +4346,12 @@ public class AreaProtection implements Listener {
p.getLocation().getBlockX(),
p.getLocation().getBlockY(),
p.getLocation().getBlockZ());
if (ac != null && getEffectiveDeny(p, ac, "denyPickup")) {
if (ac != null && ac.allowPickup) {
// allowPickup=true 表示允许拾取,不阻止
return;
}
// allowPickup=false 或 no land → 默认禁止拾取
if (ac != null) {
e.setCancelled(true);
// 节流:5~10秒随机间隔
long now = System.currentTimeMillis();
@@ -7796,7 +7806,7 @@ public class AreaProtection implements Listener {
stmt.setInt(19, ac.denyFallDamage ? 1 : 0);
stmt.setInt(20, ac.denyHunger ? 1 : 0);
stmt.setInt(21, ac.denyAllDamage ? 1 : 0);
stmt.setInt(22, ac.denyDrop ? 1 : 0);
stmt.setInt(22, ac.allowDrop ? 1 : 0);
stmt.setInt(23, ac.denyMount ? 1 : 0);
stmt.setInt(24, ac.denyEnderPearl ? 1 : 0);
stmt.setInt(25, ac.denyBow ? 1 : 0);
@@ -7807,7 +7817,7 @@ public class AreaProtection implements Listener {
stmt.setInt(30, ac.denyAllEffects ? 1 : 0);
stmt.setInt(31, ac.denyItemFrame ? 1 : 0);
stmt.setInt(32, ac.denyMove ? 1 : 0);
stmt.setInt(33, ac.denyPickup ? 1 : 0);
stmt.setInt(33, ac.allowPickup ? 1 : 0);
stmt.setInt(34, ac.denyFire ? 1 : 0);
stmt.setInt(35, ac.peaceMode ? 1 : 0);
stmt.setInt(36, ac.peaceModeDuration / 1000);
@@ -9784,13 +9794,13 @@ public class AreaProtection implements Listener {
public boolean denyHunger = false;
public boolean denyAllDamage = false;
public boolean denyMount = false;
public boolean denyDrop = false;
public boolean allowDrop = false;
public boolean denyEnderPearl = false;
public boolean denyBow = false;
public boolean denyPotion = false;
public boolean denyExplosion = false;
public boolean denyMove = false;
public boolean denyPickup = false;
public boolean allowPickup = false;
public boolean denyFire = false;
// ★ 新增投掷物权限(三叉戟、雪球、风蛋、箭)
public boolean denyThrownProjectiles = false;
@@ -9922,7 +9932,7 @@ public class AreaProtection implements Listener {
if (denyFallDamage) c++;
if (denyHunger) c++;
if (denyAllDamage) c++;
if (denyDrop) c++;
if (allowDrop) c++;
if (denyMount) c++;
if (denyEnderPearl) c++;
if (denyBow) c++;
@@ -516,7 +516,7 @@ public class TeleportManager implements Listener {
// 记录请求创建时间
teleportRequestTimes.put(sender + ":" + target.getName(), now);
// 通知发送者(Java版带撤回按钮,基岩版纯文本)
// 通知发送者(Java版带撤回按钮,基岩版纯文本)——非自动接受时才打印
if (isBedrockPlayer(player)) {
player.sendMessage("§a[传送] 已向 §f" + targetName + " §a发送传送请求");
// 显示请求剩余有效时间
@@ -534,13 +534,10 @@ public class TeleportManager implements Listener {
.hoverEvent(HoverEvent.showText(Component.text("点击撤回传送请求")))));
}
// ★ 自动接受检查(先判断,避免打印多余通知)
if (checkAutoAccept(target.getName(), sender, "tpa")) {
return true;
}
// 通知接收者(可点击消息)——非自动接受时才打印
sendClickableRequestNotice(target, sender);
if (!checkAutoAccept(target.getName(), sender, "tpa")) {
sendClickableRequestNotice(target, sender);
}
return true;
}