MC Toolkit

Руководства / Команды и данные

Текстовые компоненты /tellraw: click_event, hover_event и почему ваше сообщение ничего не показывает

Одна неверная скобка — и tellraw не отправляет ничего своим целям. Вот форма компонента, действия клика и наведения, которые действительно работают в чате, и правило экранирования, которое все упускают.

/tellraw принимает текстовый компонент, и режим отказа здесь недружелюбен: некорректный компонент не отправляет сообщение никому из своих целей — единственная ошибка достаётся тому, кто выполнил команду, или попадает в вывод командного блока, куда никто не смотрит. Всё ниже — о том, как сделать форму правильной с первого раза.

Три допустимые формы

"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]

Форма списка — та, что нужна для всего интересного, потому что каждый элемент может нести собственное форматирование. Форматирование первого элемента наследуется остальными, если они его не переопределяют — вот почему люди неожиданно получают всё сообщение золотым. Начинайте список с пустой строки, чтобы этого избежать:

/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]

Действия клика

click_event принимает действие плюс собственное поле этого действия — общего value нет:

ДействиеПолеПримечание
run_commandcommand: "/spawn"Выполняется от имени игрока, на его уровне разрешений
suggest_commandcommand: "/msg Steve "Заполняет поле чата, но не отправляет
open_urlurl: "https://…"Спрашивает подтверждение перед открытием
copy_to_clipboardvalue: "any text"Самый удобный для обмена координатами
change_pagepage: 2Только для книг

run_command — тот, где есть ловушка: он выполняется с разрешениями кликнувшего игрока, а не командного блока. Меню, вызывающее /gamemode creative, для обычного игрока не делает ничего.

Действия наведения

"hover_event":{"action":"show_text","value":["Click to teleport"]}

show_text, show_item и show_entity. Обратите внимание на названия — старые руководства используют hoverEvent, clickEvent и contents, которые в 1.21.5 были заменены на hover_event, click_event и, для show_text, value. Это переименование объясняет множество мёртвых всплывающих подсказок, скопированных из туториалов.

Экранирование — вот где всё ломается

Весь компонент — это один аргумент команды, поэтому кавычки внутри должны выжить после парсера команд. В командном блоке вводите его напрямую. В файле функции экранирование обратным слешем не нужно. В /give завершённой книге страницы — тоже текстовые компоненты, записанные как SNBT — никакого экранирования строки внутри строки начиная с 1.21.5, и страница, всё ещё записанная как экранированная JSON-строка, теперь отображается буквальным текстом вместе со своими кавычками.

Практическое правило: если вы вкладываете текстовые компоненты внутрь компонента предмета, собирайте это инструментом, а не вручную.

Селекторы внутри текста

{"selector":"@p","separator":{"text":", "}}

преобразуется в имена игроков в момент отправки. {"score":{"name":"@s","objective":"Kills"}} вытягивает значение таблицы очков. И то, и другое лучше, чем пытаться склеивать значения самостоятельно.

Ключи перевода путешествуют между языками

{"translate":"block.minecraft.crafting_table"}

отображается на родном языке каждого игрока — 제작대 для корейского клиента, 作業台 для японского. Для многоязычного сервера это строго лучше, чем жёстко зашитый английский.

Собирайте и просматривайте текстовые команды и команды отображения в Конструкторе текстовых и отображаемых команд.

Конструктор команд текста и отображения →

Другие руководства

Смотреть все →