DeluxeMenus
Плагин 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.