From cacbe617894af6c18b879f5d3a48715cb58a0579 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Mon, 16 Aug 2021 01:47:00 -0400 Subject: [PATCH 1/3] Cleanup translateColorCodes --- .../simpapi/colors/ColorTranslator.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java index a3093ab..e20e7d9 100644 --- a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java +++ b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java @@ -5,35 +5,33 @@ import net.md_5.bungee.api.chat.TextComponent; import org.jetbrains.annotations.NotNull; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class ColorTranslator { - static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))"; + private static final Pattern HEX_PATTERN = Pattern.compile("(&#[0-9a-fA-F]{6})"); + public static final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))"; /** * @param text The string of text to apply color/effects to * @return Returns a string of text with color/effects applied */ public static String translateColorCodes(@NotNull String text){ - - String[] texts = text.split(String.format(WITH_DELIMITER, "&")); - - StringBuilder finalText = new StringBuilder(); - - for (int i = 0; i < texts.length; i++){ - if (texts[i].equalsIgnoreCase("&")){ - //get the next string - i++; - if (texts[i].charAt(0) == '#'){ - finalText.append(ChatColor.of(texts[i].substring(0, 7))).append(texts[i].substring(7)); - }else{ - finalText.append(ChatColor.translateAlternateColorCodes('&', "&" + texts[i])); - } - }else{ - finalText.append(texts[i]); - } + //good thing we're stuck on java 8, which means we can't use this (: + // String hexColored = HEX_PATTERN.matcher(text) + // .replaceAll(match -> "" + ChatColor.of(match.group(1))); + Matcher matcher = HEX_PATTERN.matcher(text); + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + String hex = matcher.group(1).substring(1); + matcher.appendReplacement(sb, "" + ChatColor.of(hex)); } + matcher.appendTail(sb); + + String hexColored = sb.toString(); - return finalText.toString(); + return ChatColor.translateAlternateColorCodes('&', hexColored); } /** From c9eadb9b66cfd1c1570b563ee26a8903caccc991 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Mon, 16 Aug 2021 01:51:04 -0400 Subject: [PATCH 2/3] Cleanup translateColorCodesToTextComponent --- .../simpapi/colors/ColorTranslator.java | 104 ++---------------- 1 file changed, 10 insertions(+), 94 deletions(-) diff --git a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java index e20e7d9..0b1030b 100644 --- a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java +++ b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java @@ -1,6 +1,7 @@ package me.kodysimpson.simpapi.colors; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.TextComponent; import org.jetbrains.annotations.NotNull; @@ -39,103 +40,18 @@ public static String translateColorCodes(@NotNull String text){ * @return the TextComponent with hex colors and regular colors */ public static TextComponent translateColorCodesToTextComponent(@NotNull String text){ + //This is done solely to ensure hex color codes are in the format + //fromLegacyText expects: + //&#FF0000 -> &x&f&f&0&0&0&0 + String colored = translateColorCodes(text); - String[] texts = text.split(String.format(WITH_DELIMITER, "&")); + TextComponent base = new TextComponent(); + BaseComponent[] converted = TextComponent.fromLegacyText(colored); - ComponentBuilder builder = new ComponentBuilder(); - - for (int i = 0; i < texts.length; i++){ - TextComponent subComponent = new TextComponent(); - if (texts[i].equalsIgnoreCase("&")){ - //get the next string - i++; - if (texts[i].charAt(0) == '#'){ - subComponent.setText(texts[i].substring(7)); - subComponent.setColor(net.md_5.bungee.api.ChatColor.of(texts[i].substring(0, 7))); - }else{ - if (texts[i].length() > 1){ - subComponent.setText(texts[i].substring(1)); - }else{ - subComponent.setText(" "); - } - - switch (texts[i].charAt(0)){ - case '0': - subComponent.setColor(ChatColor.BLACK); - break; - case '1': - subComponent.setColor(ChatColor.DARK_BLUE); - break; - case '2': - subComponent.setColor(ChatColor.DARK_GREEN); - break; - case '3': - subComponent.setColor(ChatColor.DARK_AQUA); - break; - case '4': - subComponent.setColor(ChatColor.DARK_RED); - break; - case '5': - subComponent.setColor(ChatColor.DARK_PURPLE); - break; - case '6': - subComponent.setColor(ChatColor.GOLD); - break; - case '7': - subComponent.setColor(ChatColor.GRAY); - break; - case '8': - subComponent.setColor(ChatColor.DARK_GRAY); - break; - case '9': - subComponent.setColor(ChatColor.BLUE); - break; - case 'a': - subComponent.setColor(ChatColor.GREEN); - break; - case 'b': - subComponent.setColor(ChatColor.AQUA); - break; - case 'c': - subComponent.setColor(ChatColor.RED); - break; - case 'd': - subComponent.setColor(ChatColor.LIGHT_PURPLE); - break; - case 'e': - subComponent.setColor(ChatColor.YELLOW); - break; - case 'f': - subComponent.setColor(ChatColor.WHITE); - break; - case 'k': - subComponent.setObfuscated(true); - break; - case 'l': - subComponent.setBold(true); - break; - case 'm': - subComponent.setStrikethrough(true); - break; - case 'n': - subComponent.setUnderlined(true); - break; - case 'o': - subComponent.setItalic(true); - break; - case 'r': - subComponent.setColor(ChatColor.RESET); - break; - } - - } - builder.append(subComponent); - }else{ - builder.append(texts[i]); - } + for(BaseComponent comp : converted) { + base.addExtra(comp); } - return new TextComponent(builder.create()); - + return base; } } From 6cc66579f5146514d39e063f9018c5700545e452 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Mon, 16 Aug 2021 01:51:42 -0400 Subject: [PATCH 3/3] Deprecate WITH_DELIMITER --- .../java/me/kodysimpson/simpapi/colors/ColorTranslator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java index 0b1030b..5594a82 100644 --- a/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java +++ b/src/main/java/me/kodysimpson/simpapi/colors/ColorTranslator.java @@ -12,6 +12,8 @@ public class ColorTranslator { private static final Pattern HEX_PATTERN = Pattern.compile("(&#[0-9a-fA-F]{6})"); + + @Deprecated public static final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))"; /**