MC Toolkit

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

Экраны диалогов: настоящие меню без мода

Диалоги датапаков дают полноценное окно с полями ввода и кнопками. Вот структура JSON, то, как кнопка выполняет команду, и сравнение с трюком с книгой-меню.

Серверные меню раньше делали из книг с кликабельными страницами или из сундука, замаскированного под интерфейс через рамки. Диалоги заменили и то, и другое настоящим экраном.

Что такое диалог

Это JSON-файл в датапаке, описывающий окно:

data/<namespace>/dialog/welcome.json
{
  "type": "minecraft:notice",
  "title": { "text": "Welcome" },
  "body": [{ "type": "minecraft:plain_message",
             "contents": { "text": "Pick a class to begin." } }],
  "action": { "label": { "text": "Continue" } }
}

Затем /dialog show @p my_pack:welcome.

Типы

ТипФорма
noticeтекст и одна кнопка закрытия
confirmationда / нет, у каждой свой действие
multi_actionсетка кнопок
server_linksвстроенный список ссылок
dialog_listменю, открывающее другие диалоги

multi_action — рабочая лошадка: это и выбор класса, и магазин, и список телепортов.

Кнопки выполняют команды

{ "label": { "text": "Warp to spawn" },
  "action": { "type": "minecraft:run_command", "command": "/spawn" } }

Как и clickEvent в чате, это выполняется от имени игрока, нажавшего кнопку, с его уровнем прав. Кнопка, вызывающая команду только для операторов, ничего не сделает для обычного игрока. Стандартный обходной путь — объектив trigger: кнопка выполняет /trigger warp set 1, а тикающая функция делает привилегированную часть.

Поля ввода

"inputs": [
  { "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
  { "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
  { "type": "minecraft:single_option", "key": "class", "label": { "text": "Class" }, "options": [
      { "id": "mage", "display": { "text": "Mage" } },
      { "id": "rogue", "display": { "text": "Rogue" } } ] }
]

Значения попадают в команду через кнопку, действие которой — minecraft:dynamic/run_command: её template принимает $(key) для каждого поля ввода. Обычная кнопка run_command не получает ничего.

"action": {
  "type": "minecraft:dynamic/run_command",
  "template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}

Вызываемая функция тогда является макросом:

$say Welcome $(name), you chose $(class)

Префикс $ в строке и $(key) для подстановки, с обоих концов. Это весь механизм привязки, и именно он делает диалоги по-настоящему полезными, а не декоративными.

Почему это лучше трюка с книгой

  • Это экран, поэтому он приостанавливает ввод, а не висит в истории чата.
  • Поля ввода действительно существуют. Книга могла предложить только ссылки.
  • Предмет не нужен. Нечего терять, выбрасывать или дублировать.
  • Он закрывается чисто, и к нему нельзя прокрутить назад.

Единственное, что книги всё ещё делают лучше, — это длинное чтение: тело диалога — не лучшее место для трёх страниц лора.

Стили путевых точек

Тот же инструмент охватывает путевые точки на полосе локатора, стили которых — ресурсы ресурспака (assets/<namespace>/waypoint_style/), управляющие спрайтами и дистанциями затухания отслеживаемого игрока или позиции; цвет задаётся отдельно через /waypoint modify <target> color. Полезно для меток команды, где боссбар был бы слишком навязчивым.

Создавайте экраны диалогов с полями ввода и кнопками и настраивайте стили путевых точек в Dialog Input & Waypoint Style Builder.

Конструктор диалогов и стилей точек →

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

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