diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextColor.java b/api/src/main/java/net/kyori/adventure/text/format/TextColor.java index a66f66877..927887833 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextColor.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextColor.java @@ -47,6 +47,19 @@ * @since 4.0.0 */ public interface TextColor extends Comparable, Examinable, RGBLike, StyleBuilderApplicable, TextFormat { + /** + * The hex character. + * + * @since 4.14.0 + */ + char HEX_CHARACTER = '#'; + /** + * The hex character, in {@code String} format. + * + * @since 4.14.0 + */ + String HEX_PREFIX = "#"; + /** * Creates a new text colour. * @@ -144,7 +157,7 @@ public interface TextColor extends Comparable, Examinable, RGBLike, S * @since 4.0.0 */ static @Nullable TextColor fromHexString(final @NotNull String string) { - if (string.startsWith("#")) { + if (string.startsWith(HEX_PREFIX)) { try { final int hex = Integer.parseInt(string.substring(1), 16); return color(hex); @@ -163,7 +176,7 @@ public interface TextColor extends Comparable, Examinable, RGBLike, S * @since 4.0.0 */ static @Nullable TextColor fromCSSHexString(final @NotNull String string) { - if (string.startsWith("#")) { + if (string.startsWith(HEX_PREFIX)) { final String hexString = string.substring(1); if (hexString.length() != 3 && hexString.length() != 6) { return null; @@ -202,7 +215,7 @@ public interface TextColor extends Comparable, Examinable, RGBLike, S * @since 4.0.0 */ default @NotNull String asHexString() { - return String.format("#%06x", this.value()); + return String.format("%c%06x", HEX_CHARACTER, this.value()); } /** diff --git a/serializer-configurate3/src/main/java/net/kyori/adventure/serializer/configurate3/TextColorSerializer.java b/serializer-configurate3/src/main/java/net/kyori/adventure/serializer/configurate3/TextColorSerializer.java index 98d5872ee..73b317460 100644 --- a/serializer-configurate3/src/main/java/net/kyori/adventure/serializer/configurate3/TextColorSerializer.java +++ b/serializer-configurate3/src/main/java/net/kyori/adventure/serializer/configurate3/TextColorSerializer.java @@ -34,7 +34,6 @@ @SuppressWarnings("UnstableApiUsage") // TypeToken final class TextColorSerializer extends ScalarSerializer { static final TextColorSerializer INSTANCE = new TextColorSerializer(); - private static final String HEX_PREFIX = "#"; private TextColorSerializer() { super(TextColor.class); @@ -49,7 +48,7 @@ public TextColor deserialize(final @NotNull TypeToken type, final @NotNull Ob } final String value = obj.toString(); final TextColor result; - if (value.startsWith(HEX_PREFIX)) { + if (value.startsWith(TextColor.HEX_PREFIX)) { result = TextColor.fromHexString(value); } else { result = NamedTextColor.NAMES.value(value); diff --git a/serializer-configurate4/src/main/java/net/kyori/adventure/serializer/configurate4/TextColorSerializer.java b/serializer-configurate4/src/main/java/net/kyori/adventure/serializer/configurate4/TextColorSerializer.java index ab33212fe..4b1d9e8a0 100644 --- a/serializer-configurate4/src/main/java/net/kyori/adventure/serializer/configurate4/TextColorSerializer.java +++ b/serializer-configurate4/src/main/java/net/kyori/adventure/serializer/configurate4/TextColorSerializer.java @@ -33,7 +33,6 @@ final class TextColorSerializer extends ScalarSerializer { static final TextColorSerializer INSTANCE = new TextColorSerializer(); - private static final String HEX_PREFIX = "#"; private TextColorSerializer() { super(TextColor.class); @@ -48,7 +47,7 @@ public TextColor deserialize(final @NotNull Type type, final @NotNull Object obj } final String value = obj.toString(); final TextColor result; - if (value.startsWith(HEX_PREFIX)) { + if (value.startsWith(TextColor.HEX_PREFIX)) { result = TextColor.fromHexString(value); } else { result = NamedTextColor.NAMES.value(value); diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/ColorTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/ColorTagResolver.java index d9d16e037..07deb7917 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/ColorTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/ColorTagResolver.java @@ -44,7 +44,6 @@ * @since 4.10.0 */ final class ColorTagResolver implements TagResolver, SerializableResolver.Single { - private static final char HEX = '#'; private static final String COLOR_3 = "c"; private static final String COLOR_2 = "colour"; private static final String COLOR = "color"; @@ -95,7 +94,7 @@ private static boolean isColorOrAbbreviation(final String name) { final TextColor color; if (COLOR_ALIASES.containsKey(colorName)) { color = COLOR_ALIASES.get(colorName); - } else if (colorName.charAt(0) == HEX) { + } else if (colorName.charAt(0) == TextColor.HEX_CHARACTER) { color = TextColor.fromHexString(colorName); } else { color = NamedTextColor.NAMES.value(colorName); diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/TransitionTag.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/TransitionTag.java index cd0a6c600..3f2528a8c 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/TransitionTag.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/standard/TransitionTag.java @@ -77,7 +77,7 @@ static Tag create(final ArgumentQueue args, final Context ctx) { final String argValue = arg.value(); final TextColor parsedColor; - if (argValue.charAt(0) == '#') { + if (argValue.charAt(0) == TextColor.HEX_CHARACTER) { parsedColor = TextColor.fromHexString(argValue); } else { parsedColor = NamedTextColor.NAMES.value(arg.lowerValue()); diff --git a/text-serializer-gson/src/main/java/net/kyori/adventure/text/serializer/gson/TextColorSerializer.java b/text-serializer-gson/src/main/java/net/kyori/adventure/text/serializer/gson/TextColorSerializer.java index 84ac83b28..780fb33b2 100644 --- a/text-serializer-gson/src/main/java/net/kyori/adventure/text/serializer/gson/TextColorSerializer.java +++ b/text-serializer-gson/src/main/java/net/kyori/adventure/text/serializer/gson/TextColorSerializer.java @@ -55,7 +55,7 @@ public void write(final JsonWriter out, final TextColor value) throws IOExceptio } private static String asUpperCaseHexString(final TextColor color) { - return String.format(Locale.ROOT, "#%06X", color.value()); // to be consistent with vanilla + return String.format(Locale.ROOT, "%c%06X", TextColor.HEX_CHARACTER, color.value()); // to be consistent with vanilla } @Override @@ -67,7 +67,7 @@ private static String asUpperCaseHexString(final TextColor color) { } static @Nullable TextColor fromString(final @NotNull String value) { - if (value.startsWith("#")) { + if (value.startsWith(TextColor.HEX_PREFIX)) { return TextColor.fromHexString(value); } else { return NamedTextColor.NAMES.value(value); diff --git a/text-serializer-legacy/src/main/java/net/kyori/adventure/text/serializer/legacy/LegacyComponentSerializer.java b/text-serializer-legacy/src/main/java/net/kyori/adventure/text/serializer/legacy/LegacyComponentSerializer.java index a61298396..435c9c677 100644 --- a/text-serializer-legacy/src/main/java/net/kyori/adventure/text/serializer/legacy/LegacyComponentSerializer.java +++ b/text-serializer-legacy/src/main/java/net/kyori/adventure/text/serializer/legacy/LegacyComponentSerializer.java @@ -33,6 +33,7 @@ import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.flattener.ComponentFlattener; import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.serializer.ComponentSerializer; import net.kyori.adventure.util.Buildable; import net.kyori.adventure.util.PlatformAPI; @@ -135,7 +136,7 @@ public interface LegacyComponentSerializer extends ComponentSerializer