Skip to content

Commit d38221b

Browse files
author
Igor Michalski
authored
Fix message formatting (#111)
Took 22 minutes
1 parent 6a181d1 commit d38221b

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ public ChatRenderedMessage process(ChatMessage chatMessage) {
9595
format = this.templateService.applyTemplates(format);
9696
format = this.placeholderRegistry.format(format, sender);
9797

98+
format = Legacy.clearSection(format);
99+
format = Legacy.legacyToAdventure(format);
100+
98101
Component renderedMessage = this.miniMessage.deserialize(format, this.createTags(chatMessage));
99102

100103
return new ChatRenderedMessage(sender, GSON.serialize(renderedMessage));

chatformatter-core/src/main/java/com/eternalcode/formatter/legacy/Legacy.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.eternalcode.formatter.legacy;
22

3+
import com.google.common.collect.ImmutableMap;
34
import net.kyori.adventure.text.Component;
45
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
6+
7+
import java.util.Map;
58
import java.util.regex.Matcher;
69
import java.util.regex.Pattern;
710

@@ -13,8 +16,34 @@ public final class Legacy {
1316
public static final String SHADOW = "<ampersand>";
1417

1518
public static final Pattern ALL_PATTERN = Pattern.compile(".*");
16-
public static final Pattern AMPERSAND_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "[0-9A-FK-ORX#]");
19+
public static final Pattern AMPERSAND_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "([0-9A-FK-ORX#])");
1720
public static final Pattern SHADOW_PATTERN = Pattern.compile("(?i)" + SHADOW + "[0-9A-FK-ORX#]");
21+
public static final Pattern HEX_PATTERN = Pattern.compile("(?i)" + AMPERSAND + "#([0-9A-F]{6})");
22+
23+
public static final Map<String, String> codeTranslations = new ImmutableMap.Builder<String, String>()
24+
.put("0", "<black>")
25+
.put("1", "<dark_blue>")
26+
.put("2", "<dark_green>")
27+
.put("3", "<dark_aqua>")
28+
.put("4", "<dark_red>")
29+
.put("5", "<dark_purple>")
30+
.put("6", "<gold>")
31+
.put("7", "<gray>")
32+
.put("8", "<dark_gray>")
33+
.put("9", "<blue>")
34+
.put("a", "<green>")
35+
.put("b", "<aqua>")
36+
.put("c", "<red>")
37+
.put("d", "<light_purple>")
38+
.put("e", "<yellow>")
39+
.put("f", "<white>")
40+
.put("k", "<obfuscated>")
41+
.put("l", "<bold>")
42+
.put("m", "<strikethrough>")
43+
.put("n", "<underlined>")
44+
.put("o", "<italic>")
45+
.put("r", "<reset>")
46+
.build();
1847

1948
private Legacy() {
2049
}
@@ -66,4 +95,23 @@ static String placeholderToAmpersand(String text) {
6695
return builder.toString();
6796
}
6897

98+
public static String legacyToAdventure(String input) {
99+
String result = HEX_PATTERN.matcher(input).replaceAll(matchResult -> {
100+
String hex = matchResult.group(1);
101+
return "<#" + hex + ">";
102+
});
103+
104+
result = AMPERSAND_PATTERN.matcher(result).replaceAll(matchResult -> {
105+
String color = matchResult.group(1);
106+
String adventure = codeTranslations.get(color.toLowerCase());
107+
108+
if (adventure == null) {
109+
return matchResult.group();
110+
}
111+
112+
return adventure;
113+
});
114+
115+
return result;
116+
}
69117
}

chatformatter-core/src/test/java/com/eternalcode/formatter/legacy/LegacyTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.eternalcode.formatter.legacy;
22

3+
import org.junit.jupiter.api.DisplayName;
34
import org.junit.jupiter.api.Test;
45

56
import static org.junit.jupiter.api.Assertions.*;
@@ -39,4 +40,14 @@ private void assertShadow(String input, String expectedShadowed) {
3940
assertEquals(input, deshadowed);
4041
}
4142

43+
@Test
44+
@DisplayName("Should convert legacy color codes to adventure")
45+
void testLegacyToAdventure() {
46+
String input = "&c SIEMA &#8376d3 &rtest&a!";
47+
48+
String result = Legacy.legacyToAdventure(input);
49+
50+
assertEquals("<red> SIEMA <#8376d3> <reset>test<green>!", result);
51+
}
52+
4253
}

0 commit comments

Comments
 (0)