From ce0052cdfb00908eaa7a6cd27456754c4e150961 Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Sat, 27 Jun 2026 12:27:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9ACLI=E8=AE=BE?= =?UTF-8?q?=E4=B8=BA=E7=AE=A1=E7=90=86=E5=91=98=E6=8C=89=E9=92=AE=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=BD=AE=E9=A1=B6=E3=80=81=E8=BF=94=E5=9B=9E=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=88=97=E8=A1=A8=E6=8C=89=E9=92=AE=E3=80=81PHP?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Sdf1_login/AreaCLIManager.java | 29 ++++++++++---------- src/main/java/Sdf1_login/AreaProtection.java | 18 ++++++++++++ src/main/java/Sdf1_login/WebManager.java | 25 +++++++++++++++++ 3 files changed, 58 insertions(+), 14 deletions(-) diff --git a/src/main/java/Sdf1_login/AreaCLIManager.java b/src/main/java/Sdf1_login/AreaCLIManager.java index 9474ebb..000fbc7 100644 --- a/src/main/java/Sdf1_login/AreaCLIManager.java +++ b/src/main/java/Sdf1_login/AreaCLIManager.java @@ -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───────────────────────────────")); } diff --git a/src/main/java/Sdf1_login/AreaProtection.java b/src/main/java/Sdf1_login/AreaProtection.java index 4f23ac9..af1fb27 100644 --- a/src/main/java/Sdf1_login/AreaProtection.java +++ b/src/main/java/Sdf1_login/AreaProtection.java @@ -7343,6 +7343,24 @@ public class AreaProtection implements Listener { updateAreaConfig(key, value); } + /** + * ★ 获取全部area_config配置(用于同步到PHP) + */ + public Map getAllAreaConfigForSync() { + Map 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→聊天栏) ==================== /** diff --git a/src/main/java/Sdf1_login/WebManager.java b/src/main/java/Sdf1_login/WebManager.java index 49e5441..f9a025f 100644 --- a/src/main/java/Sdf1_login/WebManager.java +++ b/src/main/java/Sdf1_login/WebManager.java @@ -2792,6 +2792,11 @@ public class WebManager { hashBuilder.append(land.getOrDefault("warp_pitch", 0)).append(":"); hashBuilder.append(land.getOrDefault("warp_world", "")).append("|"); } + // ★ 配置变化也触发同步 + Map cfgForHash = areaProtect.getAllAreaConfigForSync(); + for (Map.Entry 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 config = areaProtect.getAllAreaConfigForSync(); + if (!config.isEmpty()) { + StringBuilder cfgSb = new StringBuilder("{"); + boolean first = true; + for (Map.Entry entry : config.entrySet()) { + if (!first) cfgSb.append(","); + cfgSb.append("\"").append(escapeJson(entry.getKey())).append("\":\"") + .append(escapeJson(entry.getValue())).append("\""); + first = false; + } + cfgSb.append("}"); + Map 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());