1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Migel, 16 июн 2023.

  1. Автор темы
    Migel

    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
     
  2. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Adventure не поддерживает формат через & и §. Если ты используешь их, то работают они только благодаря удачному стечению обстоятельств.
    Тебе нужен LegacyComponentSerializer, или использовать InkyMessage для поддержки большего количества форматов.
     
  3. Автор темы
    Migel

    Migel Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Migel077
    Спасибо, можете помочь пожалуйста, не могу разобраться с использованием его. Если можно, не большой пример..
     
  4. Автор темы
    Migel

    Migel Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Migel077
    Код:
    sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(Component.text(Utils.translateHexColorCodes("&#6C78D7TEST"))));
    Вот так вот?..
    или legacySection, в чём разница?
     
  5. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    LegacyCoponentSerializer.legacyAmperstand().deserialize("&#123456Текст") вернет тебе покрашенный текст. Есть ещё legacySection() - оно парсит § вместо &.
     

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