Войти или зарегистрироваться

Помогите Как создавать градиенты в net.kyori.adventure.text.Component

Статус
Закрыто для дальнейших ответов.

just_lofe

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
just_l0fe
Я разрабатываю небольшой плагин на меню, и мне нужно у одного из предмета в описании сделать градиентный текст, есть варианты как это сделать?
Просто ранее я использовал градиенты только в чате создавая с помощью API.
Код:
public static String gradientText(String message, Color startColor, Color endColor) {
        StringBuilder finalizedMessage = new StringBuilder();
        for(int messageChar = 0; messageChar < message.toCharArray().length; messageChar++) {
            float ratio = (float) messageChar / (float) message.toCharArray().length;
            int red = (int) (endColor.getRed() * ratio + startColor.getRed() * (1 - ratio));
            int green = (int) (endColor.getGreen() * ratio + startColor.getGreen() * (1 - ratio));
            int blue = (int) (endColor.getBlue() * ratio + startColor.getBlue() * (1 - ratio));
            Color stepColor = new Color(red, green, blue);
            String redHex = Integer.toHexString(stepColor.getRed());
            String greenHex = Integer.toHexString(stepColor.getGreen());
            String blueHex = Integer.toHexString(stepColor.getBlue());

            String hexColor = "!#" + (redHex.length() <= 2 ? StringUtils.repeat( "0",2-redHex.length()) + redHex : redHex) +
                    (greenHex.length() <= 2 ? StringUtils.repeat( "0",2-greenHex.length()) + greenHex : greenHex) +
                    (blueHex.length() <= 2 ? StringUtils.repeat( "0",2-blueHex.length()) + blueHex : blueHex);
            finalizedMessage.append(hexColor).append(message.toCharArray()[messageChar]);
        }
        return colorHex(finalizedMessage.toString());
    }
Код:
    public static String colorHex(String s) {
        s = ChatColor.translateAlternateColorCodes(ChatColor.COLOR_CHAR, s);
        s = findAndReplaceRegex("!#[0-9,a-f,A-F]{6}", s);
        s = findAndReplaceRegex("&#[0-9,a-f,A-F]{6}", s);
        s = ChatColor.translateAlternateColorCodes('&', s);
        return s;
    }
Я пробовал при создании методом Component.text(String content); в content помещать метод из API, но ничего не получилось, цвета просто ломались.

P.s. Желательно ещё возможность добавить компонент к существующему в котором уже прописан другой текст без градиента.
 
Последнее редактирование:
P.s.s. Вот как ломаются цвета:
Установка:
Код:
ItemStack chat = new ItemStack(Material.NAME_TAG);
        ItemMeta chatMeta = chat.getItemMeta();
        chatMeta.displayName(
                Component.text("Чат")
                        .decoration(TextDecoration.ITALIC, false)
                        .color(TextColor.fromHexString("#6699ff")));

        chatMeta.lore(Lists.newArrayList(
                Component.text(ColoredStringUtil.gradientText("Настройки чата",
                                ColoredStringUtil.parseHexColor("#FB861A"),
                                ColoredStringUtil.parseHexColor("#FDF41A")))
                        .decoration(TextDecoration.ITALIC, false)));
        chat.setItemMeta(chatMeta);
Результат:
bgIvc0Z.png

(В работе API уверен полностью.)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх