From bacab40609464b6363e3e977554b9df658fa2c9f Mon Sep 17 00:00:00 2001 From: rozhur Date: Mon, 24 Jul 2023 02:12:35 +0500 Subject: [PATCH] Utilities for Minecraft color codes translation --- .../main/java/org/zhdev/util/ColorUtils.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 misc/src/main/java/org/zhdev/util/ColorUtils.java diff --git a/misc/src/main/java/org/zhdev/util/ColorUtils.java b/misc/src/main/java/org/zhdev/util/ColorUtils.java new file mode 100644 index 0000000..e23f00b --- /dev/null +++ b/misc/src/main/java/org/zhdev/util/ColorUtils.java @@ -0,0 +1,47 @@ +package org.zhdev.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ColorUtils { + public static final char COLOR_CHAR = 'ยง'; + + public static void translateAlternateColorCodes(StringBuilder builder, char replaceChar) { + Matcher m = Pattern.compile(Pattern.quote(String.valueOf(replaceChar)) + "(#[0-9a-fA-F]{6})").matcher(builder); + int start = 0; + while (m.find(start)) { + String hex = m.group(1); + StringBuilder replaceBuilder = new StringBuilder().append(COLOR_CHAR).append('x'); + for (int i = 0; i < hex.length(); i++) { + char c = hex.charAt(i); + replaceBuilder.append(COLOR_CHAR).append(c); + } + builder.replace(m.start(), m.end(), replaceBuilder.toString()); + start = m.start() + replaceBuilder.length(); + } + + String chars = "0123456789AaBbCcDdEeFfKkLlMmNnOoRrXx"; + for (int i = 0; i < builder.length() - 1; ++i) { + if (builder.charAt(i) == replaceChar && chars.indexOf(builder.charAt(i + 1)) > -1) { + builder.setCharAt(i, COLOR_CHAR); + builder.setCharAt(i + 1, Character.toLowerCase(builder.charAt(i + 1))); + } + } + } + + public static String translateAlternateColorCodes(String str, char replaceChar) { + StringBuilder builder = new StringBuilder(str); + translateAlternateColorCodes(builder, replaceChar); + return builder.toString(); + } + + public static void translateAlternateColorCodes(StringBuilder str) { + translateAlternateColorCodes(str, '&'); + } + + public static String translateAlternateColorCodes(String str) { + StringBuilder builder = new StringBuilder(str); + translateAlternateColorCodes(builder, '&'); + return builder.toString(); + } +}