🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for version:
1.21
This page is written for version:
1.21
Всякий раз, когда Minecraft отображает текст в игре, он, в большинстве случаев, определяется с помощью объекта "Text". Этот пользовательский тип используется вместо String
для обеспечения более сложного форматирования, включая цвета, выделение жирным шрифтом, обфускации и событий нажатия (click). Они также обеспечивают легкий доступ к системе перевода, упрощая локализацию любых элементов интерфейса на разные языки.
Если вы раньше работали с пакетами данных (датапаками) или функциями, вы можете увидеть параллели с текстовым форматом json, используемым для отображения названий, книг, табличек и другого. Как вы, возможно, догадываетесь, это на самом деле json-представление объекта Text
, и его можно преобразовать в Text.Serializer
и обратно с помощью Text.Serializer`.
При создании мода, предпочтительнее создавать свои Text
объекты непосредственно в коде, используя перевод, когда это возможно.
Самый простой способ создать объект Text
это использовать литерал. По сути это строка которая будет отображена как есть, без форматирования по умолчанию.
Они создаются с помощью методов Text.of
и Text.literal
, которые действуют немного по-разному. Text.of
принимает значения null
в себя и возвращает экземпляр класса Text
. Text.literal
же наоборот не сможет принять значение null, и вернётMutableText
являющийся наследуемым классом от Text
, который можно легко стилизовать и конкатенировать. Подробнее об этом будет сказано позже.
Text literal = Text.of("Hello, world!");
MutableText mutable = Text.literal("Hello, world!");
// Keep in mind that a MutableText can be used as a Text, making this valid:
Text mutableAsText = mutable;
Когда вы хотите предоставить несколько переводов для одной и той же строчки текста, вы можете использовать метод Text.translatable
для ссылки на ключ перевода в любом языковом файле. Если ключ не существует, ключ перевода конвертируется в литерал.
Text translatable = Text.translatable("my_mod.text.hello");
// Similarly to literals, translatable text can be easily made mutable.
MutableText mutable = Text.translatable("my_mod.text.bye");
Файл языка, en_us.json
, выглядит как то так:
{
"my_mod.text.hello": "Hello!",
"my_mod.text.bye": "Goodbye :("
}
Как было упомянуто выше, вы можете сериализовать текст в JSON используя текстовый кодек. Для большей информации об кодеках, посмотрите страницу Codec.
Gson gson = new Gson();
MutableText mutable = Text.translatable("my_mod.text.bye");
String json = gson.toJson(TextCodecs.CODEC.encodeStart(JsonOps.INSTANCE, mutable).getOrThrow());
В результате получается JSON, который можно использовать в датапаках, командах и других местах которые принимают JSON формат текста вместо буквального или переводимого текста.
Кроме того, чтобы десериализовать текстовый объект в реальный класс Text
, опять же, используйте кодек.
String jsonString = "...";
Text deserialized = TextCodecs.CODEC
.decode(JsonOps.INSTANCE, gson.fromJson(jsonString, JsonElement.class))
.getOrThrow()
.getFirst();
Вы можете быть знакомы со стандартом форматирования в Minecraft:
Вы можете применить эти форматирования с помощью перечисления Formatting
в классе MutableText
:
MutableText result = Text.literal("Hello World!")
.formatted(Formatting.AQUA, Formatting.BOLD, Formatting.UNDERLINE);
Цвет | Название | Код в чате | Код для MOTD | HEX-код |
---|---|---|---|---|
Чёрный (black) | §0 | \u00A70 | #000000 | |
Тёмно-синий (dark_blue) | §1 | \u00A71 | #0000AA | |
Тёмно-зелёный (dark_green) | §2 | \u00A72 | #00AA00 | |
Тёмно-голубой (dark_aqua) | §3 | \u00A73 | #00AAAA | |
Тёмно-красный (dark_red) | §4 | \u00A74 | #AA0000 | |
Тёмно-фиолетовый (dark_purple) | §5 | \u00A75 | #AA00AA | |
Золотой (gold) | §6 | \u00A76 | #FFAA00 | |
Серый (gray) | §7 | \u00A77 | #AAAAAA | |
Тёмно-серый (dark_gray) | §8 | \u00A78 | #555555 | |
Синий (blue) | §9 | \u00A79 | #5555FF | |
Зелёный (green) | §a | \u00A7a | #55FF55 | |
Голубой (aqua) | §b | \u00A7b | #55FFFF | |
Красный (red) | §c | \u00A7c | #FF5555 | |
Фиолетовый (light_purple) | §d | \u00A7d | #FF55FF | |
Жёлтый (yellow) | §e | \u00A7e | #FFFF55 | |
Белый (white) | §f | \u00A7f | #FFFFFF | |
Сброс форматирования | §r | |||
Жирный | §l | |||
§m | ||||
Подчёркнутый | §n | |||
Курсив | §o | |||
Зашифрованный | §k |