Плагин DeluxeMenus служит для создания всевозможных меню на сервере и обладает, наверное, самым мощным функционалом среди себе подобных, например таких, как Chest Commands и проч.
Вы сможете создавать неограниченное количество настраиваемых графических меню, открывающихся по заданной команде. Они могут отображать какую-то информацию (например статистику), либо выполнять набор персональных действий именно для того игрока, который открыл меню. Для этих целей в команде вызова меню используются дополнительные аргументы (например: /<ИМЯ МЕНЮ> <ИГРОК>
).
Меню могут быть несколько раз вложены друг в друга. То есть можно настроить одно, основное, таким образом, чтобы из него вызывалось несколько подменю. Например, это удобно сделать для мини-игр — в главном меню, по клику на один из предметов, происходит переход в подменю мини-игр. А из того уже можно вызвать любую мини-игру из имеющихся.
Команды и разрешения
Команды
Вместо /dm можно использовать /deluxemenus, /deluxemenu, /dmenu
/dm
— показывает информацию о плагине;/dm open <МЕНЮ>
— открывает заданное меню (требуется разрешение deluxemenus.open);/dm open <МЕНЮ> <ИГРОК>
— открывает заданное меню заданному игроку (требуется разрешение deluxemenus.open.others);/dm open <МЕНЮ> -p:<ИГРОК>
— открывает для вас заданное меню, но заполнители в нём будут обработаны, как у заданного игрока (требуется разрешение deluxemenus.placeholdersfor);/dm list
— показывает перечень загруженных меню (требуется разрешение deluxemenus.list);/dm execute <ИГРОК> <ДЕЙСТВИЕ>
— выполняет любое действие для игрока из доступных (игрок должен обладать статусом оператора);/dm reload
— перезагружает файлы плагина (требуется разрешение deluxemenus.reload);/dm reload <МЕНЮ>
— перезагружает заданное меню (требуется разрешение deluxemenus.reload).
Весь текст в командах между знаками «меньше» и «больше» ( <> ) является заполнителем или переменной. Заменяйте его на запрошенное значение, но уже без использования знаков «меньше» и «больше» ( <> ).
Разрешения
- deluxemenus.openrequirement.bypass — игнорирует все требования для открытия меню;
- deluxemenus.openrequirement.bypass.<МЕНЮ> — игнорирует все требования для открытия заданного меню;
- deluxemenus.placeholdersfor.exempt — запрещает другим игрокам использовать вас в команде
/dm open <МЕНЮ> -p:<ВЫ>
.
Некоторые типы требований (requirements):
type:
has money — проверка средств;type:
string equals — равенство строки;type:
string equals ignorecase — равенство строки без учёта регистра;type:
has permission — проверка права;type:
has item – проверка наличия предмета;type:
‘>=‘ — больше или равно;type:
‘<=‘ — меньше или равно;type:
‘=‘ — равно;type:
‘<‘ — меньше;type:
‘>‘ — больше;type:
javascript.
Требования не действуют для игроков со статусом оператора!
Возможные действия
[player] <КОМАНДА>
— выполнить команду от имени игрока;[console] <КОМАНДА>
— выполнить команду из консоли;[commandevent] <КОМАНДА>
— выполнить незарегистрированную команду от имени игрока;[message] <ТЕКСТ>
— отправить сообщение игроку. В тексте можно использовать как заполнители, так и коды цвета и формата;[broadcast] <ТЕКСТ>
— отправить сообщение всем, кто в данный момент находится в сети, и в консоль. Можно в текст вставлять заполнители, коды цвета и формата;[openguimenu] <ИМЯ МЕНЮ>
— открыть заданное меню из созданных в DeluxeMenus;[connect] <ИМЯ СЕРВЕРА>
— подключить игрока к заданному серверу на том же BungeeCord;[close]
закрыть текущее открытое меню;[json] <JSON-ТЕКСТ>
— отправить игроку сообщение в формате json. Имя или селектор игрока. Подготовить текст JSON удобно на сайте minecraftjson.com;[jsonbroadcast] <JSON-ТЕКСТ>
— отправить сообщение в формате json всем, кто в данный момент находится в сети. Подготовить текст JSON удобно на сайте minecraftjson.com;[refresh]
— обновить настройки текущего меню;[broadcastsound] <ИМЯ ЗВУКА> <ВЫСОТА> <ГРОМКОСТЬ>
— транслировать звук всем игрокам на сервере;[broadcastsoundworld] <ИМЯ ЗВУКА> <ВЫСОТА> <ГРОМКОСТЬ>
— транслируйте звук для всех игроков в текущем мире;[sound] <ИМЯ ЗВУКА> <ВЫСОТА> <ГРОМКОСТЬ>
— воспроизведите звук для заданного игрока;[takemoney] <СУММА>
— забрать у игрока заданную сумму денег. Для этого действия требуется установленный плагин Vault;[givemoney] <СУММА>
— передать игроку заданную сумму денег. Для этого действия требуется установленный плагин Vault;[takeexp] <ЧИСЛО>L
— взять у игрока заданное количество уровней опыта или очков. Чтобы задать уровни, добавьтеL
в конце, в противном случае удалите его;[giveexp] <ЧИСЛО>L
— передать игроку заданное количество уровней опыта или очков. Чтобы задать уровни, добавьтеL
в конце, в противном случае удалите его;[chat] <ТЕКСТ>
— отправить сообщение в чате от имени игрока, для которого выполнено это действие.
Тэги действий
<delay=<ЗАДЕРЖКА>>
— действие будет выполнено через указанное в тиках время (20 тиков = 1 секунда);<chance=<ШАНС>>
— задаётся шанс на выполнение действия (в процентах).
Эти тэги могут добавляться к любому действию. Например, '[message] <КАКОЙ-ТО ТЕКСТ><delay=20>'
или '[message] Шанс получить это сообщение составляет 25%<chance=25.0>'
.
Цвета
Для указания цвета RGB/Hex в DeluxeMenus на версиях 1.16+ используется формат: "& # aaFF00"
Заполнители
В DeluxeMenus есть один доступный заполнитель:%deluxemenus_meta_<КЛЮЧ>_<ТИП ДАННЫХ>_<ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ>%
- КЛЮЧ: ключ meta, который нужно проверить;
- ТИП ДАННЫХ: может быть
STRING
,BOOLEAN
,DOUBLE
,LONG
, илиINTEGER
;
Если данный ключ имеет другой тип данных, то произойдёт ошибка
- ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ: значение, возвращаемое, если ничего не найдено.
Примеры
Простое меню выбора одного сервера из двух, которое для одного из них отображает два разных состояния: когда сервер находится в сети и когда он отключен.
Чтобы меню работало нормально, необходимо загрузить плагины Pinger и Server (необязательно), используя:
/papi ecloud download Pinger
/papi ecloud download Server
/papi reload
В этом примере есть два сервера на одном BungeeCord: Ванильный и Игры. Поначалу мы находимся на сервере Игры.
Для подключения игрока к серверу Ванильный согласно настройке параметра left_click_commands:
,
по ЛКМ будут последовательно выполняться три действия:
[close]...
— закрыть меню;[message]...
— отправить сообщение о переходе на выбранный сервер;[connect]...
— подключить игрока к серверу.
Чтобы показать, сколько игроков в это время находится на сервере Ванильный, используется заполнитель %pinger_players_ <ip>: <port>%. Нужно помнить, что заполнители плагина Pinger имеют свой собственный интервал обновления. Чтобы его изменить, перейдите в config.yml плагина PlaceholderAPI и вставьте нужное значение в параметр check_interval:
(по умолчанию установлено 30 секунд).
Но что, если нужный сервер сейчас отключен? В этом случае будет использоваться второе состояние с более низким приоритетом, которое будет отображаться, если значение view_requirement:
первого состояния равно FALSE. И если сервер отключен, то будет показано второе состояние. Но нужно иметь в виду, что состояния не обновляются автоматически, если требования к просмотру изменились (с Offline на Online). Необходимо обновить меню действием [refresh]
, кликнув на нужный предмет.
Со вторым сервером всё проще. По клику просто отправляется сообщение о том, что мы уже находимся на сервере Игры. И дополнительно показывается текущее количество игроков на сервере с помощью заполнителя %server_online%.
Код меню:
# ---------------------------------------------------------------------- # # THIS MENU WAS MADE USING DELUXEMENUS v1.12.0 # # ---------------------------------------------------------------------- # # # # ПРИМЕЧАНИЕ: Код этого меню должен быть в отдельном yml-файле! # # Добавьте код ниже в config.yml плагина DeluxeMenus и # # перезагрузите плагин командой (/dm reload). # # # # gui_menus: # # serverselector: # # file: serverselector.yml # # # # После этого создайте файл serverselector.yml и вставьте в него # # уже код самого меню, который ниже. Перезагрузите плагин ещё раз! # # ---------------------------------------------------------------------- # menu_title: '&9Сервер' open_command: server size: 9 update_interval: 1 items: 'vanilla_server': material: GRASS slot: 2 priority: 1 update: true view_requirement: requirements: vanila_online: type: string equals ignorecase input: '%pinger_online_127.0.0.1:25565%' output: '&aOnline' display_name: '&7Ванильный' lore: - '' - '&7Онлайн: &a%pinger_players_127.0.0.1:25565%' - '&7Здесь: &bТолько ванильный!' - '' - '&fНажмите, чтобы присоединиться!' - '' left_click_commands: - '[close]' - '[message] &7Подключение к серверу &aВанильный&7...' - '[connect] vanilla' right_click_commands: - '[close]' - '[message] &7Подключение к серверу &aВанильный&7...' - '[connect] vanilla' 'vanilla_offline': material: BARRIER slot: 4 priority: 2 update: true display_name: '&7Ванильный' lore: - '' - '&cЭтот сервер сейчас отключен' - '&cПожалуйста, свяжитесь с администратором.' - '' - '&fНажмите, чтобы обновить!' - '' left_click_commands: - '[refresh]' right_click_commands: - '[refresh]' 'games_server': material: IRON_SWORD slot: 6 update: true display_name: '&9Игры' lore: - '' - '&7Онлайн: %server_online%' - '&7Здесь: &bТолько лучшие мини-игры!' - '' - '&fВы здесь!' - '' left_click_commands: - '[message] &cВы уже находитесь на этом сервере!' - '[close]' right_click_commands: - '[message] &cВы уже находитесь на этом сервере!' - '[close]'
Пока в этом супермаркете, как пример, можно купить только Гранит, но по аналогии товары можно добавлять и добавлять.
Код меню:
menu_title: '&6Супермаркет' open_command: shop open_commands: - '[message] Перед Вами витрина супермаркета' - '[sound] NOTE_PLING' open_requirement: requirements: permission: type: has permission permission: inventory.shop deny_commands: - '[message] У вас нет разрешения ,inventory.shop, чтобы открыть это меню' size: 54 items: 'SlotName': material: STONE data: 1 slot: 0 display_name: '&7Гранит' lore: - '&7Купите за: &a80 монет' - '&7Продайте за &c40 монет' left_click_commands: - '[console] eco take %player_name% 80' - '[console] give %player_name% stone:1 64' - '[message] &6&lDeluxe&eMenu &7»&f 64 гранита Ваши.' left_click_requirement: requirements: Money: type: has money amount: 80.0 deny_commands: - '[close]' - '[message] &6&lDeluxe&eMenu &7»&f У вас маловато средств для такой покупки.' right_click_commands: - '[console] eco give %player_name% 40' - '[console] clear %player_name% stone:1 64' - '[message] &6&lDeluxe&eMenu &7»&f Мы приобрели у Вас 64 гранита.' right_click_requirement: requirements: Item: type: string equals input: '%player_hasitem-mat:STONE-amt:64-data:1%' output: 'yes' deny_commands: - '[close]' - '[message] &6&lDeluxe&eMenu &7»&f У вас маловато гранита, чтобы им бездумно торговать.'
menu_title:
— название меню;open_command:
— это команда, которой будет открываться меню;open_commands:
— действия, выполняемые во время открытия меню;open_requirement:
— требования, выполнение которых позволит игроку открыть данное меню. В примере требованием является наличие разрешения inventory.shop, но можно указывать, что и сколько угодно.deny_commands:
— сообщение, которое будет показано, если требование не выполнено;
size:
— количество слотов в меню. В строке 9 слотов. Максимальный размер меню — 54;items:
— это начало фактического gui. Ниже указываются имена, типы и т. д.- ‘
SlotName':
— условное имя задействованного слота;material:
— тип материала предмета в слоте. Можно писать имя или id элемента;data:
— модификации предмета. В примере, у гранита идентификатор 1:1, поэтому в материале можно установить либо STONE, либо 1, а вdata:
пишем 1;slot:
— это номер слота, в который вы хотите, куда элемент станет. Для первого слота используйте 0, для второго используйте 1 и т. д до 53;Display_name:
— это имя элемента. Вы можете использовать цвет в отображаемом имени, потому что он будет наклонным, если вы этого не сделаете;lore:
— описание предмета. Здесь можно использовать несколько строк;left_click_commands:
— команды, которые будут выполняться при клике левой кнопкой мыши по слоту. В примере:- мы забираем 80 монет у кликнувшего на слот игрока;
- отдаем ему 64 гранита;
- и выводим сообщение, что покупка прошла успешно;
left_click_requirement:
— это требования, при соблюдении которого сработают команды при ЛКМ. В примере используется заполнитель Vault, чтобы проверить, есть ли у покупателя на балансе 80 монет или больше. Если монет не хватает, то меню закрывается и выводится сообщение, что средств недостаточно;right_click_commands:
— это команды, которые мы хотим выполнить, когда пользователь щёлкнет правой кнопкой мыши. В примере:- мы отдаём игроку 40 монет;
- затем мы забираем 64 гранита из его инвентаря;
- затем сообщаем об этом;
- ‘
right_click_requirement:
— проверка, есть ли у игрока 64 гранита для продажи. Это делается с помощью заполнителя%player_hasitem-mat:<ИМЯ МАТЕРИАЛА>-amt:<КОЛИЧЕСТВО>-data: <МОДИФИКАЦИЯ ПРЕДМЕТА>%
. Проверяется, равно ли это значение TRUE, и если нет, меню закрывается без действий и игроку выводится сообщение, что у него нет достаточного количества гранита для продажи.
Обратите внимание!
Для правильной работы плагина должен быть установлен PlaceHolderAPI.