diff --git a/pom.xml b/pom.xml index 9c7fe39..0191474 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ io.papermc - https://papermc.io/repo/repository/maven-releases/ + https://repo.papermc.io/repository/maven-public/ jitpack.io diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java index 65efc40..f24de96 100644 --- a/src/me/rockyhawk/commandpanels/CommandPanels.java +++ b/src/me/rockyhawk/commandpanels/CommandPanels.java @@ -6,6 +6,7 @@ import io.lumine.mythic.lib.api.item.NBTItem; import me.rockyhawk.commandpanels.api.CommandPanelsAPI; import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids; +import me.rockyhawk.commandpanels.classresources.SerializerUtils; import me.rockyhawk.commandpanels.classresources.customheads.GetCustomHeads; import me.rockyhawk.commandpanels.classresources.HasSections; import me.rockyhawk.commandpanels.classresources.ItemCreation; @@ -364,7 +365,12 @@ public class CommandPanels extends JavaPlugin{ } } if (customName != null) { - renamedMeta.setDisplayName(customName); + if(SerializerUtils.isPaperServer()){ + renamedMeta.setDisplayName(SerializerUtils.doMiniMessageLegacy(customName)); + } else { + renamedMeta.setDisplayName(customName); + } + } List re_lore; @@ -378,7 +384,11 @@ public class CommandPanels extends JavaPlugin{ }else{ re_lore = lore; } - renamedMeta.setLore(splitListWithEscape(re_lore)); + if(SerializerUtils.isPaperServer()){ + renamedMeta.setLore(SerializerUtils.doMiniMessageLegacy(re_lore)); + } else { + renamedMeta.setLore(splitListWithEscape(re_lore)); + } } renamed.setItemMeta(renamedMeta); } catch (Exception ignored) {} diff --git a/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java b/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java index cf70ad0..aee2906 100644 --- a/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java +++ b/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java @@ -1,11 +1,92 @@ package me.rockyhawk.commandpanels.classresources; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.Bukkit; + +import java.util.List; +import java.util.stream.Collectors; public class SerializerUtils { - public static Component serializeText(String msg){ - return MiniMessage.miniMessage().deserialize(msg); + static LegacyComponentSerializer legacyComponentSerializer; + + //public static Component serializeText(String msg){ + // return MiniMessage.miniMessage().deserialize(msg); + //} + + public static boolean isPaperServer(){ + try { + // Check for a class that exists only in Paper + Class.forName("com.destroystokyo.paper.PaperConfig"); + return true; + } catch (ClassNotFoundException e) { + // The class was not found, indicating a non-Paper server + return false; + } + } + + public static Component doMiniMessage(String string) { + legacyComponentSerializer = LegacyComponentSerializer.builder().hexColors().character('&').build(); + Component component = legacyComponentSerializer.deserialize(string.replace('ยง', '&')); + + return MiniMessage.miniMessage().deserialize(MiniMessage.miniMessage().serialize(component.decoration(TextDecoration.ITALIC, false)) + .replace("\\<", "<").replace("\\", "").replace("\n", "
")).decoration(TextDecoration.ITALIC, false); + } + + public static List doMiniMessage(List strings) { + return strings.stream() + .map(SerializerUtils::doMiniMessage) + .collect(Collectors.toList()); + } + + public static String doMiniMessageLegacy(String string) { + MiniMessage miniMessage = MiniMessage.miniMessage(); + Component component = miniMessage.deserialize(string); + + Bukkit.getLogger().info("Component: " + component); + + String legacyText = LegacyComponentSerializer.builder() + .character('&') + .hexColors() + .build() + .serialize(component); + + Bukkit.getLogger().info("Legacy: " + legacyText); + + Bukkit.getLogger().info("Convert: " + convertHexCodes(legacyText)); + + return convertHexCodes(legacyText); + } + + public static List doMiniMessageLegacy(List strings) { + return strings.stream() + .map(SerializerUtils::doMiniMessageLegacy) + .collect(Collectors.toList()); + } + + // Helper method to convert &x&F&F&F&F&F&F to &#FFFFFF format + private static String convertHexCodes(String text) { + StringBuilder result = new StringBuilder(); + char[] chars = text.toCharArray(); + + for (int i = 0; i < chars.length; i++) { + // Check for the start of a hex color code (&x pattern) + if (chars[i] == '&' && i + 1 < chars.length && chars[i + 1] == 'x' && i + 13 <= chars.length) { + // Found a hex color code + StringBuilder hexCode = new StringBuilder("&#"); + for (int j = 2; j < 14; j += 2) { + hexCode.append(chars[i + j]); + } + result.append(hexCode.toString()); + i += 13; // Skip the next 12 characters (full hex code) + } else { + result.append(chars[i]); + } + } + + return result.toString(); } } diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java index 0f094d9..96080ee 100644 --- a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java +++ b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java @@ -140,7 +140,7 @@ public class BasicTags implements Listener { //do mini message if conditions are met if (plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_18)) { Audience player = (Audience) e.p; // Needed because the basic Player from the Event can't send Paper's Components - Component parsedText = SerializerUtils.serializeText(String.join(" ", e.args)); + Component parsedText = SerializerUtils.doMiniMessage(String.join(" ", e.args)); player.sendMessage(parsedText); } else { plugin.tex.sendString(e.p, plugin.tag + ChatColor.RED + "MiniMessage-Feature needs Paper 1.18 or newer to work!"); diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java index fb4ae53..28593aa 100644 --- a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java +++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java @@ -50,6 +50,8 @@ public class OpenGUI { Set itemList = pconfig.getConfigurationSection("item").getKeys(false); HashSet takenSlots = new HashSet<>(); for (String item : itemList) { + item = plugin.tex.attachPlaceholders(panel,position,p,item); + Bukkit.getLogger().info("formatted number: " + item); String section = ""; //openType needs to not be 3 so the editor won't include hasperm and hasvalue, etc items section = plugin.has.hasSection(panel,position,pconfig.getConfigurationSection("item." + Integer.parseInt(item)), p);