Туториал 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. До встречи!
 
Последнее редактирование:
@InterWall
Появились несколько вопросов/проблем:
1. Группа default является абсолютно дефолтная? Это значит, любой новый игрок, всегда будет default и никак это не изменить на другую группу? (скажем на player, если я сделал миграцию с пекса)
2. Как бы это не было странно, но я не нашел команду на перезагрузку конфигурации прав. Учитывая как часто я этим способом редактирую права, мне абсолютно не удобно рестартить сервер ради этого. Я в курсе что есть FileWatcher, но я его выключил, посчитав что это простая трата ресурсов. (все же ручками рестартить плагин как по мне лучше)
p.s есть команда /lp reloadconfig но она судя по названию для рестарта конфига, а не прав..
3. Не нашел нигде информации о автосохранении всех хранилищ. Оно вообще существует? Или он сразу же при любых изменениях, сохраняет? Это просто как по мне не хило может нагрузить диск, учитывая сколько у меня групп (более 20) и как часто еще могут меняться префиксы для отдельных игроков (плагин на префиксы).

А так то да, туториалы полезны для только что перешедших с PermissionsEx на LuckPerms.
 
@InterWall
Появились несколько вопросов/проблем:
1. Группа default является абсолютно дефолтная? Это значит, любой новый игрок, всегда будет default и никак это не изменить на другую группу? (скажем на player, если я сделал миграцию с пекса)
2. Как бы это не было странно, но я не нашел команду на перезагрузку конфигурации прав. Учитывая как часто я этим способом редактирую права, мне абсолютно не удобно рестартить сервер ради этого. Я в курсе что есть FileWatcher, но я его выключил, посчитав что это простая трата ресурсов. (все же ручками рестартить плагин как по мне лучше)
p.s есть команда /lp reloadconfig но она судя по названию для рестарта конфига, а не прав..
3. Не нашел нигде информации о автосохранении всех хранилищ. Оно вообще существует? Или он сразу же при любых изменениях, сохраняет? Это просто как по мне не хило может нагрузить диск, учитывая сколько у меня групп (более 20) и как часто еще могут меняться префиксы для отдельных игроков (плагин на префиксы).

А так то да, туториалы полезны для только что перешедших с PermissionsEx на LuckPerms.
https://github.com/lucko/LuckPerms/wiki
 
Все там перерыл, не нашел ничего про команду рестарта, ее просто нет. Это пока что единственный минус.
Автосохранение так же.
Ну что написано, то и есть. И вангую тебе нужен reloadconfig. То же самое делает что и в пексе.
 
Полный рестарт сервера там только в одном случае нужен. Смена базы данных.
 
Полный рестарт сервера там только в одном случае нужен. Смена базы данных.
Проверял же недавно. Использовал yaml тип.

Ничего не перезагружает, кроме FileWatcher который я позже офнул (он мне не давал настроить дефолтную группу)
 
Проверял же недавно. Использовал yaml тип.

Ничего не перезагружает, кроме FileWatcher который я позже офнул (он мне не давал настроить дефолтную группу)
Ну хз, иди тогда к автору плагина. Он лучше объяснит. На счет дефольтной группы, не имеет значение как она называется. Игроки видят префикс независимо от ее названия.
 
Ну хз, иди тогда к автору плагина. Он лучше объяснит.
Обязательно пойду)
Просто объявить о косяках стоит, а то одни хвалебные отзывы. Вот мне лично не нравится перезагрузка прав только после рестарта самого сервера. В остальном же, придется переучиваться, но это пустяки.
 
Вот мне лично не нравится перезагрузка прав только после рестарта самого сервера.
Не должно так быть. Он должен синхронизироватся с базой. С yml и H2 может такое и не должно работать, ибо там нет мультисерверности, смысла нет.
 
Ну через веб интерфейс у меня обновляло сразу и при H2 типе базы.
 
@MurlikMurlik
1. Любая группа может быть дефолтной, это параметр из конфига.
(!) А, нет. Упустил это обновление, теперь уже нельзя настроить.
2. Есть /lp sync, она перезагружает права.
3. Про автосохранение не уверен, использую MySQL, оно сохраняет после каждого действия.
 
