Туториал LuckPerms, что это и с чем его едят

Часть первая. Быстрый старт.​
Содержание:
Поскольку плагин имеет свойство обновляться, а сидеть на старых версиях ни мне ни вам не хочется, я решил все инструкции разделить на разделы. Каждый раздел пишется для определённой версии плагина и игры, которые упоминаются в первых частях каждого из этих разделов.
  1. Первый раздел
    1. Часть первая. Быстрый старт.
    2. Часть вторая. Префиксы и суффиксы.
    3. Часть третья. Форматы хранения.
    4. Часть четвёртая. BungeeCord.
    5. Часть пятая. Мелкие, но важные детали.
  2. Второй раздел
    1. Часть первая. Локальные и файловые БД.

Приветствую!
Сегодня мы с вами будем разбирать плагин, который смог выполнить очень сложную задачу — обойти по всем параметрам привычный нам PermissionsEx. Да, это действительно так, LuckPerms технически и функционально выигрывает в любом бою с вышеупомянутым PEX.
Многие сейчас зададутся вопросом:

Дык а зачем он мне? У меня сервер уже долгое время стабильно использует PEX и мне нет резона менять его на что бы то ни было.

Действительно, вас никто, и уж тем более я, не заставляет переходить на LuckPerms. Но время идёт и последние сообщения от разработчика PEX не утешают:
Снимок экрана 2018-04-09 в 0.06.24.png
Сообщение о закрытии разработки, перевод репозитория в read-only и совет перейти на тот же LuckPerms ни о чём хорошем не говорят. Разработка PEX приостановлена на неопределённый срок, а это значит, что ни фиксов, ни обновлений на другие версии, ни поддержки от разработчика больше осуществляться не будет. А проблемы есть:
Снимок экрана 2018-04-09 в 0.13.44.png

Но и у LP есть свои недостатки. Пусть он и работает на всех свежих версиях, а сервера с forge для него могут стать проблемой. Thermos, Cauldron и KCauldron в их нынешнем состоянии (заброшенная разработка и версия 1.7.10) не будут работать с LuckPerms. Вообще. А вот с губкой проблем не будет.

И да, самое важное. LuckPerms теперь не поддерживает вообще ничего, что ниже 1.8.8. Очень важно это помнить и смотреть на версию. И обновляться своевременно.
В обновлении 4.2.58 была возвращена поддержка Minecraft 1.7.10. Не знаю, как это сказалось на работе с forge-совместимыми серверами, поживём — увидим.
Поддержки версий ниже 1.8.8 больше нет.

Разработчик некоторое время назад таки выпустил версию для старых версий. Называется она LuckPerms Legacy и достать её можно на официальном сайте.
Это было небольшое отступление, вернёмся к LuckPerms.


Для настройки и работы LP в этом руководстве использовались:
  • Minecraft 1.12.2
  • PaperSpigot (git-Paper-1389)
  • LuckPerms v4.1.25
  • Java 8 (версии ниже нам не подойдут)
Установка​

Если вы хотите перенести все уже настроенные права из, скажем, того же PEX, прошу в спойлер. Остальные могут его пропустить.
Миграция из PEX отличается от нормальной установки совсем немного. На свой сервер с PEX установите LP, загруженный по ссылке ниже. Но не спешите удалять PEX, после запуска сервера пропишите в чате/консоле команду "/lp migration PermissionsEx", после чего будет запущена процедура миграции. Это перенесёт все ваши настройки из PEX в LP. Здорово? Ещё бы. А теперь можно пройти мимо установки и проследовать к следующему пункту.

Установка довольно проста:
  1. Скачиваем LuckPerms с официальной страницы плагина на Spigot.
  2. Перемещаем загруженный оттуда файл в папку plugins своего сервера. Предварительно удостоверьтесь, что там нет других плагинов на права.
  3. (Пере)запускаем сервер.
Если в plugins появилась папка LuckPerms, значит всё прошло хорошо и плагин запустился.

Настройка плагина​

В папке LuckPerms нас интересует только файл config.yml, к остальному мы притрагиваться не будем. Поскольку BungeeCord мы не используем, настройка будет быстрой и не сложной, и часть параметров можно просто не трогать. Самые важные параметры я описал здесь, остальное лучше изучать самим на LuckPerms Wiki (англ.). В этом руководстве единственный пункт, который я изменю в конфиге, будет "apply-bukkit-default-permissions: false", подробнее про него по ссылке выше.

