修复:CLI设为管理员按钮全局置顶、返回成员列表按钮、PHP配置同步
This commit is contained in:
@@ -868,19 +868,6 @@ public class AreaCLIManager {
|
||||
|
||||
p.sendMessage(header(targetPlayer + " 的独立权限"));
|
||||
|
||||
// 领地主可以切换普通成员的管理员身份
|
||||
if (isOwner && !targetPlayer.equalsIgnoreCase(land.owner)) {
|
||||
Component adminLine = Component.empty();
|
||||
adminLine = adminLine.append(Component.text("§7✘ §f身份: §7普通成员"));
|
||||
adminLine = adminLine.append(Component.text(" "));
|
||||
adminLine = adminLine.append(Component.text("§a[设为管理员]")
|
||||
.hoverEvent(HoverEvent.showText(Component.text("§a授予该玩家管理员身份(自动获得所有权限)")))
|
||||
.clickEvent(ClickEvent.runCommand(
|
||||
"/protect cli toggleadmin " + land.name + " " + targetPlayer + " " + page)));
|
||||
p.sendMessage(adminLine);
|
||||
p.sendMessage(Component.text(""));
|
||||
}
|
||||
|
||||
// 显示说明
|
||||
p.sendMessage(Component.text("§7§l说明:"));
|
||||
p.sendMessage(Component.text(" §a✔ 已启用 §7= 允许该操作"));
|
||||
@@ -932,6 +919,19 @@ public class AreaCLIManager {
|
||||
p.sendMessage(pagination);
|
||||
}
|
||||
|
||||
// ★ 设为管理员按钮(全局置顶,打印在最后=聊天窗口最底部)
|
||||
if (isOwner && !targetPlayer.equalsIgnoreCase(land.owner)) {
|
||||
Component adminLine = Component.empty();
|
||||
adminLine = adminLine.append(Component.text("§7✘ §f身份: §7普通成员"));
|
||||
adminLine = adminLine.append(Component.text(" "));
|
||||
adminLine = adminLine.append(Component.text("§a[设为管理员]")
|
||||
.hoverEvent(HoverEvent.showText(Component.text("§a授予该玩家管理员身份(自动获得所有权限)")))
|
||||
.clickEvent(ClickEvent.runCommand(
|
||||
"/protect cli toggleadmin " + land.name + " " + targetPlayer + " " + page)));
|
||||
p.sendMessage(adminLine);
|
||||
p.sendMessage(Component.text(""));
|
||||
}
|
||||
|
||||
// 清除按钮
|
||||
p.sendMessage(Component.empty()
|
||||
.append(Component.text("§c[清除所有自定义权限]")
|
||||
@@ -940,10 +940,11 @@ public class AreaCLIManager {
|
||||
.clickEvent(ClickEvent.runCommand(
|
||||
"/protect cli clearplayerperm " + land.name + " " + targetPlayer))));
|
||||
|
||||
// ★ 修复:返回成员管理(含删除按钮),不是成员权限列表
|
||||
p.sendMessage(Component.empty()
|
||||
.append(Component.text("§a[◀ 返回成员列表]")
|
||||
.clickEvent(ClickEvent.runCommand(
|
||||
"/protect cli memberperm " + land.name + " 1"))));
|
||||
"/protect cli members " + land.name + " 1"))));
|
||||
p.sendMessage(Component.text("§7§l───────────────────────────────"));
|
||||
}
|
||||
|
||||
|
||||
@@ -7343,6 +7343,24 @@ public class AreaProtection implements Listener {
|
||||
updateAreaConfig(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ★ 获取全部area_config配置(用于同步到PHP)
|
||||
*/
|
||||
public Map<String, String> getAllAreaConfigForSync() {
|
||||
Map<String, String> config = new LinkedHashMap<>();
|
||||
if (dbConnection == null) return config;
|
||||
try {
|
||||
ResultSet rs = dbConnection.createStatement().executeQuery("SELECT key, value FROM area_config");
|
||||
while (rs.next()) {
|
||||
config.put(rs.getString("key"), rs.getString("value"));
|
||||
}
|
||||
rs.close();
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().warning("[防护] 读取配置同步数据失败: " + e.getMessage());
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
// ==================== 管理员配置输入(GUI→聊天栏) ====================
|
||||
|
||||
/**
|
||||
|
||||
@@ -2792,6 +2792,11 @@ public class WebManager {
|
||||
hashBuilder.append(land.getOrDefault("warp_pitch", 0)).append(":");
|
||||
hashBuilder.append(land.getOrDefault("warp_world", "")).append("|");
|
||||
}
|
||||
// ★ 配置变化也触发同步
|
||||
Map<String, String> cfgForHash = areaProtect.getAllAreaConfigForSync();
|
||||
for (Map.Entry<String, String> entry : cfgForHash.entrySet()) {
|
||||
hashBuilder.append("cfg:").append(entry.getKey()).append("=").append(entry.getValue()).append(":");
|
||||
}
|
||||
String currentHash = lands.size() + ":" + hashBuilder.toString();
|
||||
if (currentHash.equals(lastLandDataHash)) return;
|
||||
lastLandDataHash = currentHash;
|
||||
@@ -2849,6 +2854,26 @@ public class WebManager {
|
||||
httpGet("api/sync.php", params);
|
||||
}
|
||||
|
||||
// 3. 同步全局配置(area_config → web_area_config)
|
||||
Map<String, String> config = areaProtect.getAllAreaConfigForSync();
|
||||
if (!config.isEmpty()) {
|
||||
StringBuilder cfgSb = new StringBuilder("{");
|
||||
boolean first = true;
|
||||
for (Map.Entry<String, String> entry : config.entrySet()) {
|
||||
if (!first) cfgSb.append(",");
|
||||
cfgSb.append("\"").append(escapeJson(entry.getKey())).append("\":\"")
|
||||
.append(escapeJson(entry.getValue())).append("\"");
|
||||
first = false;
|
||||
}
|
||||
cfgSb.append("}");
|
||||
Map<String, String> cfgParams = new LinkedHashMap<>();
|
||||
cfgParams.put("action", "sync_config");
|
||||
cfgParams.put("secret", secretKey);
|
||||
cfgParams.put("config", cfgSb.toString());
|
||||
String cfgResp = httpGet("api/sync.php", cfgParams);
|
||||
plugin.getLogger().info("[防护-sync] 配置同步: " + cfgResp);
|
||||
}
|
||||
|
||||
plugin.getLogger().fine("[Web通信] 领地数据同步完成");
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().warning("[Web通信] 领地同步异常: " + e.getMessage());
|
||||
|
||||
Reference in New Issue
Block a user