DeluxeMenus: как сделать меню на сервере

DeluxeMenus от HelpChat делает GUI-меню из сундука: кнопки выполняют команды, показывают статистику через PlaceholderAPI и прячутся от игроков без нужных прав. Меню открываются своей командой вроде /kits, число меню не ограничено. Плагин бесплатный, из обязательного нужен только PlaceholderAPI.

Установка и где лежат меню

  1. Поставьте PlaceholderAPI: это единственная обязательная зависимость.
  2. Скачайте DeluxeMenus со SpigotMC или Modrinth, положите jar в plugins и перезапустите сервер.
  3. Меню можно описать прямо в config.yml, но удобнее отдельным файлом на каждое меню в папке plugins/DeluxeMenus/gui_menus.
  4. Если в меню проверяются права (has permission) или деньги, нужен Vault.

Отдельный файл подключается в config.yml так, затем /dm reload:

gui_menus:
  kits:
    file: kits.yml

Как сделать меню: рабочий пример

Пример на основе официального kits.yml из вики HelpChat, сокращённый. Меню открывается командой /kit или /kits, кнопка в центре выдаёт кит Tools. Для примера нужны EssentialsX и расширение Essentials для PlaceholderAPI.

menu_title: '&8Kits Menu'
open_command:
- kit
- kits
size: 27
register_command: true
update_interval: 1
open_requirement:
  requirements:
    permission:
      type: has permission
      permission: essentials.kit
      deny_commands:
      - '[message] &7This menu requires the &cessentials.kit &7permission.'
      - '[sound] BLOCK_NOTE_BLOCK_BASS'
items:
  'kit_tools_ready':
    material: LIME_CONCRETE
    slot: 13
    priority: 1
    view_requirement:
      requirements:
        permission:
          type: has permission
          permission: essentials.kits.tools
        available:
          type: string equals ignorecase
          input: '%essentials_kit_is_available_tools%'
          output: 'yes'
    display_name: ' &c&lTools '
    lore:
    - ''
    - '&8• &7Status: &aAvailable'
    - '&8» &a&nClick to Claim'
    click_commands:
    - '[player] essentials:kit tools'
    - '[sound] ENTITY_ITEM_PICKUP'
    - '[refresh]'
  'locked':
    material: RED_CONCRETE
    slot: 13
    priority: 3
    display_name: ' &c&lTools '
    lore:
    - ''
    - '&8• &bStatus: &cLocked'
    click_commands:
    - '[close]'
    - '[sound] BLOCK_NOTE_BLOCK_BASS'
  'filler_glass':
    material: BLACK_STAINED_GLASS_PANE
    slots: [0-12,14-26]
    display_name: '&l'

В оригинале есть ещё оранжевая кнопка с priority: 2 для кита на перезарядке, её можно вернуть по той же схеме.

Как это работает: open_command, view_requirement, priority

  • open_command: одно слово или список слов, по которым меню открывается. Если строку удалить, команды у меню не будет.
  • register_command: true регистрирует команду на сервере. Опцию добавляют вручную, после неё нужен перезапуск сервера, /dm reload не хватит.
  • open_requirement: условия на открытие меню. deny_commands выполняются, если условие не выполнено.
  • view_requirement: условия, при которых игрок видит предмет. Все условия в списке должны выполниться, если не задан minimum_requirements.
  • priority: несколько предметов в одном слоте. Проверка идёт от наивысшего приоритета, 0 самый высокий. Показывается первый предмет, чьи условия выполнены, поэтому запасной вариант ставят с самым большим числом и без условий.
  • slots: [0-12,14-26] заполняет диапазоны слотов одним предметом. Слоты считаются с 0.
  • update_interval задаёт в секундах, как часто обновлять плейсхолдеры у предметов с update: true.

Что можно повесить на кнопку

Действия пишутся в click_commands, left_click_commands, right_click_commands, а также в open_commands и deny_commands.

ДействиеЧто делает
[player] <команда>команда от имени игрока
[console] <команда>команда от консоли
[message] <текст>сообщение игроку
[broadcast] <текст>сообщение всем
[openguimenu] <меню>открыть другое меню DeluxeMenus
[connect] <сервер>перекинуть на сервер в сети BungeeCord
[close]закрыть меню
[refresh]перерисовать предметы
[sound] <звук>проиграть звук
[takemoney] <сумма>снять деньги, нужен Vault

Задержка и шанс дописываются в конец действия: '[message] example<delay=20>' выполнится через 20 тиков, <chance=50> срабатывает в половине случаев.

Почему меню или кнопка не работает

  • Команда из open_command не открывает меню: проверьте register_command: true и перезапустите сервер.
  • Условие has permission всегда ложно: не установлен Vault.
  • Click-требование не срабатывает: без click_commands оно не работает, одних success_commands мало.
  • Плейсхолдер виден как текст: скачайте расширение PlaceholderAPI для нужного плагина.
  • Ошибка в меню после правки: /dm dump <меню> соберёт меню, версию сервера и Java в одну ссылку для разбора.

Команды и права DeluxeMenus

КомандаЧто делаетПраво
/dm open <меню>открыть меню себе (админская команда)deluxemenus.open
/dm open <меню> <ник>открыть меню другому игрокуdeluxemenus.open.others
/dm open <меню> -p:<ник>открыть меню с плейсхолдерами другого игрокаdeluxemenus.placeholdersfor
/dm list [страница|all]список загруженных менюdeluxemenus.list
/dm reloadперечитать все файлы плагинаdeluxemenus.reload
/dm reload <меню>перечитать одно менюdeluxemenus.reload
/dm dump <меню>выгрузить меню и данные сервера для отладкиdeluxemenus.admin
/dm dump configвыгрузить config.yml для отладкиdeluxemenus.admin
/dm execute <ник> <действие>выполнить любое действие за игрока, только для OP—
/dm meta <ник> show <ключ> <тип>посмотреть мета-значение игрока, только для OP—
/dm meta <ник> set <ключ> <тип> <значение>записать мета-значение игроку, только для OP—
/dmинформация о плагине—

Частые вопросы про DeluxeMenus

Как сделать меню в DeluxeMenus?
Создайте файл в папке gui_menus, подключите его в config.yml в разделе gui_menus и выполните /dm reload. В файле задайте menu_title, open_command, size и список items с material и slot.
Как открыть меню своей командой, например /menu?
Впишите слово в open_command и добавьте register_command: true, затем перезапустите сервер. Команда /dm open предназначена для админов, игрокам её не выдают.
Как сделать кнопку, которая выполняет команду?
У предмета добавьте click_commands с действием [player] для команды от игрока или [console] для команды от сервера. Например: '[player] spawn'.
Как показать кнопку только игрокам с правом?
Добавьте предмету view_requirement с типом has permission. Для него нужен Vault. Запасной предмет в тот же слот ставится с большим числом priority.
Почему в меню не обновляются плейсхолдеры?
У предмета должно быть update: true, а в меню update_interval в секундах. Проверьте, что установлено расширение PlaceholderAPI для нужного плагина.
Какая версия DeluxeMenus нужна для 1.21?
По Modrinth последняя версия поддерживает 1.16–1.21.x и 26.1–26.3. Кроме неё обязательно нужен PlaceholderAPI.

Не хочется настраивать самому

DeluxeMenus уже стоит и настроен в готовых сборках Cloud Delight: права, меню, защита и донат собраны в одно целое. Скачали, запустили, играете.