修复6项问题:
- GUI袭击开关(启用袭击/禁止袭击双向切换) - GUI增益效果添加改为可点击选择列表 - GUI添加成员排除领地主人 - 成员权限面板添加管理员状态显示和命令提示 - 新增setadmin/unsetadmin命令设置管理员 - 容器权限独立控制已验证
This commit is contained in:
@@ -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<Player> onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers());
|
||||
Set<String> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user