Fix gradient display names - convert &#RRGGBB to §x format for player names above heads
This commit is contained in:
parent
7b76f75e36
commit
cc8f4b0f92
1 changed files with 32 additions and 1 deletions
|
|
@ -7,6 +7,8 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Утилита для обновления отображаемого имени игрока
|
* Утилита для обновления отображаемого имени игрока
|
||||||
|
|
@ -14,11 +16,13 @@ import java.util.List;
|
||||||
public final class DisplayNameUtil {
|
public final class DisplayNameUtil {
|
||||||
|
|
||||||
private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder()
|
private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder()
|
||||||
.character('&')
|
.character('§')
|
||||||
.hexCharacter('#')
|
.hexCharacter('#')
|
||||||
.hexColors()
|
.hexColors()
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
private static final Pattern HEX_PATTERN = Pattern.compile("&#([0-9a-fA-F]{6})");
|
||||||
|
|
||||||
private DisplayNameUtil() {}
|
private DisplayNameUtil() {}
|
||||||
|
|
||||||
public static void updateDisplayName(GradientModule module, Player player, GradientPlayerData data) {
|
public static void updateDisplayName(GradientModule module, Player player, GradientPlayerData data) {
|
||||||
|
|
@ -39,6 +43,8 @@ public final class DisplayNameUtil {
|
||||||
cfg.isUseLegacyRgbFormat(),
|
cfg.isUseLegacyRgbFormat(),
|
||||||
cfg.isContinuousGradient()
|
cfg.isContinuousGradient()
|
||||||
);
|
);
|
||||||
|
// Конвертируем &#RRGGBB в §x§R§R§G§G§B§B для display name
|
||||||
|
displayName = convertToLegacyFormat(displayName);
|
||||||
var component = SERIALIZER.deserialize(displayName);
|
var component = SERIALIZER.deserialize(displayName);
|
||||||
player.displayName(component);
|
player.displayName(component);
|
||||||
player.playerListName(component);
|
player.playerListName(component);
|
||||||
|
|
@ -55,11 +61,36 @@ public final class DisplayNameUtil {
|
||||||
prefixFormat,
|
prefixFormat,
|
||||||
cfg.isUseLegacyRgbFormat()
|
cfg.isUseLegacyRgbFormat()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Конвертируем &#RRGGBB в §x§R§R§G§G§B§B для display name
|
||||||
|
displayName = convertToLegacyFormat(displayName);
|
||||||
var component = SERIALIZER.deserialize(displayName);
|
var component = SERIALIZER.deserialize(displayName);
|
||||||
player.displayName(component);
|
player.displayName(component);
|
||||||
player.playerListName(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,
|
private static String buildWithLuckPermsPrefix(String lpPrefix, String nick,
|
||||||
List<String> colors,
|
List<String> colors,
|
||||||
boolean useLegacyFormat,
|
boolean useLegacyFormat,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue