From 7e131590561eb89e5d318894458e7eba7951307a Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Wed, 28 Aug 2024 23:20:16 -0400 Subject: [PATCH] support hex colors in lore (#68) --- pom.xml | 6 ++++++ .../lol/hyper/toolstats/tools/ItemLore.java | 2 -- .../toolstats/tools/config/ConfigTools.java | 21 ++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 8c5ef67..a34570c 100644 --- a/pom.xml +++ b/pom.xml @@ -150,5 +150,11 @@ 0.4.4 compile + + net.md-5 + bungeecord-chat + 1.19-R0.1-SNAPSHOT + provided + diff --git a/src/main/java/lol/hyper/toolstats/tools/ItemLore.java b/src/main/java/lol/hyper/toolstats/tools/ItemLore.java index 6680880..4692dff 100644 --- a/src/main/java/lol/hyper/toolstats/tools/ItemLore.java +++ b/src/main/java/lol/hyper/toolstats/tools/ItemLore.java @@ -19,8 +19,6 @@ package lol.hyper.toolstats.tools; import lol.hyper.toolstats.ToolStats; import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; diff --git a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java index deab193..fb696a3 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java @@ -21,12 +21,14 @@ import lol.hyper.toolstats.ToolStats; import org.bukkit.ChatColor; import org.bukkit.Material; +import java.util.regex.Matcher; import java.util.regex.Pattern; public class ConfigTools { private final ToolStats toolStats; - private final Pattern COLOR_CODES = Pattern.compile("(?i)&[0-9A-FK-ORX]"); + private final Pattern COLOR_CODES = Pattern.compile("&([0-9a-fk-or])"); + private final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})"); public ConfigTools(ToolStats toolStats) { this.toolStats = toolStats; @@ -110,7 +112,7 @@ public class ConfigTools { * Gets the lore message from the config. * * @param configName The config name, "messages." is already in front. - * @param raw If you want the raw message with the formatting codes and placeholders. + * @param raw If you want the raw message. False if you want no placeholders. * @return The lore message. */ public String getLoreFromConfig(String configName, boolean raw) { @@ -119,13 +121,26 @@ public class ConfigTools { return null; } if (raw) { - return ChatColor.translateAlternateColorCodes('&', lore); + Matcher hexMatcher = HEX_PATTERN.matcher(lore); + while (hexMatcher.find()) { + String hexCode = hexMatcher.group(1); + lore = lore.replaceAll(hexMatcher.group(), net.md_5.bungee.api.ChatColor.of("#" + hexCode).toString()); + } + + Matcher colorMatcher = COLOR_CODES.matcher(lore); + while (colorMatcher.find()) { + String colorCode = colorMatcher.group(1); + lore = lore.replaceAll("&" + colorCode, ChatColor.getByChar(colorCode).toString()); + } + + return ChatColor.translateAlternateColorCodes('§', lore); } else { // remove all color codes // this is used to compare the current lore on the item // Example: [§7Arrows shot: §8] is on the lore // this will return [Arrows shot: ] so we can match it lore = COLOR_CODES.matcher(lore).replaceAll(""); + lore = HEX_PATTERN.matcher(lore).replaceAll(""); if (lore.contains("{player}")) { lore = lore.replace("{player}", ""); }