Руководства / Команды и данные
Один и тот же красный текст ломается на Java и Bedrock
Цветовой код, который идеально отображается в одном плагине, в следующем оказывается буквальными амперсандами. Причина — формат, а не плагин.
Код § и тег MiniMessage могут описывать один и тот же цвет — и всё равно быть отвергнутыми одним и тем же сервером. Цветной текст на сервере — это не один формат, а как минимум пять, и плагины расходятся во мнениях о том, какие из них они принимают.
Пять диалектов
| Диалект | Как выглядит | Где выживает |
|---|---|---|
| Legacy section | §cHello | Ванильный чат, старые плагины |
| Ampersand legacy | &cHello | Файлы конфигурации, многие плагины |
| BungeeCord hex | &x&f&f&0&0&0&0 | Плагины прокси, некоторый чат |
| MiniMessage | <red>Hello</red> | Современные плагины Paper |
| JSON component | {"text":"Hello","color":"red"} | Ванильные команды, /tellraw |
Форма с амперсандом вообще не является цветовым кодом, пока что-нибудь его не преобразует. Вставьте &c в плагин, который ожидает MiniMessage, — и игроки прочитают буквальные символы.
В legacy-кодах заканчиваются цвета
Система со знаком параграфа несёт фиксированный набор букв цвета плюс переключатели форматирования. Выразить в ней произвольный цвет невозможно. Hex появился позже, и форма BungeeCord кодирует его по одному символу за раз — &x, за которым следуют шесть hex-цифр с префиксом &, — вот почему она выглядит такой длинной.
MiniMessage принимает #ff0000 напрямую. JSON принимает тот же hex как строковое значение.
Java и Bedrock не сходятся
Bedrock тоже использует знак параграфа, но его набор цветов и обработка сброса форматирования отличаются от Java. Строка, которая корректно отображается на сервере Java, может показывать лишние символы на клиентах Bedrock, а прокси для кросс-плея часто переводят между этими двумя форматами, а не передают текст как есть. Если ваш сервер принимает игроков Bedrock, проверяйте вывод на обеих платформах.
Ловушка вложенности
Legacy-коды хранят состояние: цветовой код сбрасывает форматирование, поэтому §l§cBold — это красный и жирный, но §c§lBold остаётся жирным красным только до следующего цветового кода, который снимает жирность. MiniMessage — это дерево: <red><bold>text</bold></red> закрывается чисто. Преобразование вложенной строки MiniMessage в legacy-коды теряет структуру, потому что в legacy нет закрывающего тега.
Экранирование
MiniMessage воспринимает < как синтаксис. Игрок с ником <Steve> ломает любой плагин, который разбирает его имя как компонент. У legacy-форматов та же проблема с &, поэтому многие плагины требуют && или флаг в конфигурации для его экранирования.
Напишите текст один раз, выберите диалект, который ваш плагин действительно разбирает, и скопируйте точную строку из Server Text Studio.