diff --git a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java index ff7beb2b..b0e06ac9 100644 --- a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java +++ b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java @@ -796,7 +796,7 @@ public class DisguiseConfig { } if (requireMessage != null) { - requireMessage = ChatColor.translateAlternateColorCodes('&', requireMessage); + requireMessage = DisguiseUtilities.translateAlternateColorCodes(requireMessage); } ModdedEntity entity = new ModdedEntity(null, name, living, mod, version, requireMessage, 0); diff --git a/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java b/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java index 902157ba..ebd19945 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java +++ b/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java @@ -224,7 +224,7 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { name = name.replace("%complex%", DisguiseUtilities.getDisplayName(player)); } - return ChatColor.translateAlternateColorCodes('&', name); + return DisguiseUtilities.translateAlternateColorCodes(name); } protected ArrayList getAllowedDisguises(DisguisePermissions permissions) { diff --git a/src/main/java/me/libraryaddict/disguise/commands/interactions/DisguiseEntityInteraction.java b/src/main/java/me/libraryaddict/disguise/commands/interactions/DisguiseEntityInteraction.java index 6803cc88..138cfb29 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/interactions/DisguiseEntityInteraction.java +++ b/src/main/java/me/libraryaddict/disguise/commands/interactions/DisguiseEntityInteraction.java @@ -109,6 +109,6 @@ public class DisguiseEntityInteraction implements LibsEntityInteract { name = name.replace("%complex%", DisguiseUtilities.getDisplayName(player)); } - return ChatColor.translateAlternateColorCodes('&', name); + return DisguiseUtilities.translateAlternateColorCodes(name); } } \ No newline at end of file diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index e643f099..f5f1e3aa 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -2444,6 +2444,16 @@ public class DisguiseUtilities { return builder.toString(); } + public static String translateAlternateColorCodes(String string) { + string = DisguiseUtilities.translateAlternateColorCodes(string); + + if (NmsVersion.v1_16.isSupported()) { + return string.replaceAll("&(?=#[0-9a-fA-F]{6})", ChatColor.COLOR_CHAR + ""); + } + + return string; + } + /** * Modification of TextComponent.fromLegacyText */ @@ -2461,23 +2471,20 @@ public class DisguiseUtilities { char c = message.charAt(i); TextComponent old; - if (c == ChatColor.COLOR_CHAR || (c == '<' && i + 9 < message.length() && NmsVersion.v1_16.isSupported() && - Pattern.matches("<#[0-9a-fA-F]{6}>", message.substring(i, i + 9)))) { - // If normal color char - if (c == ChatColor.COLOR_CHAR) { - ++i; + if (c == ChatColor.COLOR_CHAR && i + 1 >= message.length()) { + break; + } - if (i >= message.length()) { - break; - } - } + if (c == ChatColor.COLOR_CHAR || (NmsVersion.v1_16.isSupported() && c == '<' && i + 9 < message.length() && + Pattern.matches("<#[0-9a-fA-F]{6}>", message.substring(i, i + 9)))) { + i++; net.md_5.bungee.api.ChatColor format; - if (c != ChatColor.COLOR_CHAR) { - format = net.md_5.bungee.api.ChatColor.of(message.substring(i + 1, i + 8)); + if (c != ChatColor.COLOR_CHAR || (message.length() - i >= 7 && Pattern.matches("#[0-9a-fA-F]{6}", message.substring(i, i + 7)))) { + format = net.md_5.bungee.api.ChatColor.of(message.substring(i, i + 7)); - i += 8; + i += c == ChatColor.COLOR_CHAR ? 7 : 8; } else { c = message.charAt(i); diff --git a/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoString.java b/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoString.java index 32fc9dc3..83bc86da 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoString.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoString.java @@ -1,5 +1,6 @@ package me.libraryaddict.disguise.utilities.params.types.base; +import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.params.ParamInfo; import org.bukkit.ChatColor; @@ -15,7 +16,7 @@ public class ParamInfoString extends ParamInfo { @Override protected Object fromString(String string) { - return ChatColor.translateAlternateColorCodes('&', string); + return DisguiseUtilities.translateAlternateColorCodes(string); } @Override diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java index c34c6e85..69e39e4d 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java @@ -744,7 +744,7 @@ public class DisguiseParser { } // Construct the player disguise - disguise = new PlayerDisguise(ChatColor.translateAlternateColorCodes('&', args[1])); + disguise = new PlayerDisguise(DisguiseUtilities.translateAlternateColorCodes(args[1])); if (!customName) { name = ((PlayerDisguise) disguise).getName(); diff --git a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java index 248cb549..4873bf9f 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java @@ -96,7 +96,7 @@ public enum TranslateType { DisguiseUtilities.getLogger() .severe("Translation for " + name() + " has a null value for the key '" + key + "'"); } else { - String newKey = ChatColor.translateAlternateColorCodes('&', key); + String newKey = DisguiseUtilities.translateAlternateColorCodes(key); if (translated.containsKey(newKey)) { if (dupes++ < 5) { @@ -115,7 +115,7 @@ public enum TranslateType { } } - translated.put(newKey, ChatColor.translateAlternateColorCodes('&', value)); + translated.put(newKey, DisguiseUtilities.translateAlternateColorCodes(value)); if (!newKey.equals(translated.get(newKey))) { diff++;