From d4ec8ab5eeba1381160fbb65a5ef26009e55da4c Mon Sep 17 00:00:00 2001 From: YuKun Liu Date: Mon, 29 Dec 2025 18:03:34 +0800 Subject: [PATCH] feat: code --- .../online/mineroo/common/Serializable.java | 0 .../mineroo/paper/listeners/Config.java | 0 .../paper/listeners/DialogResponseView.java | 0 .../paper/listeners/PlayerBindListener.java | 25 +++++++++---------- .../main/resources/i18n/messages.properties | 9 ++++--- 5 files changed, 18 insertions(+), 16 deletions(-) delete mode 100644 common/src/main/java/online/mineroo/common/Serializable.java delete mode 100644 paper/src/main/java/online/mineroo/paper/listeners/Config.java delete mode 100644 paper/src/main/java/online/mineroo/paper/listeners/DialogResponseView.java diff --git a/common/src/main/java/online/mineroo/common/Serializable.java b/common/src/main/java/online/mineroo/common/Serializable.java deleted file mode 100644 index e69de29..0000000 diff --git a/paper/src/main/java/online/mineroo/paper/listeners/Config.java b/paper/src/main/java/online/mineroo/paper/listeners/Config.java deleted file mode 100644 index e69de29..0000000 diff --git a/paper/src/main/java/online/mineroo/paper/listeners/DialogResponseView.java b/paper/src/main/java/online/mineroo/paper/listeners/DialogResponseView.java deleted file mode 100644 index e69de29..0000000 diff --git a/paper/src/main/java/online/mineroo/paper/listeners/PlayerBindListener.java b/paper/src/main/java/online/mineroo/paper/listeners/PlayerBindListener.java index ae4406b..3740746 100644 --- a/paper/src/main/java/online/mineroo/paper/listeners/PlayerBindListener.java +++ b/paper/src/main/java/online/mineroo/paper/listeners/PlayerBindListener.java @@ -20,6 +20,7 @@ import online.mineroo.common.BindRequest; import online.mineroo.common.BindRequest.PlayerBindEnum; import online.mineroo.common.BindRequest.PlayerBindResponse; import online.mineroo.common.BindRequest.PlayerBindStatusEnum; +import online.mineroo.common.MessageManager; import online.mineroo.paper.Config; import online.mineroo.paper.MinerooCore; import org.bukkit.Bukkit; @@ -53,6 +54,8 @@ public class PlayerBindListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Config config = this.plugin.getConfigObject(); + MessageManager messageManager = this.plugin.getMessageManager(); + if (!config.getPlayer().getPlayerBind().isRequired()) { return; } @@ -63,21 +66,18 @@ public class PlayerBindListener implements Listener { // Lock player immediately upon join restrictedPlayers.add(uuid); - // 延迟 2 秒 (40 ticks) 再发送检查请求,给予 Proxy 通道建立缓冲时间,防止发包过快导致丢失 (504) Bukkit.getScheduler().runTaskLater(plugin, () -> { if (!player.isOnline()) { - restrictedPlayers.remove(uuid); // 玩家中途退出,清理缓存 + restrictedPlayers.remove(uuid); return; } - // 异步检查,避免阻塞主线程 this.plugin.getBindRequest() .checkPlayerBindStatus(uuid, null) .thenAccept(response -> { - // 回到主线程处理 UI 和 踢出逻辑 Bukkit.getScheduler().runTask(plugin, () -> { if (!player.isOnline()) - return; // 玩家可能在检查期间退出了 + return; handleBindStatus(player, response.getStatus(), response.getMessage()); }); @@ -86,9 +86,7 @@ public class PlayerBindListener implements Listener { plugin.getLogger().severe("Failed to check bind status for " + uuid); e.printStackTrace(); Bukkit.getScheduler().runTask(plugin, () -> { - player.kick( - Component.text("Internal server error, please try again later.", NamedTextColor.RED) - ); + player.kick(messageManager.get("error.internal")); }); return null; }); @@ -114,10 +112,8 @@ public class PlayerBindListener implements Listener { dialogResponse.completeOnTimeout(null, 2, TimeUnit.MINUTES); awaitingResponse.put(uniqueId, dialogResponse); - // 使用 player 直接显示 Dialog player.showDialog(dialog); - // 异步等待 Dialog 结果,不阻塞主线程 dialogResponse.thenAccept(bindResponse -> { Bukkit.getScheduler().runTask(plugin, () -> { awaitingResponse.remove(uniqueId); @@ -130,12 +126,10 @@ public class PlayerBindListener implements Listener { } if (bindResponse.getStatus() == PlayerBindEnum.BOUND) { - // 极其罕见的情况:请求瞬间已绑定(通常不会发生,除非已有自动绑定逻辑) restrictedPlayers.remove(uniqueId); player.sendMessage(this.plugin.getMessageManager().get("info.bind.player.success")); } else if (bindResponse.getStatus() == PlayerBindEnum.PENDING) { player.closeDialog(); - // 提交成功,踢出玩家,让其去网站确认 player.kick(this.plugin.getMessageManager().get("info.bind.player.pending")); } else { player.closeDialog(); @@ -158,6 +152,8 @@ public class PlayerBindListener implements Listener { @EventHandler void onHandleDialog(PlayerCustomClickEvent event) { + MessageManager messageManager = plugin.getMessageManager(); + Player player = null; if (event.getCommonConnection() instanceof PlayerGameConnection conn) { player = conn.getPlayer(); @@ -191,7 +187,10 @@ public class PlayerBindListener implements Listener { }); } else if (key.equals(Key.key("mineroo:bind_user/cancel"))) { setConnectionJoinResult( - playerUuid, BindRequest.createPlayerBindErrorResponse("Canceled by user") + playerUuid, + BindRequest.createPlayerBindErrorResponse( + messageManager.getString("info.bind.player.canceled") + ) ); } } diff --git a/paper/src/main/resources/i18n/messages.properties b/paper/src/main/resources/i18n/messages.properties index 2963ec8..36b2486 100644 --- a/paper/src/main/resources/i18n/messages.properties +++ b/paper/src/main/resources/i18n/messages.properties @@ -18,10 +18,13 @@ command.bind.server.retry=验证未通过,10 秒后重试 (/< ## Player Bind [Both for screen and command] info.bind.player.already-bound=当前用户已绑定 info.bind.player.dialog-undefined=Dialog 加载失败,请联系管理员 -info.bind.player.pending = "绑定申请已发送,请登录 Mineroo 网站进行后续操作。" -info.bind.player.success = "绑定成功!" -info.bind.player.canceled = "绑定请求已取消。" +info.bind.player.pending = 绑定申请已发送,请登录 Mineroo 网站进行后续操作。 +info.bind.player.success = 绑定成功! +info.bind.player.canceled = 绑定请求已取消。 # Reload Command command.reload.success=配置文件重载成功!耗时 command.reload.failed=配置文件重载失败,请查看控制台日志。 + +# Error info +error.internal =内部服务器错误,请稍后再试。