From d1276ce57db9630f81451f810f15829eda68fe11 Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Thu, 19 Mar 2026 13:42:52 +0800 Subject: [PATCH] Better configs --- .../packets/events/MinecraftEventPacket.java | 10 +++-- .../discord_mc_chat/server/ServerHandler.java | 12 +++--- .../server/discord/DiscordManager.java | 41 +++++++++---------- .../server/discord/DiscordMessageParser.java | 4 +- .../resources/config/config_single_server.yml | 1 + .../resources/config/config_standalone.yml | 1 + .../config/custom_messages/en_us.yml | 12 +++--- .../config/custom_messages/zh_cn.yml | 12 +++--- 8 files changed, 49 insertions(+), 44 deletions(-) diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/network/packets/events/MinecraftEventPacket.java b/core/src/main/java/com/xujiayao/discord_mc_chat/network/packets/events/MinecraftEventPacket.java index 06b46771..a2f9c982 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/network/packets/events/MinecraftEventPacket.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/network/packets/events/MinecraftEventPacket.java @@ -31,13 +31,15 @@ public class MinecraftEventPacket extends Packet { // Player events PLAYER_JOIN, PLAYER_QUIT, + PLAYER_CHAT, + PLAYER_COMMAND, PLAYER_DIE, PLAYER_ADVANCEMENT, // Source events - SOURCE_ME, - - // Player & Source events - MESSAGE + SOURCE_SAY, + SOURCE_TELL_RAW, + SOURCE_MSG, + SOURCE_ME } } 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 c56a6ed7..2b857a6f 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 @@ -85,27 +85,27 @@ public class ServerHandler extends SimpleChannelInboundHandler { switch (p.type) { // Server events case SERVER_STARTED -> { - DiscordManager.clientBroadcast(clientName, "server.started", "server.start", false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "server.started", "server.start", p.placeholders); // After a Minecraft server starts, perform OP level sync if enabled OpSyncManager.syncAll(); DiscordManager.updateBotPresence(); } case SERVER_STOPPING -> - DiscordManager.clientBroadcast(clientName, "server.stopped", "server.stop", false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "server.stopped", "server.stop", p.placeholders); // Player events case PLAYER_JOIN -> { - DiscordManager.clientBroadcast(clientName, "player.join", "player.join", false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "player.join", "player.join", p.placeholders); DiscordManager.updateBotPresence(); } case PLAYER_QUIT -> { - DiscordManager.clientBroadcast(clientName, "player.quit", "player.quit", false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "player.quit", "player.quit", p.placeholders); DiscordManager.updateBotPresence(); } case PLAYER_DIE -> - DiscordManager.clientBroadcast(clientName, "player.die", "player.die", false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "player.die", "player.die", p.placeholders); case PLAYER_ADVANCEMENT -> - DiscordManager.clientBroadcast(clientName, "player.advancement", "player.advancement." + p.placeholders.get("type"), false, p.placeholders); + DiscordManager.clientBroadcast(clientName, "player.advancement", "player.advancement." + p.placeholders.get("type"), p.placeholders); // TODO Unhandled events } } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java index e9e1fde4..e569e1dd 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java @@ -506,10 +506,9 @@ public class DiscordManager { * @param clientName The name of the DMCC client. * @param channelNode The broadcast channel identifier. * @param lang The language key for the message. - * @param isTemplate Whether the message is a template. * @param placeholders A map of placeholders to replace in the message. */ - public static void clientBroadcast(String clientName, String channelNode, String lang, boolean isTemplate, Map placeholders) { + public static void clientBroadcast(String clientName, String channelNode, String lang, Map placeholders) { String channelIdentifier = ConfigManager.getString("broadcasts.minecraft_to_discord." + channelNode); if (channelIdentifier == null || channelIdentifier.isBlank()) { // User chooses not to broadcast this event @@ -528,28 +527,26 @@ public class DiscordManager { messageNode = messageNode.path(part); } - if (!isTemplate) { - String message = messageNode.asText(); + String message = messageNode.asText(); - for (Map.Entry entry : placeholders.entrySet()) { - message = message.replace("{" + entry.getKey() + "}", entry.getValue()); - } - - if ("standalone".equals(ModeManager.getMode())) { - String avatarUrl = getClientAvatarUrl(clientName); - sendWebhookMessage(channel, clientName, avatarUrl, message); - - for (String line : message.split("\n")) { - // Escape underscores in :emoji: to prevent being treated as Markdown formatting - line = Pattern.compile("(:[^:]+:)").matcher(line) - .replaceAll(m -> m.group().replace("_", "\\\\_")); - line = MarkdownSanitizer.sanitize(line).replace("\\_", "_"); - - LOGGER.info(StringUtils.format("[{}] {}"), clientName, line); - } - } else { - sendBotMessage(channelIdentifier, message); + for (Map.Entry entry : placeholders.entrySet()) { + message = message.replace("{" + entry.getKey() + "}", entry.getValue()); + } + + if ("standalone".equals(ModeManager.getMode())) { + String avatarUrl = getClientAvatarUrl(clientName); + sendWebhookMessage(channel, clientName, avatarUrl, message); + + for (String line : message.split("\n")) { + // Escape underscores in :emoji: to prevent being treated as Markdown formatting + line = Pattern.compile("(:[^:]+:)").matcher(line) + .replaceAll(m -> m.group().replace("_", "\\\\_")); + line = MarkdownSanitizer.sanitize(line).replace("\\_", "_"); + + LOGGER.info(StringUtils.format("[{}] {}"), clientName, line); } + } else { + sendBotMessage(channelIdentifier, message); } } catch (InsufficientPermissionException e) { String reason = I18nManager.getDmccTranslation("discord.manager.insufficient_permission", channel.getName(), e.getPermission().getName()); diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java index 558bd6fb..1b16769c 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordMessageParser.java @@ -128,8 +128,8 @@ public class DiscordMessageParser { String truncatedRaw = truncateMainRaw(raw); boolean isMultiLine = truncatedRaw.contains("\n"); - // Build segments from common.chat template - JsonNode chatNode = I18nManager.getCustomMessages().path("common").path("message"); + // Build segments from common.user_message template + JsonNode chatNode = I18nManager.getCustomMessages().path("common").path("user_message"); if (chatNode.isArray()) { for (JsonNode segNode : chatNode) { String text = segNode.path("text").asText(""); diff --git a/core/src/main/resources/config/config_single_server.yml b/core/src/main/resources/config/config_single_server.yml index 169e977d..472d15db 100644 --- a/core/src/main/resources/config/config_single_server.yml +++ b/core/src/main/resources/config/config_single_server.yml @@ -155,6 +155,7 @@ account_linking: enable: true style: "title" # action_bar, title, or chat discord_user_avatar_for_webhooks: false + use_discord_role_color_for_mc_messages: true # DMCC 命令权限设置 # 配置要求执行命令的最低 OP 等级。 diff --git a/core/src/main/resources/config/config_standalone.yml b/core/src/main/resources/config/config_standalone.yml index c4ad081b..c4c875d5 100644 --- a/core/src/main/resources/config/config_standalone.yml +++ b/core/src/main/resources/config/config_standalone.yml @@ -208,6 +208,7 @@ account_linking: enable: true style: "title" # action_bar, title, or chat discord_user_avatar_for_webhooks: false + use_discord_role_color_for_mc_messages: true # DMCC 命令权限设置 # 配置要求执行命令的最低 OP 等级。 diff --git a/core/src/main/resources/config/custom_messages/en_us.yml b/core/src/main/resources/config/custom_messages/en_us.yml index fa4a6ded..045a0034 100644 --- a/core/src/main/resources/config/custom_messages/en_us.yml +++ b/core/src/main/resources/config/custom_messages/en_us.yml @@ -15,8 +15,8 @@ version: ${mod_version} # Only edit the items below if you know what you are doing! # ================================================== -common: - message: +common: # for both discord_to_minecraft and between_minecraft_servers + user_message: - text: "[{server}] " bold: true color: "{server_color}" @@ -26,7 +26,7 @@ common: - text: "{message}" bold: false color: "gray" - others: + system_message: - text: "[{server}] " bold: true color: "{server_color}" @@ -106,7 +106,7 @@ discord_to_minecraft: bold: false color: "gray" -minecraft_to_discord: +minecraft_to_xxxxx: server: start: ":white_check_mark: **Server started!**" stop: ":octagonal_sign: **Server stopped!**" @@ -120,7 +120,9 @@ minecraft_to_discord: goal: ":partying_face: **{display_name} has reached the goal [{title}]**\\n *{description}*" source: me: ":eyes: **{display_name} {message}**" - message: + +minecraft_to_discord: + user_message: enabled_fake_user_style: standalone: username: "[{server}] {display_name}" diff --git a/core/src/main/resources/config/custom_messages/zh_cn.yml b/core/src/main/resources/config/custom_messages/zh_cn.yml index 3e59d68c..59c037c5 100644 --- a/core/src/main/resources/config/custom_messages/zh_cn.yml +++ b/core/src/main/resources/config/custom_messages/zh_cn.yml @@ -15,8 +15,8 @@ version: ${mod_version} # Only edit the items below if you know what you are doing! # ================================================== -common: - message: +common: # for both discord_to_minecraft and between_minecraft_servers + user_message: - text: "[{server}] " bold: true color: "{server_color}" @@ -26,7 +26,7 @@ common: - text: "{message}" bold: false color: "gray" - others: + system_message: - text: "[{server}] " bold: true color: "{server_color}" @@ -103,7 +103,7 @@ discord_to_minecraft: bold: false color: "gray" -minecraft_to_discord: +minecraft_to_xxxxx: server: start: ":white_check_mark: **服务器已启动!**" stop: ":octagonal_sign: **服务器已关闭!**" @@ -117,7 +117,9 @@ minecraft_to_discord: goal: ":partying_face: **{display_name} 达成了目标 [{title}]**\\n *{description}*" source: me: ":eyes: **{display_name} {message}**" - message: + +minecraft_to_discord: + user_message: enabled_fake_user_style: standalone: username: "[{server}] {display_name}"