Взаимодействия и навигация
Взаимодействие связывает клик по слоту с определённым поведением. Оно настраивается у предмета, в interactionList.
Добавление взаимодействия
У предмета раскладки добавьте запись в interactionList:
| Поле | Назначение |
|---|---|
type | Тип клика: LEFT_CLICK, RIGHT_CLICK, SHIFT_LEFT_CLICK, SHIFT_RIGHT_CLICK, MIDDLE_CLICK, DOUBLE_CLICK, от NUMBER_KEY_1 до NUMBER_KEY_9, DROP, DROP_ALL, SWAP_OFFHAND. |
commands | Команды, выполняемые от имени консоли. %player% заменяется именем игрока, плейсхолдеры PlaceholderAPI обрабатываются. |
triggers | Записи TypeWriter, которые нужно запустить для игрока. |
closeMenu | Закрывает меню после действия. |
executeReturn | Снова открывает предыдущее меню после действия. |
У самого предмета также есть triggers и modifiers. Они срабатывают при клике левой или правой кнопкой либо при совпадении какого-либо конкретного взаимодействия предмета. modifiers изменяют факты точно так же, как модификаторы действия.
Звук клика, заданный в audio.onClick, воспроизводится один раз за каждый клик, который что-то сделал.
Внутренние команды
Команда, начинающаяся с gui:, обрабатывается GUI:
| Команда | Действие |
|---|---|
gui:close | Закрыть меню. |
gui:back | Снова открыть предыдущее меню. |
gui:open <entry_id>, gui:action <entry_id> | Запустить другую запись, как правило другой Open GUI. |
gui:view <view_id> | Переключить представление, не закрывая окно. |
gui:page <delta> [layout_id] | Сменить страницу раскладки с пагинацией. |
gui:scroll <dx> <dy> [layout_id] | Прокрутить прокручиваемую раскладку. |
gui:refresh | Перерисовать меню. |
gui:sound <sound_key> | Воспроизвести звук по ключу, например minecraft:ui.button.click. |
Вам редко придётся вручную вводить gui:close и gui:back: достаточно включить closeMenu или executeReturn.
Диалог ввода
Если задать input у предмета, при клике по слоту откроется текстовый диалог. Диалог заменяет собой взаимодействия этого клика. Заполните title, placeholder, onInputCommands и onInputTriggers. В onInputCommands {input} заменяется введённым текстом, а %player% именем игрока. После подтверждения диалога меню перерисовывается.
В подсказке к полю упоминается %value%, но в коде заменяется {input}. Проверяйте то, что вводят игроки, прежде чем это попадёт в команду, количество или право.
Права
viewPermissionскрывает слот.clickPermissionоставляет слот видимым и убирает его взаимодействия, ввод и триггеры.criteriaдобавляет условие TypeWriter.
Используйте clickPermission, чтобы показать заблокированную кнопку с поясняющим описанием (lore), а viewPermission, чтобы её скрыть. Пустое значение ничего не ограничивает.
Кнопки, предоставляемые другими расширениями
Предмет с buttonType становится помеченной кнопкой. Shops и Quest Codex размещают такие маркеры; затем другое расширение заменяет взаимодействия на свои. Метка состоит из buttonPrefix, за которым следует buttonType (например, shop_button: и SHOP_ITEM). Если ни одно расширение не заявило права на метку, предмет сохраняет настроенные вами взаимодействия.
Задержки и живые меню
cooldownTicks блокирует тот же слот на указанное число тиков после клика. autoRefreshTicks у Open GUI перерисовывает названия и описания с их текущими плейсхолдерами каждые N тиков; для меню, которым не нужно обновляться, держите значение 20 или больше.
Если клик ничего не делает
Проверяйте в таком порядке: clickPermission, cooldownTicks, criteria, input, перехватывающий клик, затем префикс buttonType. Команда, которой нужен игрок в качестве отправителя, не сработает, поскольку команды выполняются от имени консоли.