Better configs

This commit is contained in:
Xujiayao 2026-03-19 13:42:52 +08:00
parent b76ea72e14
commit d1276ce57d
8 changed files with 49 additions and 44 deletions

View file

@ -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
}
}

View file

@ -85,27 +85,27 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
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
}
}

View file

@ -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<String, String> placeholders) {
public static void clientBroadcast(String clientName, String channelNode, String lang, Map<String, String> 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<String, String> 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<String, String> 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());

View file

@ -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("");

View file

@ -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 等级。

View file

@ -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 等级。

View file

@ -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}"

View file

@ -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}"