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

Помогите TextComponent и HEX-цвета

Migel

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Migel077
Всем привет, я только недавно начал работать с
net.kyori.adventure.text.TextComponent и у меня возник вопрос.
Раньше я использовал этот метод, чтобы получать из HEX цветов, цвета формата §x§r§r§g§g§b§b

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

    public static String translateHexColorCodes(String message) {
        char COLOR_CHAR = ChatColor.COLOR_CHAR;
        Matcher matcher = HEX_PATTERN.matcher(message);
        StringBuilder buffer = new StringBuilder(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());
    }
Но теперь я встретился с трудностью. При использовании TextComponent никак не работает этот метод.
Мне нужно чтобы из строки
Код:
text = "[G] Migel077 > &#949DE2{message}"
все цвета сохранялись, причём {message} это отдельный TextComonent, который в свою очередь состоит ещё из нескольких Component
 
Adventure не поддерживает формат через & и §. Если ты используешь их, то работают они только благодаря удачному стечению обстоятельств.
Тебе нужен LegacyComponentSerializer, или использовать InkyMessage для поддержки большего количества форматов.
 
Код:
sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(Component.text(Utils.translateHexColorCodes("&#6C78D7TEST"))));
Вот так вот?..
или legacySection, в чём разница?
 
Спасибо, можете помочь пожалуйста, не могу разобраться с использованием его. Если можно, не большой пример..
Код:
sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(Component.text(Utils.translateHexColorCodes("&#6C78D7TEST"))));
Вот так вот?..
или legacySection, в чём разница?
LegacyCoponentSerializer.legacyAmperstand().deserialize("&#123456Текст") вернет тебе покрашенный текст. Есть ещё legacySection() - оно парсит § вместо &.
 

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

Назад
Верх