Настройка прав​

Самая интересная часть. Наверное, самым сложным будет создание групп. Поэтому сразу пишу, как это сделать:
Код:
/lp creategroup <название> — создать группу
/lp deletegroup <название> — удалить группу
Стандартная группа для всех — default. Очень желательно её не удалять, если есть желание её переименовать можно сменить видимое имя командой (потом поймёте зачем):
Код:
/lp group <группа> setdisplayname <имя> — устанавливает отображаемое имя для группы
У меня, в итоге, получилось 3 группы с названиями:
Код:
> lp creategroup admin
[01:04:56 INFO]: [LP] admin was successfully created.
> lp creategroup donate
[01:04:59 INFO]: [LP] donate was successfully created.
> lp group default setdisplayname "Обычные игроки"
[01:11:34 INFO]: [LP] Set display name to Обычные игроки for group default.
> lp group donate setdisplayname "Донат"
[01:11:53 INFO]: [LP] Set display name to Донат for group donate.
> lp group admin setdisplayname "Администраторы"
[01:12:07 INFO]: [LP] Set display name to Администраторы for group admin.

Всё, хватит медлить, переходим к самому интересному. Для настройки прав мы не будем использовать ни редакторы БД, ни текстовые редакторы. Нам понадобится только интернет, веб-браузер (надеюсь это не Internet Explorer) и запущенный сервер с LP на борту. Прописываем команду:
Код:
> lp editor groups
[01:15:49 INFO]: [LP] Preparing a new editor session. Please wait...
[01:15:52 INFO]: [LP] Click the link below to open the editor:
[01:15:52 INFO]: https://luckperms.github.io/editor/?*******
Если вы делаете это в игре — достаточно просто нажать в чате на ссылку https://luckperms.github.io/editor/?******* и она откроется в браузере. Из консоли её можно скопировать строку браузера. Открываем...
Снимок экрана 2018-04-09 в 1.18.54.png
Да, это и есть наша настройка прав. Вверху список наших групп, потом поля для добавления и список добавленных прав.
Не бойтесь вносить правки, они не применятся, пока вы сами не сохраните и не пропишете в игре/консоли необходимую команду. Здесь полная свобода действий.
Для администраторов у нас доступны все права, для донатеров добавим право /say и /me, а обычным юзерам и так хорошо. Хотя лучше будет им запретить все доступные права, а потом добавлять необходимые.
Работают права здесь таким же образом, как и в PEX (кстати, * даёт все права, никаких кавычек не надо). В поле Permission пишем необходимое право и нажимаем справа "+". Всё. Некоторые права LP будет распознавать сам и подсказывать при вводе:
Снимок экрана 2018-04-09 в 1.31.53.png
С добавлением прав всё просто, а как запрещать?
Очень просто. Достаточно добавить право, которое надо запретить, и нажать в его строке на зелёное слово "true", которое сразу же изменится на "false", обозначая запрет.
В результате должно получиться так:
Снимок экрана 2018-04-09 в 1.33.29.png
Снимок экрана 2018-04-09 в 1.33.31.png
Снимок экрана 2018-04-09 в 1.33.33.png
Выглядит замечательно! Но мы совсем забыли про наследование групп. Помните inheritance из пекса? Так вот, здесь это делается тоже добавлением прав для группы. Надеюсь все заметили право displayname с названием группы. Так вот, здесь все параметры решаются через такие же права, как и для игроков. Только не для игроков, а для групп, и не права, а параметры.
Чтобы добавить наследование для группы достаточно будет добавить ей право:
Код:
group.<название наследуемой группы>
В моём случае это будет group.default:
Снимок экрана 2018-04-09 в 1.42.52.png

