/tellraw JSON-текст: clickEvent, hoverEvent та чому ваше повідомлення нічого не показує
Лише одна неправильна дужка призводить до мовчазного збою tellraw. Ось структура компонента, дії натискання та наведення, які дійсно працюють у чаті, та правило екранування, яке часто забувають.
/tellraw takes a JSON text component, and the failure mode is unhelpful: a malformed component produces жодного повідомлення та жодної помилки. Усе нижче допоможе скласти правильну структуру з першого разу.
Три дійсні структури
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Форма списку — це те, що слід використовувати для чогось цікавого, оскільки кожен елемент може мати власне форматування. Форматування першого елемента успадковується рештою якщо вони його не перевизначають — саме тому все повідомлення може несподівано стати золотим. Почніть список із порожнього рядка, щоб уникнути цього:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Дії натискання
clickEvent takes an action and a value:
| Дія | Значення | Примітка |
|---|---|---|
run_command | /spawn | Виконує від імені гравця, з його рівнем дозволів |
suggest_command | /msg Steve | Заповнює поле чату, не надсилає |
open_url | https://… | Запитує перед відкриттям |
copy_to_clipboard | будь-який текст | Найзручніший для ділення координатами |
change_page | номер сторінки | Тільки для книг |
run_command is the one with a trap: it executes with гравця, який натискає, дозволи, а не командного блока. Меню, що викликає /gamemode creative does nothing for a normal player.
Дії наведення
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item and show_entity. Note contents — older guides use value, which was replaced and now fails silently. That single rename accounts for a lot of dead hover tooltips copied from tutorials.
Екранування — ось де все ламається
Весь компонент є одним аргументом команди, тому лапки всередині мають пережити синтаксичний аналіз команди. У командному блоці вводьте його безпосередньо. У файлі функції, екранування зворотним слешем не потрібне. У /give written book, the JSON is a string inside a string and дійсно потребує екранування — саме це породжує нечитабельні стіни з \".
Корисне правило: якщо ви вкладаєте текстові компоненти всередину компонента предмета, створюйте його за допомогою інструмента, а не вручну.
Селектори всередині тексту
{"selector":"@p","separator":{"text":", "}}
перетворюється на імена гравців під час надсилання. {"score":{"name":"@s","objective":"Kills"}} pulls a scoreboard value. Both beat trying to concatenate values yourself.
Ключі перекладу адаптуються до різних мов
{"translate":"block.minecraft.crafting_table"}
відображається рідною мовою кожного гравця — 제작대 для корейського клієнта, 作業台 для японського. Для багатомовного сервера це значно краще, ніж прописувати англійську вручну.
Створіть компонент візуально з діями натискання та наведення в їхньому поточному вигляді у Конструктор команд тексту та дисплеїв.