From 71f38e953f6d73afffc3c835fbcd0341c42766e4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:37:46 +0000 Subject: [PATCH] refactor: restructure i18n keys for account linking system - Merge player_join and code_generated messages into unified linking.message.not_linked_1/2/3 - Hardcode command strings (/dmcc unlink, /link code: {}, /dmcc link) in Java code - Remove redundant "your code is: CODE" line from /dmcc link response - Rename _suffix/_tail/_prefix naming to _1/_2/_3 pattern - Move tooltip keys to linking.tooltip.click_to_copy/click_to_run - Fix zh_cn: consumed phrasing, refresh wording, add "Minecraft" prefix to player references - Remove dead buildCodeGeneratedMessage() method, unify into buildNotLinkedMessage() Co-authored-by: Xujiayao <58985541+Xujiayao@users.noreply.github.com> --- core/src/main/resources/lang/en_us.yml | 28 +++++------- core/src/main/resources/lang/zh_cn.yml | 28 +++++------- .../events/MinecraftEventHandler.java | 44 ++++++------------- 3 files changed, 33 insertions(+), 67 deletions(-) diff --git a/core/src/main/resources/lang/en_us.yml b/core/src/main/resources/lang/en_us.yml index b82790b3..f93a31c5 100644 --- a/core/src/main/resources/lang/en_us.yml +++ b/core/src/main/resources/lang/en_us.yml @@ -131,15 +131,6 @@ commands: player_only: "This command can only be used by a Minecraft player." discord_only: "This command can only be used from Discord." not_available: "This command is not available in the current mode." - already_linked: "Your Minecraft account is already linked to Discord user \"{}\". Run " - already_linked_unlink: "/dmcc unlink" - already_linked_suffix: " to unlink." - code_generated_prefix: "Your verification code is: " - code_generated_suffix: ". Use " - code_generated_discord_cmd: "/link code: {}" - code_generated_tail: " on Discord to complete linking. The code expires in 5 minutes. If expired, run " - code_generated_refresh_cmd: "/dmcc link" - code_generated_refresh_tail: " in-game to get a new code." invalid_code: "Invalid or expired verification code." success: "Successfully linked to Minecraft player \"{}\"!" uuid_already_linked: "This Minecraft account is already linked to another Discord user." @@ -274,15 +265,16 @@ linking: unlinked_minecraft: "Unlinked Minecraft player {} ({}) from Discord user {} ({})!" uuid_already_linked: "Minecraft player {} ({}) is already linked to Discord user {} ({})." verification: - generated: "Generated verification code for player {}: {}!" - refreshed: "Refreshed verification code for player {}: {}!" - consumed: "Verification code consumed by player {}: {}!" - player_join: - not_linked_prefix: "Your Minecraft account is not linked to Discord. Use " - not_linked_discord_cmd: "/link code: {}" - not_linked_middle: " on Discord to complete linking. The code expires in 5 minutes. If expired, run " - not_linked_refresh_cmd: "/dmcc link" - not_linked_refresh_tail: " in-game to get a new code." + generated: "Generated verification code for Minecraft player {}: {}!" + refreshed: "Refreshed verification code validity for Minecraft player {}: {}!" + consumed: "Minecraft player {} completed linking with verification code {}!" + message: + not_linked_1: "Your Minecraft account is not linked to a Discord user. Use " + not_linked_2: " on Discord to complete linking. The code expires in 5 minutes. Run " + not_linked_3: " in-game to refresh the code validity." + already_linked_1: "Your Minecraft account is already linked to Discord user \"{}\". Run " + already_linked_2: " to unlink." + tooltip: click_to_copy: "Click to copy" click_to_run: "Click to fill command" diff --git a/core/src/main/resources/lang/zh_cn.yml b/core/src/main/resources/lang/zh_cn.yml index bc170a92..45871812 100644 --- a/core/src/main/resources/lang/zh_cn.yml +++ b/core/src/main/resources/lang/zh_cn.yml @@ -131,15 +131,6 @@ commands: player_only: "此命令只能由 Minecraft 玩家使用。" discord_only: "此命令只能在 Discord 上使用。" not_available: "此命令在当前模式下不可用。" - already_linked: "你的 Minecraft 账户已绑定到 Discord 用户 \"{}\"。执行 " - already_linked_unlink: "/dmcc unlink" - already_linked_suffix: " 解除绑定。" - code_generated_prefix: "你的验证码是:" - code_generated_suffix: "。在 Discord 上使用 " - code_generated_discord_cmd: "/link code: {}" - code_generated_tail: " 命令来完成绑定。验证码将在 5 分钟后过期。若过期可在游戏内执行 " - code_generated_refresh_cmd: "/dmcc link" - code_generated_refresh_tail: " 获取新验证码。" invalid_code: "无效或已过期的验证码。" success: "成功绑定 Minecraft 玩家 \"{}\"!" uuid_already_linked: "此 Minecraft 账户已绑定到另一个 Discord 用户。" @@ -274,15 +265,16 @@ linking: unlinked_minecraft: "已解除 Minecraft 玩家 {} ({}) 与 Discord 用户 {} ({}) 的绑定!" uuid_already_linked: "Minecraft 玩家 {} ({}) 已绑定到 Discord 用户 {} ({})。" verification: - generated: "已为玩家 {} 生成验证码 {}!" - refreshed: "已为玩家 {} 刷新验证码 {}!" - consumed: "验证码已被玩家 {} 使用:{}!" - player_join: - not_linked_prefix: "你的 Minecraft 账户尚未与 Discord 用户绑定。在 Discord 上使用 " - not_linked_discord_cmd: "/link code: {}" - not_linked_middle: " 命令来完成绑定。验证码将在 5 分钟后过期。若过期可在游戏内执行 " - not_linked_refresh_cmd: "/dmcc link" - not_linked_refresh_tail: " 获取新验证码。" + generated: "已为 Minecraft 玩家 {} 生成验证码 {}!" + refreshed: "已刷新 Minecraft 玩家 {} 的验证码 {} 有效期!" + consumed: "Minecraft 玩家 {} 使用验证码 {} 完成绑定!" + message: + not_linked_1: "你的 Minecraft 账户尚未与 Discord 用户绑定。在 Discord 上使用 " + not_linked_2: " 完成绑定。验证码将在 5 分钟后过期,届时可执行 " + not_linked_3: " 刷新验证码有效期。" + already_linked_1: "你的 Minecraft 账户已绑定到 Discord 用户 \"{}\"。执行 " + already_linked_2: " 解除绑定。" + tooltip: click_to_copy: "点击复制" click_to_run: "点击填入命令" diff --git a/minecraft/src/main/java/com/xujiayao/discord_mc_chat/minecraft/events/MinecraftEventHandler.java b/minecraft/src/main/java/com/xujiayao/discord_mc_chat/minecraft/events/MinecraftEventHandler.java index 1aded46e..de52d74f 100644 --- a/minecraft/src/main/java/com/xujiayao/discord_mc_chat/minecraft/events/MinecraftEventHandler.java +++ b/minecraft/src/main/java/com/xujiayao/discord_mc_chat/minecraft/events/MinecraftEventHandler.java @@ -347,7 +347,7 @@ public class MinecraftEventHandler { if (event.alreadyLinked()) { player.sendSystemMessage(buildAlreadyLinkedMessage(event.discordName())); } else if (event.code() != null) { - player.sendSystemMessage(buildCodeGeneratedMessage(event.code())); + player.sendSystemMessage(buildNotLinkedMessage(event.code())); } } } catch (Exception ignored) { @@ -547,7 +547,8 @@ public class MinecraftEventHandler { } /** - * Builds a rich Component for the "not linked" player join notification. + * Builds a rich Component for the "not linked" notification shown on both player join + * and /dmcc link when the account is not linked. * Contains inline clickable elements: [/link code: CODE] for copy-to-clipboard * and [/dmcc link] for suggest-command. * @@ -556,30 +557,11 @@ public class MinecraftEventHandler { */ private static Component buildNotLinkedMessage(String code) { return Component.empty() - .append(Component.literal(I18nManager.getDmccTranslation("linking.player_join.not_linked_prefix"))) - .append(buildCopyToClipboard(I18nManager.getDmccTranslation("linking.player_join.not_linked_discord_cmd", code))) - .append(Component.literal(I18nManager.getDmccTranslation("linking.player_join.not_linked_middle"))) - .append(buildSuggestCommand("/dmcc link", I18nManager.getDmccTranslation("linking.player_join.not_linked_refresh_cmd"))) - .append(Component.literal(I18nManager.getDmccTranslation("linking.player_join.not_linked_refresh_tail"))); - } - - /** - * Builds a rich Component for the "code generated" response from /dmcc link. - * Contains inline clickable elements: [/link code: CODE] for copy-to-clipboard - * and [/dmcc link] for suggest-command. - * - * @param code The verification code. - * @return A rich Component with inline clickable elements. - */ - private static Component buildCodeGeneratedMessage(String code) { - return Component.empty() - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.code_generated_prefix"))) - .append(buildCopyToClipboard(code)) - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.code_generated_suffix"))) - .append(buildCopyToClipboard(I18nManager.getDmccTranslation("commands.link.code_generated_discord_cmd", code))) - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.code_generated_tail"))) - .append(buildSuggestCommand("/dmcc link", I18nManager.getDmccTranslation("commands.link.code_generated_refresh_cmd"))) - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.code_generated_refresh_tail"))); + .append(Component.literal(I18nManager.getDmccTranslation("linking.message.not_linked_1"))) + .append(buildCopyToClipboard("/link code: " + code)) + .append(Component.literal(I18nManager.getDmccTranslation("linking.message.not_linked_2"))) + .append(buildSuggestCommand("/dmcc link", "/dmcc link")) + .append(Component.literal(I18nManager.getDmccTranslation("linking.message.not_linked_3"))); } /** @@ -591,9 +573,9 @@ public class MinecraftEventHandler { */ private static Component buildAlreadyLinkedMessage(String discordName) { return Component.empty() - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.already_linked", discordName))) - .append(buildSuggestCommand("/dmcc unlink", I18nManager.getDmccTranslation("commands.link.already_linked_unlink"))) - .append(Component.literal(I18nManager.getDmccTranslation("commands.link.already_linked_suffix"))); + .append(Component.literal(I18nManager.getDmccTranslation("linking.message.already_linked_1", discordName))) + .append(buildSuggestCommand("/dmcc unlink", "/dmcc unlink")) + .append(Component.literal(I18nManager.getDmccTranslation("linking.message.already_linked_2"))); } /** @@ -607,7 +589,7 @@ public class MinecraftEventHandler { return Component.literal("[" + text + "]").withStyle(style -> style .withClickEvent(new ClickEvent.CopyToClipboard(text)) .withHoverEvent(new HoverEvent.ShowText( - Component.literal(I18nManager.getDmccTranslation("linking.player_join.click_to_copy")))) + Component.literal(I18nManager.getDmccTranslation("linking.tooltip.click_to_copy")))) .withColor(ChatFormatting.GREEN)); } @@ -623,7 +605,7 @@ public class MinecraftEventHandler { return Component.literal("[" + displayText + "]").withStyle(style -> style .withClickEvent(new ClickEvent.SuggestCommand(command)) .withHoverEvent(new HoverEvent.ShowText( - Component.literal(I18nManager.getDmccTranslation("linking.player_join.click_to_run")))) + Component.literal(I18nManager.getDmccTranslation("linking.tooltip.click_to_run")))) .withColor(ChatFormatting.GREEN)); }