Всё, с правами мы закончили, давайте сохраним наши изменения. Справа вверху, около стрелок, нажимаем на значок дискеты и появляется сообщение:
Снимок экрана 2018-04-09 в 1.45.38.png
На белом фоне появилась команда (само собой, у вас она будет отличаться), которую необходимо выполнить на сервере, чтобы применить наши изменения. Она сама скопируется, если на неё нажать. Переходим на сервер и выполняем:
Код:
> lp applyedits **********
[01:47:38 INFO]: [LP] Web editor data was applied to admin (Администраторы) successfully.
[01:47:38 INFO]: [LP] (1 addition and 0 deletions)
[01:47:38 INFO]: +  * (true)
[01:47:38 INFO]: [LP] Web editor data was applied to default (Обычные игроки) successfully.
[01:47:38 INFO]: [LP] (1 addition and 0 deletions)
[01:47:38 INFO]: +  * (false)
[01:47:38 INFO]: [LP] Web editor data was applied to donate (Донат) successfully.
[01:47:38 INFO]: [LP] (3 additions and 0 deletions)
[01:47:38 INFO]: +  minecraft.command.me (true)
[01:47:38 INFO]: +  minecraft.command.say (true)
[01:47:38 INFO]: +  group.default (true)
Как видим, все наши изменения применились и теперь права на сервере регулируются по заданным параметрам.
Но у нас осталась проблема. Группа default убирает все права игрока, а группа admin их все обратно добавляет. Почему это проблема? Дело в том, что в LP все группы друг для друга одинаковы, пока не обозначено наследование в группе остаётся одинаковый приоритет для запрета и разрешения. Но не беда, каждый раз лезть в редактор мы не будем. Для наследования также есть команды:
Код:
/lp group <группа> parent add <группа-1> — добавить группе наследование прав из группы-1
/lp group <группа> parent remove <группа-1> — убрать наследование группы от группы-1.
Командой у себя пропишу наследование от donate к admin:
Код:
/lp group admin parent add donate

Добавление игрока в группу​

Здесь всё просто, достаточно будет ввести команду:
Код:
/lp user <игрок> parent add <группа> — добавить игроку группу
/lp user <игрок> parent remove <группа> — удалить игроку группу
/lp user <игрок> parent set <группа> — установить игроку группу и удалить все остальные

На этом всё. Естественно, охватить весь объём LP в одном посте трудно, это самые самые основы, мы с вами даже префиксы/суффиксы не разбирали. Поговорим о них в следующий раз.
А с вами был InterWall. До встречи!
 
Последнее редактирование:
Можно дать возможность давать конкретно одну группу и прикрутить скрипт с бд, который будет сохранять отметки об использовании команды. Тогда можно настроить макс. количество отметок на игрока.
Если только через mycommand с правом на команду, которая будет выполнятся от имени консоли.
 
А как сделать префикс отделно взятому игроку?
 
/lp user <Player> parent addtemp <Время> <Группа>

Писал по памяти, <Время> и <Группа> мог поменять местами.
Спасибо помог, у меня вышел вот такой формат.
/lp user <Player> parent addtemp <Группа> <Время>
время в формате 0d0h45m, выдаст права на 0 дней 0 часов 45 минут.

Единственно я не понял как выдать предмет или стак из консоли игроку.
 
Последнее редактирование:
Есть нормальный способ редактирования? Сайт либо мне не привычен, либо реально сделан через одно место.
И судя по надписям в консоли при запуске, создатель любит повыеживаеться)
 
Есть нормальный способ редактирования? Сайт либо мне не привычен, либо реально сделан через одно место.
И судя по надписям в консоли при запуске, создатель любит повыеживаеться)
lp editor group
lp group [name] permission set [permission]

или самый легкий вариант:
lp export [filename]
после - удаляете всю базу данных LuckPerm
Редактируете экспортированный файл, который находится в папке плагина.
после - lp import [filename]
-----------
Пример экспорта:
PHP:
# LuckPerms Export File
# Generated by Aero at 2018-07-29 10:30:34 MSK

# Create groups
/lp creategroup admin1
/lp creategroup admin2
/lp creategroup donat1
/lp creategroup donat2
/lp creategroup donat3
/lp creategroup donat4
/lp creategroup donat5
/lp creategroup donat6
/lp creategroup mod1
/lp creategroup mod2
/lp creategroup mod3

# Export group: admin1
/lp group admin1 permission set * true
/lp group admin1 meta addprefix 90 Администратор

# Export group: admin2
/lp group admin2 permission set * true
/lp group admin2 meta addprefix 100 Администратор

