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

Помогите [1.12] Как преобразовать HEX в цветовой код майнкрафта

niheev

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
slivachuu
Приветствую! Столкнулся с такой ситуацией, необходимо преобразовывать HEX код в цветовой символ (код форматирования) понятный для Minecraft 1.12, а-ля &a.

Используемое ядро: Spigot

Облазил иностранные, и отечественные ресурсы в поисках решения – не удалось. Надежда на то – что кто-нибудь из Вас знает решения данной задачки. Заранее спасибо!
 
Меняешь решетку на §x, ну и перед каждым символом hex кода знак параграфа. Только тебе нужна версия 1.16 и выше, старые версии в такое не умеют.
 
Последнее редактирование:
Если речь про нахождение ближайшего ванильного цвета к какому-то иному, то проще всего будет сравнить "расстояние" между данным и существующими.
ChatColor, к сожалению, не предоставляет свои цвета на 1.12. Но можно замапить значения свои, допустим какой-нибудь класс MyColor(int red, int green, int blue)

Выйдет что-то типа такого:
PHP:
Map<MyColor, ChatColor> colorMap = ...; // Заполнить соответствия цветов

public static char getNearestColorSymbol(int r, int g, int b) {
    int minDistance = Integer.MAX_VALUE;
    MyColor nearColor = null;
    for (MyColor color : colorMap.keys()) {
        int distance = squared(r - color.red()) + squared(g - color.green()) + squared(b - color.blue());
        if (minDistance > distance) {
            nearColor = color;
            minDistance = distance;
        }
    }
    return colorMap.get(nearColor).getChar();
}
squared просто выдаёт значение умноженное на себя же
 
Если речь про нахождение ближайшего ванильного цвета к какому-то иному, то проще всего будет сравнить "расстояние" между данным и существующими.
ChatColor, к сожалению, не предоставляет свои цвета на 1.12. Но можно замапить значения свои, допустим какой-нибудь класс MyColor(int red, int green, int blue)

Выйдет что-то типа такого:
PHP:
Map<MyColor, ChatColor> colorMap = ...; // Заполнить соответствия цветов

public static char getNearestColorSymbol(int r, int g, int b) {
    int minDistance = Integer.MAX_VALUE;
    MyColor nearColor = null;
    for (MyColor color : colorMap.keys()) {
        int distance = squared(r - color.red()) + squared(g - color.green()) + squared(b - color.blue());
        if (minDistance > distance) {
            nearColor = color;
            minDistance = distance;
        }
    }
    return colorMap.get(nearColor).getChar();
}
squared просто выдаёт значение умноженное на себя же

Огромнейшее спасибо, Вы мне очень помогли!
 

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

Назад
Верх