Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как сделать hex цвет ника игрока в таблисте?

Slobodyan

Новичок
Баллы
6
Имя в Minecraft
Slobodyan
Столкнулся с такой проблемой, team.setColor(org.bukkit.ChatColor) в жизни не видал HEX цветов, player.setCustomName() не работает, а team.setPrefix(String) не изменяет цвет никнейма.
 
Судя по тому, что даже Adventure принимает лишь один из 16 цветов, то, скорее всего, командам RGB-цвета и нельзя задавать:
https://jd.papermc.io/paper/1.19/or...t.kyori.adventure.text.format.NamedTextColor)

То есть делается это как-то иначе. Как именно - не знаю. Если совсем затык будет, то наверняка можно использовать апи TAB для решения этой задачи
 
Судя по тому, что даже Adventure принимает лишь один из 16 цветов, то, скорее всего, командам RGB-цвета и нельзя задавать:
https://jd.papermc.io/paper/1.19/or...t.kyori.adventure.text.format.NamedTextColor)

То есть делается это как-то иначе. Как именно - не знаю. Если совсем затык будет, то наверняка можно использовать апи TAB для решения этой задачи

Проблему решил, обратился к ProtocolLib и создал пакет PLAYER_INFO.
 
Хотя нет, проблема осталась, даже через протоколы таблист высвечивает все hex цвета черными.
 
Самому реплейсить

Код:
private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})");

public static String hexColorize(String message) {
    char COLOR_CHAR = ChatColor.COLOR_CHAR;
    Matcher matcher = HEX_PATTERN.matcher(message);
    StringBuffer buffer = new StringBuffer(message.length() + 4 * 8);
    while (matcher.find()) {
        String group = matcher.group(1);
        matcher.appendReplacement(buffer, COLOR_CHAR + "x"
                + COLOR_CHAR + group.charAt(0) + COLOR_CHAR + group.charAt(1)
                + COLOR_CHAR + group.charAt(2) + COLOR_CHAR + group.charAt(3)
                + COLOR_CHAR + group.charAt(4) + COLOR_CHAR + group.charAt(5)
        );
    }

    return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString());
}
 
Самому реплейсить

Код:
private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})");

public static String hexColorize(String message) {
    char COLOR_CHAR = ChatColor.COLOR_CHAR;
    Matcher matcher = HEX_PATTERN.matcher(message);
    StringBuffer buffer = new StringBuffer(message.length() + 4 * 8);
    while (matcher.find()) {
        String group = matcher.group(1);
        matcher.appendReplacement(buffer, COLOR_CHAR + "x"
                + COLOR_CHAR + group.charAt(0) + COLOR_CHAR + group.charAt(1)
                + COLOR_CHAR + group.charAt(2) + COLOR_CHAR + group.charAt(3)
                + COLOR_CHAR + group.charAt(4) + COLOR_CHAR + group.charAt(5)
        );
    }

    return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString());
}

Метод у меня для этого есть, сам по себе Team не имеет возможности поставить HEX цвета в team#setColor().

Перепробовал от API методов (setDisplayName, setPlayerListName), до Component и пакетов. Пока что ничего не помогло.
 

Поделиться этой страницей

Назад
Верх