# Export group: default
/lp group default meta addprefix 0 Игрок
/lp group default permission set randomtp.basic true
/lp group default permission set randomtp.gui true
/lp group default permission set randomtp.use.distance1 true
/lp group default permission set randomtp.use.distance2 true
/lp group default permission set randomtp.use.distance3 true
/lp group default permission set skinsrestorer.playercmds true
/lp group default permission set worldedit.selection.hpos true
/lp group default permission set worldedit.selection.pos true
/lp group default permission set worldedit.wand true
/lp group default permission set worldedit.wand.toggle true
/lp group default permission set worldguard.region.claim true
/lp group default permission set worldguard.region.list.own true

# Export group: donat1
/lp group donat1 permission set essentials.kits.VIP true
/lp group donat1 permission set essentials.msg.color true
/lp group donat1 permission set essentials.msg.format true
/lp group donat1 permission set essentials.msg.url true
/lp group donat1 parent add default
/lp group donat1 meta addprefix 10 VIP
/lp group donat1 permission set worldedit.navigation.unstuck true

# Export group: donat2
/lp group donat2 permission set essentials.chat.color true
/lp group donat2 permission set essentials.chat.format true
/lp group donat2 permission set essentials.kits.VIP+ true
/lp group donat2 parent add donat1
/lp group donat2 meta addprefix 11 VIP+

# Export group: donat3
/lp group donat3 parent add donat2
/lp group donat3 meta addprefix 12 Premium
/lp group donat3 permission set worldedit.extinguish true

# Export group: donat4
/lp group donat4 parent add donat3
/lp group donat4 meta addprefix 13 Platinum

# Export group: donat5
/lp group donat5 parent add donat4
/lp group donat5 meta addprefix 14 Luxury
/lp group donat5 permission set worldedit.navigation.thru.command true
/lp group donat5 permission set worldedit.navigation.up true
/lp group donat5 permission set worldedit.selection.chunk true

# Export group: donat6
/lp group donat6 permission set essentials.kits.Illuminate true
/lp group donat6 parent add donat5
/lp group donat6 meta addprefix 15 Illuminate

# Export group: mod1
/lp group mod1 parent add default
/lp group mod1 meta addprefix 60 Хелпер
/lp group mod1 permission set worldedit.extinguish true

# Export group: mod2
/lp group mod2 permission set essentials.ban true
/lp group mod2 permission set essentials.ban.offline true
/lp group mod2 permission set essentials.kill true
/lp group mod2 permission set essentials.mute.offline true
/lp group mod2 permission set essentials.seen.extra true
/lp group mod2 permission set essentials.seen.ipsearch true
/lp group mod2 permission set essentials.tempban true
/lp group mod2 permission set essentials.tempban.offline true
/lp group mod2 permission set essentials.tpo true
/lp group mod2 permission set essentials.tpohere true
/lp group mod2 permission set essentials.vanish.interact true
/lp group mod2 parent add mod1
/lp group mod2 meta addprefix 70 Модератор

# Export group: mod3
/lp group mod3 permission set coreprotect.inspect true
/lp group mod3 parent add mod2
/lp group mod3 meta addprefix 80 Модератор



# Export users
Список разрешений у меня в профиле
http://rubukkit.org/members/akame.105581/
 
Есть нормальный способ редактирования? Сайт либо мне не привычен, либо реально сделан через одно место.
И судя по надписям в консоли при запуске, создатель любит повыеживаеться)
Очень предвзятое отношение, сейчас каждый третий такие сообщения в свой плагин кидает. К тому же можно изменить и убрать эти сообщения.
Редактировать как обычно мы это делали в PEX можно, но я крайне не рекомендую. Уж лучше сайтом или командами.
 
Очень предвзятое отношение, сейчас каждый третий такие сообщения в свой плагин кидает. К тому же можно изменить и убрать эти сообщения.
Редактировать как обычно мы это делали в PEX можно, но я крайне не рекомендую. Уж лучше сайтом или командами.
Покажите хоть один глобальный плагин с такими яркими и огромными строчками на всю консоль.
lp editor group
lp group [name] permission set [permission]

или самый легкий вариант:
lp export [filename]
после - удаляете всю базу данных LuckPerm
Редактируете экспортированный файл, который находится в папке плагина.
после - lp import [filename]
-----------
Пример экспорта:
PHP:
# LuckPerms Export File
# Generated by Aero at 2018-07-29 10:30:34 MSK

