Экраны диалогов: создаем полноценные меню без модов
Диалоги датапаков дают вам полноценное окно с полями ввода и кнопками. Здесь вы найдете описание JSON-структуры, узнаете, как кнопка запускает команду, и сравните это с хитростью меню-книги.
Раньше серверные меню представляли собой написанные книги с кликабельными страницами или поддельный GUI Сундука, имитируемый рамками для предметов. Диалоги заменили оба варианта настоящим экраном.
Что такое диалог
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", "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
Значения поступают в виде аргументов макроса в функцию, которую вызывает кнопка, поэтому принимающая функция является макросом:
$say Welcome $(name), you chose $(class)
Префикс $ в строке и $(key) для подстановки. Это весь механизм привязки, и именно он делает диалоги по-настоящему полезными, а не просто декоративными.
Почему это лучше, чем хитрость с книгой
- Это экран, поэтому он приостанавливает ввод, а не просто висит в истории чата.
- Поля ввода действительно существуют. Книга могла предлагать только ссылки.
- Не требуется предмет. Ничего не потерять, не выбросить и не продублировать.
- Он чисто закрывается и к нему нельзя вернуться прокруткой.
Единственное, что книги все еще делают лучше, — это чтение длинных текстов: тело диалога не лучшее место для трех страниц лора.
Стили путевых точек
Тот же инструмент охватывает путевые точки на панели локатора, которые представляют собой отдельный реестр датапаков, контролирующий цвет маркера и спрайт, отображаемый для отслеживаемого Игрока или позиции. Полезно для командных маркеров, где полоса босса была бы слишком навязчивой.
Создавайте диалоговые экраны с полями ввода и кнопками, а также настраивайте стили путевых точек в Dialog Input & Waypoint Style Builder.