From a44bc88bd0eeef70a0643c60657b08edeb0a2949 Mon Sep 17 00:00:00 2001 From: youpaishidifu <1@ypshidifu.cn> Date: Tue, 27 Oct 2026 15:17:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC57=E6=89=B9=E7=BB=AD20:=20syncOnlinePl?= =?UTF-8?q?ayers=20=E6=94=B9=E6=8E=A8=E5=85=A8=E9=87=8F=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6(=E4=B8=8D=E5=86=8D=E7=AD=9BloggedIn)?= =?UTF-8?q?=E2=80=94=E2=80=94=E4=BF=AE=E5=88=9A=E6=B3=A8=E5=86=8C=E6=9C=AA?= =?UTF-8?q?/login=E7=8E=A9=E5=AE=B6PHP=E5=88=A4'=E6=9C=AA=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: syncOnlinePlayers 此前只推 loggedIn 玩家, 刚注册未 /login 的玩家 在 loggedIn 集合里但漏推 → PHP online_players 表无该玩家记录 → validateWebAccess 判 !isOnline → 网页弹'未在线, 无法批准'。 修复: 删除 if(!loggedInPlayers.contains(...)) continue 过滤, 推送 Bukkit.getOnlinePlayers() 全量在线玩家(已登录+未登录)。 loggedIn 集合保留仅用于日志变化检测。 能否绕过密码验证仍由 login_verified 位决定(续19-hotfix已纠偏), '在线'与'已验证'两语义彻底解耦。 --- src/main/java/Sdf1_login/WebManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/Sdf1_login/WebManager.java b/src/main/java/Sdf1_login/WebManager.java index 827cf9b..5640a84 100644 --- a/src/main/java/Sdf1_login/WebManager.java +++ b/src/main/java/Sdf1_login/WebManager.java @@ -8654,11 +8654,13 @@ public class WebManager { } try { java.util.Collection onlinePlayers = Bukkit.getOnlinePlayers(); - java.util.Set loggedInPlayers = plugin.getLoggedIn(); // ★ 只推送已登录的玩家 + java.util.Set loggedInPlayers = plugin.getLoggedIn(); // ★ 仅用于日志变化检测 + // ★ 第57批续20: 推送全部在线玩家(已登录+未登录), 不再筛 loggedIn。 + // 根因: 刚注册未 /login 的玩家在 loggedIn 里但不在 online_players 表里, + // PHP validateWebAccess 判 !isOnline → 弹"未在线"。 + // 修复后: 在线=PHP online_players 有记录, 能否绕过密码=login_verified 位(续19-hotfix), 两者解耦。 List> playersData = new ArrayList<>(); for (Player p : onlinePlayers) { - // ★ 关键:只有真正输入密码登录的玩家才推送到PHP - if (!loggedInPlayers.contains(p.getName())) continue; Map playerInfo = new LinkedHashMap<>(); playerInfo.put("name", p.getName()); playerInfo.put("login_time", System.currentTimeMillis() / 1000);