From 2efdc5f5a6fadb4b0139dd0c2d1a0e66826395cc Mon Sep 17 00:00:00 2001 From: carm Date: Tue, 5 Sep 2023 04:26:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(color):=20=E6=B8=90=E5=8F=98=E8=89=B2?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=E5=85=B6=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=A2=9D=E5=A4=96=E6=A0=BC=E5=BC=8F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/easyplugin/utils/ColorParser.java | 20 ++++++++++++++++--- base/color/src/test/java/ColorParseTest.java | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) 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。"));