From cc8f4b0f923b8f1f347cd282c62ade79d9c59bf5 Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Tue, 30 Dec 2025 23:13:54 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20gradient=20display=20names=20-=20convert?= =?UTF-8?q?=20&#RRGGBB=20to=20=C2=A7x=20format=20for=20player=20names=20ab?= =?UTF-8?q?ove=20heads?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lochat/gradient/util/DisplayNameUtil.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/loki/lochat/gradient/util/DisplayNameUtil.java b/src/main/java/com/loki/lochat/gradient/util/DisplayNameUtil.java index 310aae4..d3d4438 100644 --- a/src/main/java/com/loki/lochat/gradient/util/DisplayNameUtil.java +++ b/src/main/java/com/loki/lochat/gradient/util/DisplayNameUtil.java @@ -7,6 +7,8 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.entity.Player; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Утилита для обновления отображаемого имени игрока @@ -14,10 +16,12 @@ import java.util.List; public final class DisplayNameUtil { private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder() - .character('&') + .character('§') .hexCharacter('#') .hexColors() .build(); + + private static final Pattern HEX_PATTERN = Pattern.compile("&#([0-9a-fA-F]{6})"); private DisplayNameUtil() {} @@ -39,6 +43,8 @@ public final class DisplayNameUtil { cfg.isUseLegacyRgbFormat(), cfg.isContinuousGradient() ); + // Конвертируем &#RRGGBB в §x§R§R§G§G§B§B для display name + displayName = convertToLegacyFormat(displayName); var component = SERIALIZER.deserialize(displayName); player.displayName(component); player.playerListName(component); @@ -55,11 +61,36 @@ public final class DisplayNameUtil { prefixFormat, cfg.isUseLegacyRgbFormat() ); + + // Конвертируем &#RRGGBB в §x§R§R§G§G§B§B для display name + displayName = convertToLegacyFormat(displayName); var component = SERIALIZER.deserialize(displayName); player.displayName(component); player.playerListName(component); } + /** + * Конвертирует &#RRGGBB формат в §x§R§R§G§G§B§B для display name + */ + private static String convertToLegacyFormat(String text) { + if (text == null) return ""; + + Matcher matcher = HEX_PATTERN.matcher(text); + StringBuffer sb = new StringBuffer(); + + while (matcher.find()) { + String hex = matcher.group(1).toLowerCase(); + StringBuilder replacement = new StringBuilder("§x"); + for (char c : hex.toCharArray()) { + replacement.append("§").append(c); + } + matcher.appendReplacement(sb, replacement.toString()); + } + matcher.appendTail(sb); + + return sb.toString(); + } + private static String buildWithLuckPermsPrefix(String lpPrefix, String nick, List colors, boolean useLegacyFormat,