Последнее редактирование:
@MurlikMurlik
1. Любая группа может быть дефолтной, это параметр из конфига.
2. Есть /lp sync, она перезагружает права.
3. Про автосохранение не уверен, использую MySQL, оно сохраняет после каждого действия.
Не нашел информацию о том как назначить абсолютно дефольные права на например player а не на default. (читал еще на вики, автор писал что default есть default и все.., или я чего то не понял)

Насчет команды спасибо), думал она будет работать в случае с бд типа mysql, когда нужна синхронизация между серверами.
 
1. Группа default является абсолютно дефолтная? Это значит, любой новый игрок, всегда будет default и никак это не изменить на другую группу? (скажем на player, если я сделал миграцию с пекса)
  1. Да, именно так. Могу только посоветовать изменить в самом пексе (хотя не сомневаюсь, что миграция учитывает параметр пекса default: true). В LP же дефолтная группа только default и никак иначе.
  2. Спасибо что сообщил, я поправлю пункт с файловыми БД. Это команда /lp sync
  3. Да, он пишет в файл сразу. Не уверен насчёт нагрузки, но мне кажется, что для >20 групп и >100 игроков будет разумнее использовать удалённую БД. Использовать YAML или другие файловые это крайне несерьёзный подход для таких серверов.
 
Могу только посоветовать изменить в самом пексе (хотя не сомневаюсь, что миграция учитывает параметр пекса default: true).
С пекса дефолтная группа у меня player. При миграции, игроки без групп получили default. Хотя стояла мета default:true у player. При этом, создавался почти пустой файл default в котором было только название группы.
Вообще это не проблема, просто у меня BungeeTabListPlus показывает в табе разным группам разные префиксы, и как раз группа была player, но так как теперь игрок это default, придется править и это там, да и еще наследования в некоторых группах. (просто не хотелось лишний раз что то менять, если все можно сделать в одном месте, но раз все другое, то и менять придется)
 
С пекса дефолтная группа у меня player. При миграции, игроки без групп получили default. Хотя стояла мета default:true у player. При этом, создавался почти пустой файл default в котором было только название группы.
Вообще это не проблема, просто у меня BungeeTabListPlus показывает в табе разным группам разные префиксы, и как раз группа была player, но так как теперь игрок это default, придется править и это там, да и еще наследования в некоторых группах. (просто не хотелось лишний раз что то менять, если все можно сделать в одном месте, но раз все другое, то и менять придется)
Всё верно, в LP не существует default: true, там только одна дефолтная группа. И её название — default.
 
Касаемо меты, я не понял лишь одного:
В каждой группе после миграции с пекса у меня это
Код:
  meta:
  - default:
      value: 'false'
Так и должно быть?)
Его можно удалить, оно ровным счётом никак не влияет.
 
Его можно удалить, оно ровным счётом никак не влияет.
Тогда я одного не понимаю, зачем нужна мета default если есть группа default которая всегда ей и будет?)
Ладно можно сослаться на то что при миграции, LP копировал все параметры группы, в том числе и параметр default с значением. Но ведь в таком случае это не имеет никакого смысла, кроме как возможно обозначения, какая группа у тебя была дефолтная, что бы перенести права на группу default, но так то это просто доводы, ибо пока не видел никакой информации.
 
  1. Да, именно так. Могу только посоветовать изменить в самом пексе (хотя не сомневаюсь, что миграция учитывает параметр пекса default: true). В LP же дефолтная группа только default и никак иначе.
  2. Спасибо что сообщил, я поправлю пункт с файловыми БД. Это команда /lp sync
  3. Да, он пишет в файл сразу. Не уверен насчёт нагрузки, но мне кажется, что для >20 групп и >100 игроков будет разумнее использовать удалённую БД. Использовать YAML или другие файловые это крайне несерьёзный подход для таких серверов.
Для одного сервера само серьезное это H2 база, по умолчанию идет. Самый быстрый вариант.
 
Назад
Верх Низ