# Create groups
/lp creategroup admin1
/lp creategroup admin2
/lp creategroup donat1
/lp creategroup donat2
/lp creategroup donat3
/lp creategroup donat4
/lp creategroup donat5
/lp creategroup donat6
/lp creategroup mod1
/lp creategroup mod2
/lp creategroup mod3

# Export group: admin1
/lp group admin1 permission set * true
/lp group admin1 meta addprefix 90 Администратор

# Export group: admin2
/lp group admin2 permission set * true
/lp group admin2 meta addprefix 100 Администратор

# Export group: default
/lp group default meta addprefix 0 Игрок
/lp group default permission set randomtp.basic true
/lp group default permission set randomtp.gui true
/lp group default permission set randomtp.use.distance1 true
/lp group default permission set randomtp.use.distance2 true
/lp group default permission set randomtp.use.distance3 true
/lp group default permission set skinsrestorer.playercmds true
/lp group default permission set worldedit.selection.hpos true
/lp group default permission set worldedit.selection.pos true
/lp group default permission set worldedit.wand true
/lp group default permission set worldedit.wand.toggle true
/lp group default permission set worldguard.region.claim true
/lp group default permission set worldguard.region.list.own true

# Export group: donat1
/lp group donat1 permission set essentials.kits.VIP true
/lp group donat1 permission set essentials.msg.color true
/lp group donat1 permission set essentials.msg.format true
/lp group donat1 permission set essentials.msg.url true
/lp group donat1 parent add default
/lp group donat1 meta addprefix 10 VIP
/lp group donat1 permission set worldedit.navigation.unstuck true

# Export group: donat2
/lp group donat2 permission set essentials.chat.color true
/lp group donat2 permission set essentials.chat.format true
/lp group donat2 permission set essentials.kits.VIP+ true
/lp group donat2 parent add donat1
/lp group donat2 meta addprefix 11 VIP+

# Export group: donat3
/lp group donat3 parent add donat2
/lp group donat3 meta addprefix 12 Premium
/lp group donat3 permission set worldedit.extinguish true

# Export group: donat4
/lp group donat4 parent add donat3
/lp group donat4 meta addprefix 13 Platinum

# Export group: donat5
/lp group donat5 parent add donat4
/lp group donat5 meta addprefix 14 Luxury
/lp group donat5 permission set worldedit.navigation.thru.command true
/lp group donat5 permission set worldedit.navigation.up true
/lp group donat5 permission set worldedit.selection.chunk true

# Export group: donat6
/lp group donat6 permission set essentials.kits.Illuminate true
/lp group donat6 parent add donat5
/lp group donat6 meta addprefix 15 Illuminate

# Export group: mod1
/lp group mod1 parent add default
/lp group mod1 meta addprefix 60 Хелпер
/lp group mod1 permission set worldedit.extinguish true

# Export group: mod2
/lp group mod2 permission set essentials.ban true
/lp group mod2 permission set essentials.ban.offline true
/lp group mod2 permission set essentials.kill true
/lp group mod2 permission set essentials.mute.offline true
/lp group mod2 permission set essentials.seen.extra true
/lp group mod2 permission set essentials.seen.ipsearch true
/lp group mod2 permission set essentials.tempban true
/lp group mod2 permission set essentials.tempban.offline true
/lp group mod2 permission set essentials.tpo true
/lp group mod2 permission set essentials.tpohere true
/lp group mod2 permission set essentials.vanish.interact true
/lp group mod2 parent add mod1
/lp group mod2 meta addprefix 70 Модератор

# Export group: mod3
/lp group mod3 permission set coreprotect.inspect true
/lp group mod3 parent add mod2
/lp group mod3 meta addprefix 80 Модератор



# Export users
Список разрешений у меня в профиле
http://rubukkit.org/members/akame.105581/
Уже лучше, но все равно что-то не то...)
 
Покажите хоть один глобальный плагин с такими яркими и огромными строчками на всю консоль
RedProtect? Все плагины от Ission? Впрочем ладно, по мне плагин должен работать, а что он пишет в консоли при запуске это как-то пофиг, главное что не ошибку.
А вообще успокойся, ощущение будто ты специально хочешь придраться к чему-то.
 
