diff --git a/base/color/src/main/java/cc/carm/lib/easyplugin/utils/ColorParser.java b/base/color/src/main/java/cc/carm/lib/easyplugin/utils/ColorParser.java index 1b7867f..ee0d438 100644 --- a/base/color/src/main/java/cc/carm/lib/easyplugin/utils/ColorParser.java +++ b/base/color/src/main/java/cc/carm/lib/easyplugin/utils/ColorParser.java @@ -162,9 +162,14 @@ public class ColorParser { startColor.getBlue() + bStep * i * bDirection )).toArray(String[]::new); - return IntStream.range(0, characters.length) - .mapToObj(i -> colorText(characters[i], extraFormats.get(i), buildHexColor(hexes[i]))) - .collect(Collectors.joining()); + StringBuilder sb = new StringBuilder(); + String extra = null; + for (int i = 0; i < characters.length; i++) { + extra = buildExtraFormat(extra, extraFormats.get(i)); + String s = colorText(characters[i], extra, buildHexColor(hexes[i])); + sb.append(s); + } + return sb.toString(); } protected static String gradientText(@NotNull String text, @Nullable String startHex, @Nullable String endHex) { @@ -205,4 +210,13 @@ public class ColorParser { .collect(Collectors.joining("", '§' + "x", "")); } + protected static String buildExtraFormat(String current, String extra) { + if (extra != null) current = (current == null ? "" : current) + extra; + return isResetCode(current) ? null : current; + } + + protected static boolean isResetCode(String input) { + return input != null && (input.toLowerCase().endsWith("&r") || input.toLowerCase().endsWith("§r")); + } + } \ No newline at end of file diff --git a/base/color/src/test/java/ColorParseTest.java b/base/color/src/test/java/ColorParseTest.java index 3026fe0..8ea1e62 100644 --- a/base/color/src/test/java/ColorParseTest.java +++ b/base/color/src/test/java/ColorParseTest.java @@ -15,7 +15,7 @@ public class ColorParseTest { System.out.println(parseGradientColor("&<#AAAAAA>我真的&<#BBBBBB>爱死&<#111111>你&<#FFFFFF>!")); // 测试穿插 - System.out.println(parse("&<#AAAAAA>&l我&r真&b的&<#BBBBBB>&o爱死&<#111111>你&<#FFFFFF>了&r!")); + System.out.println(parse("&<#AAAAAA>&l&m我真的&o尊的&r真的&<#BBBBBB>&o爱死&<#111111>你&<#FFFFFF>了&r!")); System.out.println(parse("&<#AAAAAA>&l我&r真&(#666666)的&<#BBBBBB>&o爱死&<#111111>你&<#FFFFFF>了&r!")); System.out.println(parse("&r正常的颜色理应&c&l不受影响&r。"));