Перейти к содержимому

Правила

Автор меню

Правило - это проверка перед выполнением действий. Результат проверки определяет, какие действия будут выполнены.

У правил простой формат. Пример:

rules {
permission: "some.perm"
}

Правил можно указать сколько угодно, как у активаторов и действий. Каждое - с новой строки. Например:

rules {
permission: "some.perm"
group: "default"
money: 3000
}

Здесь проверяем у игрока право some.perm, группу default и баланс 3000. Дальше пойдут действия - но только если игрок проходит все три правила сразу.

ИмяТип данныхОписание
permissionСписок строкУ игрока есть право
worldStringИгрок в указанном мире
gamemodeStringИгровой режим игрока совпадает
groupСписок строкИгрок в группе LuckPerms
moneyNumber или ObjectУ игрока минимум N валюты. В объектной форме { amount, provider } можно указать конкретного провайдера экономики - см. Выбор провайдера.
levelNumberУ игрока минимум N уровней
xpNumberУ игрока минимум N опыта
healthNumberУ игрока минимум N HP
foodLevelNumberУ игрока минимум N сытости
chanceNumberСлучайная проверка с вероятностью N процентов
onlineNumberНа сервере минимум N игроков
playerIsOnlineStringКонкретный игрок онлайн
inventoryItemsСписок объектовУ игрока в инвентаре есть указанные предметы
heldItemObjectПредмет в основной руке совпадает
freeSlotNumberВ инвентаре есть свободный слот (или конкретный слот свободен)
freeSlotCountNumberВ инвентаре минимум N свободных слотов
existVarString or ObjectГлобальная переменная существует
existVarpStringПерсональная переменная существует
placedItemObjectВ drag-and-drop слоте лежит ожидаемый предмет
WorldGuard
regionСписок строкИгрок внутри региона WorldGuard
BungeeCord
bungeeOnlineObjectНа сервере BungeeCord достаточно игроков
bungeeIsOnlineStringСервер BungeeCord онлайн
Сложные правила
ifСписок объектовСравнить плейсхолдер с текстом или числом
jsStringВыполнить JavaScript-выражение и взять его результат
Специальные правила
andСписок объектовЛогическая обёртка AND
orСписок объектовЛогическая обёртка OR
oneofСписок объектовОстанавливается на первом совпавшем правиле
playerScopeObjectПерепроверить правила для другого игрока

Проверяет, что у игрока в инвентаре есть нужные предметы. Это список объектов, где каждый объект - один предмет. Формат предмета такой же, как везде в AM. Пример:

inventoryItems: [
{
material: CAKE
amount: 5
},
{
material: STONE
amount: 2
}
]

Можно задать и одним объектом. Пример:

inventoryItems {
material: CAKE
amount: 5
}

Если добавить slot, правило будет смотреть конкретный слот или диапазон слотов:

inventoryItems {
slot: 0
material: CAKE
amount: 5
}

Правило вернёт true, если в слоте 0 у игрока минимум 5 тортов. Слот можно задавать и в других форматах, например:

inventoryItems {
slot: "0-8"
material: CAKE
amount: 5
}

Тогда правило вернёт true, если в каждом из слотов 0, 1, 2, ..., 8 лежит минимум 5 тортов.

Правило для проверки предмета в руке.

heldItem {
material: CAKE
amount: 5
}

Проверка, есть ли переменная.

Для глобальных переменных:

existVar: "global_var_name"

Для персональных переменных:

existVarp: "personal_var_name"

У existVar остался устаревший формат - объект с именем переменной и (опционально) именем игрока-владельца.

existVar {
player: "Peter" // Указывается, только если переменная персональная. Опциональный параметр
name: "name" // Имя переменной. Обязательный параметр.
}
  • name - Имя переменной.

  • player - [Опционально] Указывается, если нужно проверить персональную переменную.

По возможности используй краткий формат existVar.

Проверка количества игроков на сервере BungeeCord. Пример:

bungeeOnline {
server: "lobby"
online: 20
}
  • server - Имя сервера BungeeCord.

  • online - Требуемое количество игроков.

Сравнивает данные - например, плейсхолдер из PAPI - с другими данными.

У правила if два формата: современный и устаревший. Бери современный, устаревший остался только ради совместимости со старыми меню.

По духу похож на js, но работает в 8-10 раз быстрее. Пример:

if: "%player_name% == Notch"

Сравниваем плейсхолдер со значением. Математики в современном if нет - только логика. Все логические операторы ниже.

ОператорПримерЗначениеПриоритет
>%player_level% > 5Больше3
<%player_level% < 8Меньше3
>=%player_level% >= 5Больше или равно3
<=%player_level% <= 8Меньше или равно3
==%player_level% == 9Равно2
!=%player_level% != 9Не равно2
===%player_name% === nOtChРавно без учёта регистра2
!==%player_name% !== nOtChНе равно без учёта регистра2
&&%player_level% > 5 && %player_name% == NotchИ1
||%player_level% > 5 || %player_name% == NotchИли0

В отличие от js, в if строки кавычками ('', "") оборачивать не надо. Доступны и круглые скобки () для группировки и повышения приоритета. Пример:

if: "(%player_lvl% == 5 || %player_lvl% == 10) && (%player_name% == Notch || %player_name% == Nanit)"

Выражение вернёт true, если у игрока уровень 5 или 10 И ник “Notch” или “Nanit”.

Если нужна математика или более сложные условия - бери js. Если хватает обычной логики - бери современный if ради скорости.

Пример:

if {
param: "%player_name%"
equals: [
"Notch",
"DeadMouse"
]
equalsIgnoreCase: [
"notch",
"deadmouse"
]
contains: [
"dead",
"tch"
]
less: 6
more: 2
}

Параметр param обязательный. Все остальные опциональны.

  • param - Сравниваемый параметр (%player_name% - плейсхолдер, который заменяется на имя игрока, открывшего меню).

  • equals - сравнить со списком строк, с учётом регистра.

  • equalsIgnoreCase - сравнить со списком строк, без учёта регистра.

  • contains - содержит ли параметр одну из подстрок.

  • less - меньше ли параметр указанного числа. Только для числовых параметров.

  • more - больше ли параметр указанного числа. Только для числовых параметров.

Плагин умеет выполнять JS-код. Код должен вернуть true или false; всё остальное плагин посчитает за false. По возможностям js шире, чем if, так что им можно его заменять - но интерпретация JS заметно медленнее.

В js работают плейсхолдеры - можно сравнивать и манипулировать ими через JS-синтаксис. Пример:

rules {
js: "'%player_name%'.length < 5"
}

Если правила нужно проверять не на том, кто открыл меню, а на ком-то ещё - есть обёртка playerScope. Пример для правил отображения предмета:

{
slot: 0
material: cake
rules {
playerScope {
name: "%player_name_placeholder%"
rules {
permission: "perm.name"
}
}
}
}

Правила внутри rules будут проверены на игроке, найденном по имени из поля name. Здесь предмет покажется только если у этого игрока (найденного по плейсхолдеру) есть право perm.name.