fix: 保留 MiniMessage 十六进制颜色标签

This commit is contained in:
2026-06-14 15:22:38 +08:00
parent 42df65bd24
commit 5b64e396f2
2 changed files with 16 additions and 4 deletions

View File

@@ -12,9 +12,13 @@ import java.util.stream.Collectors;
public class ColorUtil { public class ColorUtil {
private static final Pattern HEX_PATTERN = Pattern.compile("#[a-fA-F0-9]{6}"); private static final Pattern LEGACY_HEX_PATTERN = Pattern.compile("(?<!<)#[a-fA-F0-9]{6}");
private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
private static final LegacyComponentSerializer LEGACY_SERIALIZER = LegacyComponentSerializer.legacySection(); private static final LegacyComponentSerializer LEGACY_SERIALIZER = LegacyComponentSerializer.builder()
.character('§')
.hexColors()
.useUnusualXRepeatedCharacterHexFormat()
.build();
public static String color(String text) { public static String color(String text) {
if (text == null) { if (text == null) {
@@ -35,7 +39,7 @@ public class ColorUtil {
} }
private static String translateHexColors(String text) { private static String translateHexColors(String text) {
Matcher matcher = HEX_PATTERN.matcher(text); Matcher matcher = LEGACY_HEX_PATTERN.matcher(text);
while (matcher.find()) { while (matcher.find()) {
String hexCode = text.substring(matcher.start(), matcher.end()); String hexCode = text.substring(matcher.start(), matcher.end());
String replaceSharp = hexCode.replace('#', 'x'); String replaceSharp = hexCode.replace('#', 'x');
@@ -45,7 +49,7 @@ public class ColorUtil {
builder.append("&").append(c); builder.append("&").append(c);
} }
text = text.replace(hexCode, builder.toString()); text = text.replace(hexCode, builder.toString());
matcher = HEX_PATTERN.matcher(text); matcher = LEGACY_HEX_PATTERN.matcher(text);
} }
return text; return text;

View File

@@ -28,6 +28,14 @@ class ColorUtilTest {
assertEquals("§l加粗", ColorUtil.color("<bold>加粗</bold>")); assertEquals("§l加粗", ColorUtil.color("<bold>加粗</bold>"));
} }
@Test
void colorSupportsPureMiniMessageHexTags() {
assertEquals(
"§fꑟ §x§f§4§9§e§0§b已接取任务 §x§f§1§f§c§d§e资源采集",
ColorUtil.color("<!i><white>ꑟ <#f49e0b>已接取任务 <#f1fcde>资源采集")
);
}
@Test @Test
void colorSupportsMixedMiniMessageAndLegacyFormatting() { void colorSupportsMixedMiniMessageAndLegacyFormatting() {
assertEquals("§a领取§r §c奖励", ColorUtil.color("<green>领取</green> &c奖励")); assertEquals("§a领取§r §c奖励", ColorUtil.color("<green>领取</green> &c奖励"));