diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java index 1f2d676..2973bf9 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java @@ -3,6 +3,7 @@ package net.frankheijden.serverutils.bukkit.entities; import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; import net.frankheijden.serverutils.common.entities.ServerCommandSender; import net.frankheijden.serverutils.common.providers.ChatProvider; +import net.frankheijden.serverutils.common.utils.HexUtils; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; @@ -27,7 +28,7 @@ public class BukkitChatProvider extends ChatProvider { */ @Override public String color(String str) { - return ChatColor.translateAlternateColorCodes('&', str); + return ChatColor.translateAlternateColorCodes('&', HexUtils.convertHexString(str)); } /** diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java index 7445282..9c5e04d 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java @@ -3,6 +3,7 @@ package net.frankheijden.serverutils.bungee.entities; import net.frankheijden.serverutils.bungee.utils.BungeeUtils; import net.frankheijden.serverutils.common.entities.ServerCommandSender; import net.frankheijden.serverutils.common.providers.ChatProvider; +import net.frankheijden.serverutils.common.utils.HexUtils; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; @@ -15,7 +16,7 @@ public class BungeeChatProvider extends ChatProvider { @Override public String color(String str) { - return ChatColor.translateAlternateColorCodes('&', str); + return ChatColor.translateAlternateColorCodes('&', HexUtils.convertHexString(str)); } @Override diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/utils/HexUtils.java b/Common/src/main/java/net/frankheijden/serverutils/common/utils/HexUtils.java new file mode 100644 index 0000000..749c35d --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/utils/HexUtils.java @@ -0,0 +1,43 @@ +package net.frankheijden.serverutils.common.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Provides basic conversion between the hex format <#FFFFFF> and bukkit hex format &x&F&F&F&F&F&F. + */ +public class HexUtils { + + private static final Pattern hexPattern = Pattern.compile("<(#[0-9a-fA-F]{6})>"); + private static final char COLOR_CHAR = '&'; + + /** + * Prefixes each character provided with the color character {@link #COLOR_CHAR}. + * @param color The color to prefix with the color character. + * @return The prefixed color. + */ + public static String convertHexColor(String color) { + StringBuilder sb = new StringBuilder(2 * (color.length() + 1)).append(COLOR_CHAR).append("x"); + for (char c : color.toCharArray()) { + sb.append(COLOR_CHAR).append(c); + } + return sb.toString(); + } + + /** + * Converts the input string to a bukkit readable color string. + * The accepted hex format is `<#FFFFFF>`. + * @param str The input string. + * @return The output converted hex string. + */ + public static String convertHexString(String str) { + StringBuffer sb = new StringBuffer(str.length()); + Matcher matcher = hexPattern.matcher(str); + while (matcher.find()) { + String hex = matcher.group(); + matcher.appendReplacement(sb, convertHexColor(hex.substring(2, hex.length() - 1))); + } + matcher.appendTail(sb); + return sb.toString(); + } +} diff --git a/build.gradle b/build.gradle index b944747..af0abcb 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { group = 'net.frankheijden.serverutils' String dependencyDir = group + '.dependencies' -version = '2.0.0' +version = '2.0.1' sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8