From e104f01f8b2a4d26d749b6df48a4789885b92a40 Mon Sep 17 00:00:00 2001 From: Igor Michalski Date: Wed, 7 Feb 2024 20:19:01 +0100 Subject: [PATCH] Fix message formatting Took 22 minutes --- .../formatter/ChatHandlerImpl.java | 3 ++ .../eternalcode/formatter/legacy/Legacy.java | 50 ++++++++++++++++++- .../formatter/legacy/LegacyTest.java | 11 ++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java index 27381f3..5d51c16 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java @@ -95,6 +95,9 @@ public ChatRenderedMessage process(ChatMessage chatMessage) { format = this.templateService.applyTemplates(format); format = this.placeholderRegistry.format(format, sender); + format = Legacy.clearSection(format); + format = Legacy.legacyToAdventure(format); + Component renderedMessage = this.miniMessage.deserialize(format, this.createTags(chatMessage)); return new ChatRenderedMessage(sender, GSON.serialize(renderedMessage)); diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/legacy/Legacy.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/legacy/Legacy.java index 359284e..d3ea5bd 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/legacy/Legacy.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/legacy/Legacy.java @@ -1,7 +1,10 @@ package com.eternalcode.formatter.legacy; +import com.google.common.collect.ImmutableMap; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; + +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -13,8 +16,34 @@ public final class Legacy { public static final String SHADOW = ""; public static final Pattern ALL_PATTERN = Pattern.compile(".*"); - public static final Pattern AMPERSAND_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "[0-9A-FK-ORX#]"); + public static final Pattern AMPERSAND_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "([0-9A-FK-ORX#])"); public static final Pattern SHADOW_PATTERN = Pattern.compile("(?i)" + SHADOW + "[0-9A-FK-ORX#]"); + public static final Pattern HEX_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "#([0-9A-F]{6})"); + + public static final Map codeTranslations = new ImmutableMap.Builder() + .put("0", "") + .put("1", "") + .put("2", "") + .put("3", "") + .put("4", "") + .put("5", "") + .put("6", "") + .put("7", "") + .put("8", "") + .put("9", "") + .put("a", "") + .put("b", "") + .put("c", "") + .put("d", "") + .put("e", "") + .put("f", "") + .put("k", "") + .put("l", "") + .put("m", "") + .put("n", "") + .put("o", "") + .put("r", "") + .build(); private Legacy() { } @@ -66,4 +95,23 @@ static String placeholderToAmpersand(String text) { return builder.toString(); } + public static String legacyToAdventure(String input) { + String result = HEX_PATTERN.matcher(input).replaceAll(matchResult -> { + String hex = matchResult.group(1); + return "<#" + hex + ">"; + }); + + result = AMPERSAND_PATTERN.matcher(result).replaceAll(matchResult -> { + String color = matchResult.group(1); + String adventure = codeTranslations.get(color.toLowerCase()); + + if (adventure == null) { + return matchResult.group(); + } + + return adventure; + }); + + return result; + } } diff --git a/chatformatter-core/src/test/java/com/eternalcode/formatter/legacy/LegacyTest.java b/chatformatter-core/src/test/java/com/eternalcode/formatter/legacy/LegacyTest.java index 907c6df..ba51ccf 100644 --- a/chatformatter-core/src/test/java/com/eternalcode/formatter/legacy/LegacyTest.java +++ b/chatformatter-core/src/test/java/com/eternalcode/formatter/legacy/LegacyTest.java @@ -1,5 +1,6 @@ package com.eternalcode.formatter.legacy; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -39,4 +40,14 @@ private void assertShadow(String input, String expectedShadowed) { assertEquals(input, deshadowed); } + @Test + @DisplayName("Should convert legacy color codes to adventure") + void testLegacyToAdventure() { + String input = "&c SIEMA ₸d3 &rtest&a!"; + + String result = Legacy.legacyToAdventure(input); + + assertEquals(" SIEMA <#8376d3> test!", result); + } + }