From 44a9edca1b67de6ba4dadfae4dbeee666df7c10d Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Fri, 26 Jun 2026 13:18:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D6=E9=A1=B9=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9A=20-=20GUI=E8=A2=AD=E5=87=BB=E5=BC=80=E5=85=B3(?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E8=A2=AD=E5=87=BB/=E7=A6=81=E6=AD=A2?= =?UTF-8?q?=E8=A2=AD=E5=87=BB=E5=8F=8C=E5=90=91=E5=88=87=E6=8D=A2)=20-=20G?= =?UTF-8?q?UI=E5=A2=9E=E7=9B=8A=E6=95=88=E6=9E=9C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=8F=AF=E7=82=B9=E5=87=BB=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=88=97=E8=A1=A8=20-=20GUI=E6=B7=BB=E5=8A=A0=E6=88=90?= =?UTF-8?q?=E5=91=98=E6=8E=92=E9=99=A4=E9=A2=86=E5=9C=B0=E4=B8=BB=E4=BA=BA?= =?UTF-8?q?=20-=20=E6=88=90=E5=91=98=E6=9D=83=E9=99=90=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AE=A1=E7=90=86=E5=91=98=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=92=8C=E5=91=BD=E4=BB=A4=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9Esetadmin/unsetadmin=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=AE=A1=E7=90=86=E5=91=98=20-=20=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E6=9D=83=E9=99=90=E7=8B=AC=E7=AB=8B=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=B7=B2=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Sdf1_login/AreaGUIManager.java | 24 ++++++-- src/main/java/Sdf1_login/AreaProtection.java | 64 +++++++++++++++++++- 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/main/java/Sdf1_login/AreaGUIManager.java b/src/main/java/Sdf1_login/AreaGUIManager.java index 8610d68..905793e 100644 --- a/src/main/java/Sdf1_login/AreaGUIManager.java +++ b/src/main/java/Sdf1_login/AreaGUIManager.java @@ -473,6 +473,18 @@ public class AreaGUIManager implements Listener { // 返回按钮(位置49) inv.setItem(49, createItem(Material.ARROW, "§a§l返回成员列表", "")); + // ★ 管理员按钮(位置47):显示当前管理员状态 + org.bukkit.entity.Player targetOnline = Bukkit.getPlayerExact(targetPlayer); + boolean isTargetAdmin = targetOnline != null && areaProtect.isAreaAdmin(targetOnline); + Material adminMat = isTargetAdmin ? Material.GOLD_BLOCK : Material.IRON_BLOCK; + String adminStatus = isTargetAdmin ? "§a✔ 管理员" : "§c✘ 普通成员"; + inv.setItem(47, createItem(adminMat, "§6§l管理员权限", + "§7当前状态: " + adminStatus, + "", + "§7管理员自动拥有所有权限", + "§7使用命令设置: §e/protect setadmin <玩家>", + "§7使用命令移除: §e/protect unsetadmin <玩家>")); + p.openInventory(inv); } @@ -522,14 +534,17 @@ public class AreaGUIManager implements Listener { managingLand.put(p.getUniqueId(), landName); Inventory inv = Bukkit.createInventory(null, 54, T_ADD_MEMBER + " - " + landName); - // 显示在线玩家(排除自身) + // 显示在线玩家(排除自身和领地主人) List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); Set existingMembers = areaProtect.getLandMembers(landName); + AreaProtection.AreaConfig land = areaProtect.getLand(landName); + String ownerName = land != null ? land.owner : ""; int slot = 0; for (Player target : onlinePlayers) { if (slot >= 45) break; if (target.getUniqueId().equals(p.getUniqueId())) continue; // ★ 排除自身 + if (target.getName().equalsIgnoreCase(ownerName)) continue; // ★ 排除领地主人 if (existingMembers.contains(target.getName())) continue; ItemStack playerItem = createItem(Material.PLAYER_HEAD, "§a§l" + target.getName(), @@ -620,6 +635,7 @@ public class AreaGUIManager implements Listener { case "投掷末影珍珠": land.denyEnderPearl = !land.denyEnderPearl; break; case "投掷物(三叉戟/雪球/风蛋)": land.denyThrownProjectiles = !land.denyThrownProjectiles; break; case "禁止袭击": land.denyRaid = !land.denyRaid; break; + case "启用袭击": land.denyRaid = !land.denyRaid; break; case "弓箭射击": land.denyBow = !land.denyBow; break; case "药水效果": land.denyPotion = !land.denyPotion; break; case "点燃": land.denyFire = !land.denyFire; break; @@ -1480,10 +1496,8 @@ public class AreaGUIManager implements Listener { } else if (raw == 48) { openEffectsManagement(p, landName, 1); } else if (raw == 53) { - // 打开聊天栏输入增益效果 - p.closeInventory(); - p.sendMessage("§e§l[添加增益效果] §f请输入: 效果名 [等级] [秒数] (例: 力量 2 300)"); - areaProtect.setPendingClearEffectInput(p.getUniqueId(), landName, "give", 3); + // 打开效果选择列表(与单清一致) + openEffectsSelection(p, landName, "give", 3); } } } diff --git a/src/main/java/Sdf1_login/AreaProtection.java b/src/main/java/Sdf1_login/AreaProtection.java index 5622d89..813bdad 100644 --- a/src/main/java/Sdf1_login/AreaProtection.java +++ b/src/main/java/Sdf1_login/AreaProtection.java @@ -4701,7 +4701,7 @@ public class AreaProtection implements Listener { "工具", "wand", "expand", "contraction", "on", "off", "tempon", "modeexempt", "settp", "setwarp", "tp", "warp", - "setowner", "addvisitor", "removevisitor", "listvisitors", "transfer", + "setowner", "setadmin", "unsetadmin", "addvisitor", "removevisitor", "listvisitors", "transfer", "info", "setowner", "addvisitor", "removevisitor", "listvisitors", "transfer", "shop", "menu", "菜单", "sdf1debug", "testclear", "cli", @@ -6282,6 +6282,68 @@ public class AreaProtection implements Listener { return true; } + // ===== setadmin 设置管理员(通过ScoreboardTag)===== + if (sub.equals("setadmin")) { + if (!isAreaAdmin(sender)) { + sender.sendMessage("§c需要管理员权限"); + return true; + } + if (args.length < 2) { + sender.sendMessage("§e用法: /protect setadmin <玩家>"); + return true; + } + Player target = Bukkit.getPlayerExact(args[1]); + if (target == null) { + sender.sendMessage("§c玩家不在线: " + args[1]); + return true; + } + ConfigManager cfg = plugin.getConfigMgr(); + String tag = cfg != null ? cfg.areaProtectAdminTag : null; + if (tag == null || tag.isEmpty()) { + sender.sendMessage("§c管理员标签未配置"); + return true; + } + if (target.getScoreboardTags().contains(tag)) { + sender.sendMessage("§e" + args[1] + " §c已经是管理员"); + return true; + } + target.addScoreboardTag(tag); + sender.sendMessage("§a已将 §e" + args[1] + " §a设置为管理员"); + target.sendMessage("§6[区域防护] §a你已被设置为管理员"); + return true; + } + + // ===== unsetadmin 移除管理员 ===== + if (sub.equals("unsetadmin")) { + if (!isAreaAdmin(sender)) { + sender.sendMessage("§c需要管理员权限"); + return true; + } + if (args.length < 2) { + sender.sendMessage("§e用法: /protect unsetadmin <玩家>"); + return true; + } + Player target = Bukkit.getPlayerExact(args[1]); + if (target == null) { + sender.sendMessage("§c玩家不在线: " + args[1]); + return true; + } + ConfigManager cfg = plugin.getConfigMgr(); + String tag = cfg != null ? cfg.areaProtectAdminTag : null; + if (tag == null || tag.isEmpty()) { + sender.sendMessage("§c管理员标签未配置"); + return true; + } + if (!target.getScoreboardTags().contains(tag)) { + sender.sendMessage("§e" + args[1] + " §c不是管理员"); + return true; + } + target.removeScoreboardTag(tag); + sender.sendMessage("§a已移除 §e" + args[1] + " §a的管理员权限"); + target.sendMessage("§6[区域防护] §c你的管理员权限已被移除"); + return true; + } + // ===== addvisitor 添加访客(所有者+管理员)===== if (sub.equals("addvisitor")) { if (!(sender instanceof Player)) {