From ef3161f2ea59bad1e1cfbe61e4c9f8ca4ff2885c Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Mon, 24 Jul 2023 09:23:57 +0200 Subject: [PATCH] make placeholders more compatible with formatting --- .../notjustnameplates/hooks/PAPIHook.java | 4 ++ .../nameplates/Nameplate.java | 44 +++++++++++++++---- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java b/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java index 6061725..a079312 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java @@ -16,4 +16,8 @@ public class PAPIHook { return component; } + public static String setPlaceholders(String string, OfflinePlayer offlinePlayer) { + return PlaceholderAPI.setPlaceholders(offlinePlayer, string); + } + } diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java index 4ee91b5..53cb034 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java @@ -5,6 +5,7 @@ import me.youhavetrouble.notjustnameplates.displays.DisplayContent; import me.youhavetrouble.notjustnameplates.hooks.PAPIHook; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.GameMode; @@ -183,20 +184,45 @@ public class Nameplate { private Component parseText(String text, Player player) { - Component component = MiniMessage.miniMessage().deserialize(text); - - if (player == null || !player.isOnline()) return component; + if (player == null || !player.isOnline()) return Component.empty(); if (NotJustNameplates.isPapiHooked()) { - component = PAPIHook.setPlaceholders(component, player); + text = PAPIHook.setPlaceholders(text, player); } - component = component.replaceText(builder -> { - builder.matchLiteral("%displayname%"); - builder.replacement(player.displayName()); - }); + text = text.replaceAll("%displayname%", LegacyComponentSerializer.legacyAmpersand().serialize(player.displayName())); - return component; + text = makeColorsWork(LegacyComponentSerializer.AMPERSAND_CHAR, text); + text = makeColorsWork(LegacyComponentSerializer.SECTION_CHAR, text); + + return MiniMessage.miniMessage().deserialize(text); + } + + private String makeColorsWork(Character symbol, String string) { + // Adventure and ChatColor do not like each other, so this is a thing. + string = string.replaceAll(symbol + "0", ""); + string = string.replaceAll(symbol + "1", ""); + string = string.replaceAll(symbol + "2", ""); + string = string.replaceAll(symbol + "3", ""); + string = string.replaceAll(symbol + "4", ""); + string = string.replaceAll(symbol + "5", ""); + string = string.replaceAll(symbol + "6", ""); + string = string.replaceAll(symbol + "7", ""); + string = string.replaceAll(symbol + "8", ""); + string = string.replaceAll(symbol + "9", ""); + string = string.replaceAll(symbol + "a", ""); + string = string.replaceAll(symbol + "b", ""); + string = string.replaceAll(symbol + "c", ""); + string = string.replaceAll(symbol + "d", ""); + string = string.replaceAll(symbol + "e", ""); + string = string.replaceAll(symbol + "f", ""); + string = string.replaceAll(symbol + "k", ""); + string = string.replaceAll(symbol + "l", ""); + string = string.replaceAll(symbol + "m", ""); + string = string.replaceAll(symbol + "n", ""); + string = string.replaceAll(symbol + "o", ""); + string = string.replaceAll(symbol + "r", ""); + return string; } }