From 421e24b5f0efd3d4942f5c9b48db93ca5fd83e35 Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Tue, 20 Jan 2026 23:52:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xujiayao/discord_mc_chat/DMCC.java | 4 ++ .../discord_mc_chat/client/ClientHandler.java | 10 ++--- .../discord_mc_chat/client/NettyClient.java | 6 +-- .../discord_mc_chat/server/NettyServer.java | 4 +- .../discord_mc_chat/server/ServerHandler.java | 25 ++++++----- core/src/main/resources/lang/en_us.yml | 38 +++++++--------- core/src/main/resources/lang/zh_cn.yml | 44 +++++++++---------- 7 files changed, 66 insertions(+), 65 deletions(-) diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java index d47debf9..e49435a9 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java @@ -108,11 +108,13 @@ public class DMCC { int port = serverInstance.start(); if (port == -1) { + LOGGER.error(I18nManager.getDmccTranslation("main.init.failed")); return false; } else { // Client instance gets the same secret to authenticate clientInstance = new ClientDMCC("127.0.0.1", port, internalServerName, internalSharedSecret); if (!clientInstance.start()) { + LOGGER.error(I18nManager.getDmccTranslation("main.init.failed")); return false; } } @@ -125,6 +127,7 @@ public class DMCC { clientInstance = new ClientDMCC(host, port, name, secret); if (!clientInstance.start()) { + LOGGER.error(I18nManager.getDmccTranslation("main.init.failed")); return false; } } @@ -135,6 +138,7 @@ public class DMCC { serverInstance = new ServerDMCC(host, port, secret); if (serverInstance.start() == -1) { + LOGGER.error(I18nManager.getDmccTranslation("main.init.failed")); return false; } } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java index 0beb0662..efe5c7fd 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java @@ -41,11 +41,11 @@ public class ClientHandler extends SimpleChannelInboundHandler { @Override public void channelInactive(ChannelHandlerContext ctx) { - LOGGER.info(I18nManager.getDmccTranslation("network.client.disconnected_generic")); + LOGGER.info(I18nManager.getDmccTranslation("client.network.disconnected_generic")); // Trigger reconnection if this was not an intentional stop if (client.isRunning()) { - LOGGER.info(I18nManager.getDmccTranslation("network.client.reconnecting")); + LOGGER.info(I18nManager.getDmccTranslation("client.network.reconnecting")); client.scheduleReconnect(); } } @@ -58,7 +58,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { } else if (packet instanceof LoginSuccessPacket p) { I18nManager.load(p.language); - LOGGER.info(I18nManager.getDmccTranslation("network.client.connected")); + LOGGER.info(I18nManager.getDmccTranslation("client.network.connected")); if (!initialLoginFuture.isDone()) { initialLoginFuture.complete(true); @@ -66,7 +66,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { } else if (packet instanceof DisconnectPacket p) { String reason = I18nManager.getDmccTranslation(p.key, p.args); - LOGGER.error(I18nManager.getDmccTranslation("network.client.disconnected_reason", reason)); + LOGGER.error(I18nManager.getDmccTranslation("client.network.disconnected_reason", reason)); if (!initialLoginFuture.isDone()) { initialLoginFuture.complete(false); @@ -88,7 +88,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - LOGGER.error(I18nManager.getDmccTranslation("network.client.connect_failed"), cause); + LOGGER.error(I18nManager.getDmccTranslation("client.network.connect_failed"), cause); if (!initialLoginFuture.isDone()) { initialLoginFuture.complete(false); } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java b/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java index 7035d67e..b2549a1f 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java @@ -71,7 +71,7 @@ public class NettyClient { // Wait for the INITIAL handshake to complete return initialLoginFuture.get(10, TimeUnit.SECONDS); } catch (Exception e) { - LOGGER.error(I18nManager.getDmccTranslation("network.client.connect_failed"), e); + LOGGER.error(I18nManager.getDmccTranslation("client.network.connect_failed"), e); stop(); return false; } @@ -99,7 +99,7 @@ public class NettyClient { }); if (isInitialAttempt) { - LOGGER.info(I18nManager.getDmccTranslation("network.client.connecting", host, port)); + LOGGER.info(I18nManager.getDmccTranslation("client.network.connecting", host, port)); } b.connect(host, port).addListener((ChannelFuture future) -> { @@ -110,7 +110,7 @@ public class NettyClient { if (isInitialAttempt) { initialLoginFuture.completeExceptionally(future.cause()); } else { - LOGGER.warn(I18nManager.getDmccTranslation("network.client.reconnect_failed", reconnectDelay.get())); + LOGGER.warn(I18nManager.getDmccTranslation("client.network.reconnect_failed", reconnectDelay.get())); scheduleReconnect(); } } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java index 8c5fe7f8..8cddc0df 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java @@ -76,11 +76,11 @@ public class NettyServer { ChannelFuture channelFuture = b.bind(host, port).sync(); int boundPort = ((InetSocketAddress) channelFuture.channel().localAddress()).getPort(); - LOGGER.info(I18nManager.getDmccTranslation("network.server.listening", boundPort)); + LOGGER.info(I18nManager.getDmccTranslation("server.network.listening", boundPort)); return boundPort; } catch (Exception e) { - LOGGER.error(I18nManager.getDmccTranslation("network.server.bind_failed", port), e); + LOGGER.error(I18nManager.getDmccTranslation("server.network.bind_failed", port), e); return -1; } } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java index a1959eae..3101616c 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java @@ -44,7 +44,7 @@ public class ServerHandler extends SimpleChannelInboundHandler { @Override public void channelInactive(ChannelHandlerContext ctx) { if (clientName != null) { - LOGGER.info(I18nManager.getDmccTranslation("network.server.client_disconnected_normal", clientName)); + LOGGER.info(I18nManager.getDmccTranslation("server.network.client_disconnected_normal", clientName)); } } @@ -53,15 +53,17 @@ public class ServerHandler extends SimpleChannelInboundHandler { switch (packet) { case HandshakePacket p -> { if (!isWhitelisted(p.serverName)) { - LOGGER.warn(I18nManager.getDmccTranslation("network.server.whitelist_refused", p.serverName)); - ctx.writeAndFlush(new DisconnectPacket("network.disconnect.not_whitelisted", p.serverName)); + String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.not_whitelisted", p.serverName); + LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason)); + ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.not_whitelisted", p.serverName)); ctx.close(); return; } if (!Constants.VERSION.equals(p.version)) { - LOGGER.warn(I18nManager.getDmccTranslation("network.server.version_mismatch", p.version, Constants.VERSION)); - ctx.writeAndFlush(new DisconnectPacket("network.disconnect.version_mismatch", p.version, Constants.VERSION)); + String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.version_mismatch", p.version, Constants.VERSION); + LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason)); + ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.version_mismatch", p.version, Constants.VERSION)); ctx.close(); return; } @@ -75,12 +77,13 @@ public class ServerHandler extends SimpleChannelInboundHandler { if (correctHash.equals(p.hash)) { this.authenticated = true; - LOGGER.info(I18nManager.getDmccTranslation("network.server.auth_success", clientName)); + LOGGER.info(I18nManager.getDmccTranslation("server.network.auth_success", clientName)); ctx.writeAndFlush(new LoginSuccessPacket(ConfigManager.getString("language"))); // TODO: Add to active clients list } else { - LOGGER.warn(I18nManager.getDmccTranslation("network.server.auth_failed", clientName)); - ctx.writeAndFlush(new DisconnectPacket("network.disconnect.auth_failed")); + String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.auth_failed"); + LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason)); + ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.auth_failed")); ctx.close(); } } @@ -90,7 +93,9 @@ public class ServerHandler extends SimpleChannelInboundHandler { case null, default -> { // Handle other packets if authenticated if (!authenticated) { - ctx.writeAndFlush(new DisconnectPacket("network.disconnect.not_authenticated")); + String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.not_authenticated"); + LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason)); + ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.not_authenticated")); ctx.close(); } } @@ -101,7 +106,7 @@ public class ServerHandler extends SimpleChannelInboundHandler { public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof IdleStateEvent e) { if (e.state() == IdleState.READER_IDLE) { - LOGGER.warn(I18nManager.getDmccTranslation("network.server.client_timeout", clientName != null ? clientName : "unknown")); + LOGGER.warn(I18nManager.getDmccTranslation("server.network.client_timeout", clientName != null ? clientName : "unknown")); ctx.close(); } } else { diff --git a/core/src/main/resources/lang/en_us.yml b/core/src/main/resources/lang/en_us.yml index e3ac2e42..a470b8bc 100644 --- a/core/src/main/resources/lang/en_us.yml +++ b/core/src/main/resources/lang/en_us.yml @@ -61,33 +61,29 @@ discord: server: discord_init_failed: "Failed to initialize Discord Manager. Aborting DMCC Server startup." startup_interrupted: "DMCC Server startup was interrupted." + network: + listening: "DMCC Server is now listening on port {}." + bind_failed: "Failed to bind to port {}." + reject: "Rejected DMCC Client \"{}\" connection. Reason: {}" + auth_success: "DMCC Client authenticated: \"{}\"" + client_disconnected_normal: "DMCC Client has disconnected: \"{}\"" + client_timeout: "DMCC Client has timed out, disconnecting: \"{}\"" + disconnect_reasons: + not_whitelisted: "Name \"{}\" is not whitelisted." + version_mismatch: "Version mismatch. Client: {}, Server: {}" + auth_failed: "Authentication failed. Please check your shared secret." + not_authenticated: "Not authenticated." client: startup_interrupted: "DMCC Client startup was interrupted." - -network: - client: - connecting: "Connecting to DMCC Server at {}:{}." + network: + connecting: "Connecting to DMCC Server at {}:{}..." connected: "Connected to DMCC Server!" connect_failed: "Failed to connect to DMCC Server." - disconnected_generic: "Disconnected from server." - disconnected_reason: "Disconnected from server: {}." - reconnecting: "Reconnecting to server..." + disconnected_generic: "Disconnected from DMCC Server." + disconnected_reason: "Disconnected from DMCC Server. Reason: {}" + reconnecting: "Reconnecting to DMCC Server..." reconnect_failed: "Reconnection failed. Retrying in {} seconds." - server: - listening: "DMCC Server listening on port {}." - bind_failed: "Failed to bind to port {}." - auth_success: "Client authenticated: {}." - auth_failed: "Client authentication failed: {}." - whitelist_refused: "Server name \"{}\" is not whitelisted." - version_mismatch: "Version mismatch. Client: {}, Server: {}." - client_disconnected_normal: "Client disconnected: {}." - client_timeout: "Client timed out: {}." - disconnect: - not_whitelisted: "Server name \"{}\" is not whitelisted." - version_mismatch: "Version mismatch. Client: {}, Server: {}." - auth_failed: "Authentication failed. Please check shared_secret." - not_authenticated: "Not authenticated." utils: config: diff --git a/core/src/main/resources/lang/zh_cn.yml b/core/src/main/resources/lang/zh_cn.yml index 0930a5f9..9f4b0411 100644 --- a/core/src/main/resources/lang/zh_cn.yml +++ b/core/src/main/resources/lang/zh_cn.yml @@ -59,35 +59,31 @@ discord: reply_failed_detail: "对于 reload/shutdown 命令,这是预期的行为。" server: - discord_init_failed: "初始化 Discord Manager 失败。正在中止 DMCC 服务端启动。" + discord_init_failed: "初始化 Discord 管理器失败。正在中止 DMCC 服务端启动。" startup_interrupted: "DMCC 服务端启动被中断。" + network: + listening: "DMCC 服务端正在监听端口 {}。" + bind_failed: "无法绑定端口 {}。" + reject: "拒绝与 DMCC 客户端 \"{}\" 连接。原因:{}" + auth_success: "DMCC 客户端连接成功:\"{}\"" + client_disconnected_normal: "DMCC 客户端已断开连接:\"{}\"" + client_timeout: "DMCC 客户端已超时,正在断开连接:\"{}\"" + disconnect_reasons: + not_whitelisted: "名称 \"{}\" 不在白名单中。" + version_mismatch: "版本不匹配。客户端:{},服务端:{}" + auth_failed: "验证失败。请检查你的共享密钥。" + not_authenticated: "未通过验证。" client: startup_interrupted: "DMCC 客户端启动被中断。" - -network: - client: - connecting: "正在连接至 DMCC Server {}:{}。" - connected: "已连接至 DMCC Server!" - connect_failed: "无法连接至 DMCC Server。" - disconnected_generic: "已与服务器断开连接。" - disconnected_reason: "已与服务器断开连接:{}。" - reconnecting: "正在重新连接至服务器..." + network: + connecting: "正在通过 {}:{} 连接至 DMCC 服务端..." + connected: "已连接至 DMCC 服务端!" + connect_failed: "无法连接至 DMCC 服务端。" + disconnected_generic: "已与 DMCC 服务端断开连接。" + disconnected_reason: "已与 DMCC 服务端断开连接。原因:{}" + reconnecting: "正在重新连接至 DMCC 服务端..." reconnect_failed: "重连失败。将在 {} 秒后重试。" - server: - listening: "DMCC Server 正在监听端口 {}。" - bind_failed: "无法绑定端口 {}。" - auth_success: "客户端验证成功:{}。" - auth_failed: "客户端验证失败:{}。" - whitelist_refused: "服务器名称 \"{}\" 不在白名单中。" - version_mismatch: "版本不匹配。客户端:{},服务端:{}。" - client_disconnected_normal: "客户端已断开连接:{}。" - client_timeout: "客户端超时:{}。" - disconnect: - not_whitelisted: "服务器名称 \"{}\" 不在白名单中。" - version_mismatch: "版本不匹配。客户端:{},服务端:{}。" - auth_failed: "验证失败。请检查 shared_secret。" - not_authenticated: "未通过验证。" utils: config: