11package com .eternalcode .formatter .legacy ;
22
3+ import com .google .common .collect .ImmutableMap ;
34import net .kyori .adventure .text .Component ;
45import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
6+
7+ import java .util .Map ;
58import java .util .regex .Matcher ;
69import 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}
0 commit comments