Градиент в чате

Версия Minecraft
1.16.5
API
Forge
Ребятки прошу вас помочь мне с градиентом в чате.

1726861975170.png

Я бы хотел вывести подобный градиент в чат с помощью этого кода:
mc.player.displayClientMessage(new StringTextComponent("§#ffd600h§#f9a100e§#f36b00l§#ec3600l§#e60000o"),false);

Но этот код почему-то не выводит градиент, вместо градиента получается это:
1726862229994.png
 
Решение
Я бы хотел вывести подобный градиент в чат с помощью этого кода:
Это не 1 компонент а буквально каждая буква - отдельный компонент со своим стилем

StringTextComponent не делает разбор стилей автоматически, либо отображай простую строку (в некоторых местах разбор стилей будет автоматическим), либо определи стили вручную

Пример ручного разбора стилей (под 1.12.2), который я сам использую

Java:
public class TextComponentAuto extends TextComponentString {
    ...
    private TextComponentAuto(String str, Style style, boolean init){
        super("");
        if(init){
            nonColored = str.replace("§","");
        } else {
            nonColored = str;
            return;
        }
        String[] items = str.split("§")...
Я бы хотел вывести подобный градиент в чат с помощью этого кода:
Это не 1 компонент а буквально каждая буква - отдельный компонент со своим стилем

StringTextComponent не делает разбор стилей автоматически, либо отображай простую строку (в некоторых местах разбор стилей будет автоматическим), либо определи стили вручную

Пример ручного разбора стилей (под 1.12.2), который я сам использую

Java:
public class TextComponentAuto extends TextComponentString {
    ...
    private TextComponentAuto(String str, Style style, boolean init){
        super("");
        if(init){
            nonColored = str.replace("§","");
        } else {
            nonColored = str;
            return;
        }
        String[] items = str.split("§");
        if(str.charAt(0)!='§'){
            items[0] = "f"+items[0];
        }

        for (int i=0;i<items.length;i++){
            String item = items[i];
            if(item.isEmpty()) continue;

            TextFormatting fm = byKey.get(item.charAt(0));
            if(item.length()==1){
                if(fm != null){
                    if(fm == TextFormatting.RESET){
                        style = new Style();
                        continue;
                    }
                    if(fm.isColor()) style.setColor(fm);
                    else {
                        switch (fm){
                            case OBFUSCATED:
                                style.setObfuscated(true);break;
                            case UNDERLINE:
                                style.setUnderlined(true);break;
                            case BOLD:
                                style.setBold(true);break;
                            case STRIKETHROUGH:
                                style.setStrikethrough(true);break;
                            case ITALIC:
                                style.setItalic(true);break;
                        }
                    }
                }
            } else {
                if(fm != null){
                    style.setColor(fm);
                    item = item.substring(1);
                }
                siblings.add(new TextComponentString(item).setStyle(style));
                Style prev = style;
                style = prev.createDeepCopy();
            }
        }
    }
}
 
Назад
Сверху