Текст JSON для /tellraw: clickEvent, hoverEvent и почему ваше сообщение не отображается
Одна неверная скобка приводит к молчаливому сбою tellraw. Вот структура компонента, действия click и hover, которые действительно работают в чате, и правило экранирования, которое часто упускают из виду.
/tellraw принимает текстовый компонент JSON, и режим отказа бесполезен: некорректно сформированный компонент не выдаёт ни сообщения, ни ошибки. Всё нижеизложенное посвящено тому, как правильно задать форму с первого раза.
Три допустимые формы
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Форма списка используется для всего интересного, потому что каждый элемент может иметь своё собственное форматирование. Форматирование первого элемента наследуется остальными, если они его не переопределяют — вот почему люди получают целое сообщение неожиданно золотого цвета. Начните список с пустой строки, чтобы избежать этого:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Действия по клику
clickEvent принимает действие и значение:
| Действие | Значение | Примечание |
|---|---|---|
run_command | /spawn | Выполняется от имени Игрока, с его уровнем разрешений |
suggest_command | /msg Steve | Заполняет окно чата, но не отправляет |
open_url | https://… | Запрашивает подтверждение перед открытием |
copy_to_clipboard | любой текст | Самый удобный способ поделиться координатами |
change_page | номер страницы | Только для Книг |
run_command — это действие с ловушкой: оно выполняется с разрешениями нажимающего Игрока, а не Командного блока. Меню, которое вызывает /gamemode creative, ничего не делает для обычного Игрока.
Действия при наведении
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item и show_entity. Обратите внимание на contents — в старых руководствах используется value, который был заменён и теперь молчаливо завершается сбоем. Это единственное переименование объясняет множество неработающих всплывающих подсказок, скопированных из учебников.
Экранирование — вот где всё ломается
Весь компонент является одним аргументом команды, поэтому кавычки внутри должны пройти через парсер команд. В Командном блоке введите его напрямую. В файле функции экранирование обратной косой чертой не требуется. В /give Завершённой книге JSON является строкой внутри строки и действительно нуждается в экранировании — это тот случай, который генерирует нечитаемые стены \".
Практическое правило: если вы вкладываете текстовые компоненты в компонент предмета, создавайте его с помощью инструмента, а не вручную.
Селекторы внутри текста
{"selector":"@p","separator":{"text":", "}}
разрешается в имена Игроков во время отправки. {"score":{"name":"@s","objective":"Kills"}} извлекает значение таблицы результатов. Оба варианта лучше, чем попытки самостоятельно объединять значения.
Ключи перевода работают на разных языках
{"translate":"block.minecraft.crafting_table"}
отображается на родном языке каждого Игрока — 제작대 для корейского клиента, 作業台 для японского. Для многоязычного сервера это строго лучше, чем жёсткое кодирование английского языка.
Создайте компонент визуально, с текущими действиями клика и наведения, в Text & Display Command Builder.