From 925017e21a215b2302d79c5e396d06f8b6c92c2d Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Thu, 2 Jul 2026 19:17:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E5=9C=B0=E6=8B=BE=E5=8F=96/=E4=B8=A2?= =?UTF-8?q?=E5=BC=83=E6=9D=83=E9=99=90=E9=87=8D=E6=9E=84:=20denyPickup/den?= =?UTF-8?q?yDrop=20=E2=86=92=20allowPickup/allowDrop(=E6=AD=A3=E5=90=91?= =?UTF-8?q?=E5=91=BD=E5=90=8D),=E4=BF=AE=E5=A4=8D=E8=AE=BF=E5=AE=A2?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Sdf1_login/AreaCLIManager.java | 27 ++++++------ src/main/java/Sdf1_login/AreaGUIManager.java | 26 +++++++----- src/main/java/Sdf1_login/AreaProtection.java | 42 ++++++++++++------- src/main/java/Sdf1_login/TeleportManager.java | 11 ++--- 4 files changed, 59 insertions(+), 47 deletions(-) diff --git a/src/main/java/Sdf1_login/AreaCLIManager.java b/src/main/java/Sdf1_login/AreaCLIManager.java index 3473e9d..40e390f 100644 --- a/src/main/java/Sdf1_login/AreaCLIManager.java +++ b/src/main/java/Sdf1_login/AreaCLIManager.java @@ -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; diff --git a/src/main/java/Sdf1_login/AreaGUIManager.java b/src/main/java/Sdf1_login/AreaGUIManager.java index aadb7ee..64c7f3b 100644 --- a/src/main/java/Sdf1_login/AreaGUIManager.java +++ b/src/main/java/Sdf1_login/AreaGUIManager.java @@ -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"}, diff --git a/src/main/java/Sdf1_login/AreaProtection.java b/src/main/java/Sdf1_login/AreaProtection.java index f6cb07d..5d70fbd 100644 --- a/src/main/java/Sdf1_login/AreaProtection.java +++ b/src/main/java/Sdf1_login/AreaProtection.java @@ -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++; diff --git a/src/main/java/Sdf1_login/TeleportManager.java b/src/main/java/Sdf1_login/TeleportManager.java index 5432360..d3eb7c4 100644 --- a/src/main/java/Sdf1_login/TeleportManager.java +++ b/src/main/java/Sdf1_login/TeleportManager.java @@ -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; }