RedProtect? Все плагины от Ission? Впрочем ладно, по мне плагин должен работать, а что он пишет в консоли при запуске это как-то пофиг, главное что не ошибку.
А вообще успокойся, ощущение будто ты специально хочешь придраться к чему-то.
Никогда не ставил эти плагины. Я не придираюсь, просто люблю когда все сделано идеально))
И к способу с экспортом вроде привыкаю, но все равно как-то непривычно писать не просто права, а еще и команды приписывать.
 
Никогда не ставил эти плагины. Я не придираюсь, просто люблю когда все сделано идеально))
И к способу с экспортом вроде привыкаю, но все равно как-то непривычно писать не просто права, а еще и команды приписывать.
Если к веб-редактору совсем не получается привыкнуть — можешь перейти на метод хранения в YAML, как было в PEX. Делать этого я не советую, но раз уж так...
http://rubukkit.org/posts/1533792
По инструкции выбирай storage-method: yaml. Выглядеть это будет примерно так:
Код:
uuid: c1d60c50-70b5-4722-8057-87767557e50d
name: Luck
primary-group: default
permissions:
- test.permission:
    value: true
    server: factions
- negated.permission.example:
    value: false
- special.test.perm
- special.test.permission
parents:
- default
prefixes:
- '&c[Admin] ':
    priority: 10
meta:
- homes:
    value: '10'
Подробнее тут: https://github.com/lucko/LuckPerms/wiki/Storage-types
 
Определись что ты вообще хочешь от плагина.
 
Привет, такой вопрос:
Если я настрою права для всех групп, укажу для каждого права свой сервер. Выдам например на Выживание випа с разными правами на всех серверах, то везде данный игрок будет иметь права, обозначенные для группы вип?
Все к бд
Не совсем понял, но если выдать группу только на один сервер, то вероятно, что права на другие сервера распространяться не будут, даже если они для этих других серверов предназначены. Но это лучше проверить самому.
 
Именно, выдам группу на одном,но будет ли у него эта же группа на другом? Сложно умничать в 4 часа утра
В конфиге плагина есть строчка 'server:', там изначально global стоит. Т.е. при выдаче группы обычным способом: '/lp user <игрок> parent add <группа>', — она будет выдана на всех серверах, если они подключены к одной базе данных. При желании можно изменить идентификатор сервера на, например, 'server: builds'. Тогда при выдаче группы в таком формате: '/lp user <игрок> parent add <группа> server=builds', — она будет выдана только для серверов с идентификатором 'builds'. Надеюсь, это поможет.
P.S. И да, при выдаче группы обычным способом она будет распостраняться и на сервера со своим идентификатором. Т.е. если прописать просто '/lp user <игрок> parent add <группа>', то это будет действовать и на сервера 'builds' тоже.
 
То есть теперь просто нужно пометить прав у группы для разных сервером своим индфикатором?
Не совсем понял вопрос, но да. У каждого сервера выставьте в config.yml нужный идентификатор ('server: survival', 'server: hardcore' и в таком духе). Потом при выполнении команды (или с панели /lp editor) указываете нужный сервер при помощи добавления 'server=идентификатор' в конце, как показано в примере выше (или в нужном поле в панели).
 
я про это)
RctlLOZXQAk.jpg
'server:' находится в config.yml:
Код:
# The name of the server, used for server specific permissions.
#
# - When set to "global" this setting is effectively ignored.
# - In all other cases, the value here is added to all players in a "server" context.
# - See: https://github.com/lucko/LuckPerms/wiki/Context
server: global
Если честно, это сообщение меня лишь больше запутало. Вам нужно настроить права под разные сервера для одной группы в одном файле? Если так, Я не использую YAML для хранения прав, поэтому не могу подсказать точно. Выполните команду '/lp group admin permission set random.permission.test true server=survival', а затем посмотрите, что оно прописало в файл с правами.
 
Всё, понял.
Смотри, вот у тебя группа admin с правом gadget.particles.* для сервера survival. Если ты выдашь эту группу только для сервера minigames, это право для него работать не будет вообще, даже на survival. Если на всех — это право будет работать только на survival, а остальные на всех.
 
Назад
Верх Низ