🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21
Ця сторінка написана для версії:
1.21
Щоразу, коли Minecraft промальовує текст у грі, він, ймовірно, визначається за допомогою об'єкта Text
. Цей власний тип використовується замість String
для більш розширеного форматування, включаючи кольори, жирний, зашифрований і події натискання. Вони також забезпечують легкий доступ до системи перекладу, що полегшує переклад будь-якого елемента інтерфейсу різними мовами.
Якщо ви раніше працювали з пакетами даних або функціями, ви можете побачити паралелі з текстовим форматом json, який використовується для показу імен, книг та табличок, і не тільки. Як ти мабуть, можна здогадатися, це просто представлення json об'єкта Text
, і його можна конвертувати в і з використанням Text.Serializer
.
Коли створюєте мод, зазвичай краще створювати об'єкти Текст
безпосередньо у коді, використовуючи переклади, коли це можливо.
Найпростіший спосіб створити об'єкт Текст
— створити літерал. Це просто рядок який промальовуватиме як є, за замовчуванням без жодного форматування.
Вони створюються за допомогою методів Text.of
або Text.literal
, які обидва діють трохи інакше. Text.of
приймає нульові значення як вхідні дані та повертає екземпляр 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
(для української треба uk_ua.json
) виглядає так:
{
"my_mod.text.hello": "Hello!",
"my_mod.text.bye": "Goodbye :("
}
Якщо ви хочете мати можливість використовувати змінні в перекладі, подібно до того, як повідомлення про смерть дозволяють використовувати залучених гравців і предмети в перекладі, ви можете додати зазначені змінні як параметри. Ви можете додати скільки завгодно параметрів.
Text translatable = Text.translatable("my_mod.text.hello", player.getDisplayName());
Ви можете посилатися на ці змінні в перекладі так:
{
"my_mod.text.hello": "%1$s said hello!"
}
У грі %1$s буде замінено іменем гравця, якого ви згадали в коді. Використання player.getDisplayName()
зробить так, що додаткова інформація про сутність з'явиться у спливаючій підказці під час наведення вказівника мишки на ім'я в повідомленні чату, на відміну від використання player.getName()
, який все одно отримає назву; однак він не відображатиме додаткових деталей. Подібне можна зробити з itemStacks, використовуючи stack.toHoverableText()
.
Щодо того, що взагалі означає %1$s, все, що вам справді потрібно знати, це те, що число відповідає змінній, яку ви намагаєтеся використати. Припустімо, у вас є три змінні, які ви використовуєте.
Text translatable = Text.translatable("my_mod.text.whack.item", victim.getDisplayName(), attacker.getDisplayName(), itemStack.toHoverableText());
Якщо ви хочете вказати, хто в нашому випадку є зловмисником, ви б використовували %2$s, оскільки це друга змінна, яку ми передали. Так само %3$s посилається на itemStack. Переклад із такою кількістю додаткових параметрів може виглядати так:
{
"my_mod.text.whack.item": "%1$s was whacked by %2$s using %3$s"
}
Як згадувалося раніше, ви можете серіалізувати текст у 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 замість літерального або перекладаного тексту.
Крім того, щоб десеріалізувати текстовий об'єкт 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 | |||
<0>Курсив | §o | |||
Зашифрований | §k |