Туториал 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. До встречи!
 
Последнее редактирование:
'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', а затем посмотрите, что оно прописало в файл с правами.
http://rubukkit.org/posts/1534002
http://rubukkit.org/posts/1535688
Тут подробно написано про значение параметра "server".
 
Последнее редактирование:
Ну тогда можно опять советовать LP динозаврам на 1.7.10 😆
Поправил первый пост.

Кстати, так как времени у меня появилось больше, я планирую продолжить цикл статей. Временные права и, возможно, контекст.
 
/lp group <группа> addprefix <вес> "<значение>" — добавить префикс /lp group <группа> addsuffix <вес> "<значение>" — добавить суффикс /lp group <группа> removeprefix <вес> "[значение]" — удалить префикс /lp group <группа> removesuffix <вес> "[значение]" — удалить суффикс
Ну и с того самого чейнджлога, думаю надо обновить
Add setprefix, setsuffix, settempprefix, settempsuffix commands
With these commands, the "weight" of prefixes and suffixes is handled behind the scenes. Should (hopefully!) make things a bit easier for new users.
 
Ну и с того самого чейнджлога, думаю надо обновить
Информация получена, вот теперь дело должно пойти проще. По-хорошему все статьи надо переписать под новый LP. Там столько всего, что и не исправишь.
Вообще сейчас пишу цикл статей для LP под губку для другого сайта. Может там всё это расскажу.
 
Ребят такая проблема возникла. Игроку из группы default выдаю право на группу deluxe

...lp user (игрок) parent addtemp deluxe 0d0h10m...

После истечения времени 10 минут, игрок переходит обратно в группу default но, в группе deluxe есть два разрешения или больше не важно.

...lp group deluxe permission set nucleus.god.base true...
...lp group deluxe permission set nucleus.fly.base true...

И после перехода в группу default если права были активны то они остаются. Голову сломал не пойму как побороть.
 
Что значит активны ?
Похоже какой то баг был сервера, пересобрал все ушло. Выходило что можно было в группе VIP при окончании времени, игрок переходил автоматом в группу Default и все что можно было VIP стало можно и Default.

Честно без понятия что был за глюк, после пересборки сервера все стало нормально.
 
До последнего не хотел переходить на него, но как попробовал аж пожалел что раньше не поставил данное чудо.
 
Стоит версия плагина 4.3.7 на bungee(версия для bungee) и других серверах
Что то не получилось правильно настроить(
Делал как писалось в первых постах о настройке серверов с отдельными правами.
Есть сервер bungee lobby survival.
На сервере lobby прописал команду (вес старого 100):
Код:
lp group staff meta addprefix 101 "&c[C] &f" server=survival
Но на survival ничего не изменилось
Вот что показало в логах bungee:
Код:
21:17:49 [INFO] [LP] LOG > (console@lobby) [G] (staff)
21:17:49 [INFO] [LP] LOG > meta addprefix 101 [C]  server=survival
21:17:51 [INFO] [LuckPerms] [Messaging] Received update ping with id: 0c4dba92-5e29-4ca8-beda-574c660f0c98

В survival ничего в логах консоли не было.
Конфиг bungee:
Код:
server: bungee
use-server-uuid-cache: false
messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Конфиг survival:
Код:
server: survival
include-global: true
include-global-world: true
apply-global-groups: true
apply-global-world-groups: true

messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Конфиг lobby:
Код:
server: lobby
include-global: true
include-global-world: true
apply-global-groups: true
apply-global-world-groups: true

messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Все остальные настройки дефолтные. все сервера подключаються к одной базе mysql, и у всех одинаковые настройки подключения.

Если сервер survival перезагрузить или плагин LuckPerms, то префикс уже будет новый на сервере.
Что не так с настройками или как связать сервера ?
 
Стоит версия плагина 4.3.7 на bungee(версия для bungee) и других серверах
Что то не получилось правильно настроить(
Делал как писалось в первых постах о настройке серверов с отдельными правами.
Есть сервер bungee lobby survival.
На сервере lobby прописал команду (вес старого 100):
Код:
lp group staff meta addprefix 101 "&c[C] &f" server=survival
Но на survival ничего не изменилось
Вот что показало в логах bungee:
Код:
21:17:49 [INFO] [LP] LOG > (console@lobby) [G] (staff)
21:17:49 [INFO] [LP] LOG > meta addprefix 101 [C]  server=survival
21:17:51 [INFO] [LuckPerms] [Messaging] Received update ping with id: 0c4dba92-5e29-4ca8-beda-574c660f0c98

В survival ничего в логах консоли не было.
Конфиг bungee:
Код:
server: bungee
use-server-uuid-cache: false
messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Конфиг survival:
Код:
server: survival
include-global: true
include-global-world: true
apply-global-groups: true
apply-global-world-groups: true

messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Конфиг lobby:
Код:
server: lobby
include-global: true
include-global-world: true
apply-global-groups: true
apply-global-world-groups: true

messaging-service: bungee
auto-push-updates: true
push-log-entries: true
broadcast-received-log-entries: true

Все остальные настройки дефолтные. все сервера подключаються к одной базе mysql, и у всех одинаковые настройки подключения.

Если сервер survival перезагрузить или плагин LuckPerms, то префикс уже будет новый на сервере.
Что не так с настройками или как связать сервера ?
Для связки нужен только MySQL и ему подобные, на каждом сервере должно стоять в spigot.yml bungeecord: true, в настройках самой банджи должно стоять ip_forward: true.
Пункт с БД обязателен, я про него писал в гайде на 2-й странице.
 
Писал же выше что "все сервера подключаються к одной базе mysql, и у всех одинаковые настройки подключения (127.0.0.1)."
На сурваче и лобби стоит: bungeecord: true
 
Писал же выше что "все сервера подключаються к одной базе mysql, и у всех одинаковые настройки подключения (127.0.0.1)."
На сурваче и лобби стоит: bungeecord: true
Тогда странно, попробуй использовать другую версию LP, может за последнее время вышло обновление. Вообще всё должно работать.
Или проверь настройки на стороне мускуля, в них может быть ограничение на запросы.
 
Возможно ли как-нибудь изменение дефолтных таблиц лака на нужные?
К примеру: У меня есть сайт, к которому я подключаю лакпермс. Но у меня уже создана таблица dle_users с группами. И мне нужно, чтобы группа на сайте и группа на сервере брала информацию из dle_users . group.
 
Возможно ли как-нибудь изменение дефолтных таблиц лака на нужные?
К примеру: У меня есть сайт, к которому я подключаю лакпермс. Но у меня уже создана таблица dle_users с группами. И мне нужно, чтобы группа на сайте и группа на сервере брала информацию из dle_users . group.
Конечно можно, в конфиге должно быть.
 
Часть третья. Форматы хранения.​
Содержание:
  1. Часть первая. Быстрый старт.
  2. Часть вторая. Префиксы и суффиксы.
  3. Часть третья. Форматы хранения.
  4. Часть четвёртая. BungeeCord.
  5. Часть пятая. Мелкие, но важные детали.

Приветствую всех вас в третьей части руководства по настройке LuckPerms. В прошлой я обещал рассказать про BungeeCord, но совсем забыл о такой вещи, как формат хранения данных. Почему важной? Ну как же, для работы LP в бандже необходимо всё держать в общей БД. Поэтому перенесём прокси на потом и займёмся чем-нибудь попроще. И первое, что мы сделаем, это перечислим все возможные форматы хранения данных:
  • Удалённые БД — размещаются отдельно и требуют настроек подключения. Такой формат понадобится для BungeeCord/LilyPad/RedisBungee или любого другого прокси-сервера.
    • MySQL
    • MariaDB (предпочтительнее использовать её, а не MySQL)
    • PostgreSQL
    • MongoDB
  • Локальные БД — размещаются в папке LuckPerms и "просто работают".
    • H2 (желательно использовать его, а не SQLite)
    • SQLite
  • Текстовые файлы — все права/пользователи/группы/мета в одном файле, который можно редактировать. Дело вкуса, конечно, но я бы советовал использовать локальные БД. Они и быстрее и поломать там что-либо сложнее. Если не редактировать их напрямую, конечно.
    • YAML (.yml)
    • JSON (.json)
    • HOCON (.conf)
Здесь так много всего, но задержимся подробнее на удалённых БД, их настройка в дальнейшем нам понадобится.
У большинства возникнет вопрос именно к MySQL. Если же у вас другая БД и вы об этом знаете, то у вас были на это однозначные причины и настраивать подключение к ним вы уже умеете. Подробнее здесь.
А мы же продолжим работать с MySQL. Процесс его установки я описывать также не буду, гугл вам поможет. Для руководства же мы будем использовать такие параметры:
ip: 127.0.0.1
port: 3306
user: root
pass: root
db: minecraft (utf8_general_ci)

Но перед тем, как подключать плагин к другой БД, стоит выгрузить из него всю информацию о правах/группах/игроках. Делается это очень просто — запускаете сервер и прописываете такую команду:
/lp export <файл>
Файл можно назвать как угодно, главное запомнить название. В моём случае это будет backup.
В этот файл LP выгрузит все данные в виде команд, которые сможет потом выполнить автоматически. Останавливаем сервер и переходим к настройке хранения через MySQL. Для этого отправляемся в config.yml и ищем там такие строки. Мой сервер MySQL поддерживает MariaDB, поэтому использовать я буду её.
Настроили? Отлично, двигаемся дальше и запускаем сервер. При удачной настройке процесс запуска будет таким:
А в БД должны появиться таблицы:
Подключились, теперь стоит применить все наши права и группы, которые мы сохранили в файл backup. Сделать это можно командой:

/lp import <файл>
И все прописанные в файле команды будут применены.
На этом всё, с вами был InterWall. И в следующий раз, я очень надеюсь, будем говорить о LuckPerms для прокси-серверов.
не могли бы вы расписать или гайд кинуть
  • Локальные БД
  • Текстовые файлы
 
Раздел второй, часть первая. Локальные и файловые БД.​
Содержание:
Поскольку плагин имеет свойство обновляться, а сидеть на старых версиях ни мне ни вам не хочется, я решил все инструкции разделить на разделы. Каждый раздел пишется для определённой версии плагина и игры, которые упоминаются в первых частях каждого из этих разделов.
  1. Первый раздел
    1. Часть первая. Быстрый старт.
    2. Часть вторая. Префиксы и суффиксы.
    3. Часть третья. Форматы хранения.
    4. Часть четвёртая. BungeeCord.
    5. Часть пятая. Мелкие, но важные детали.
  2. Второй раздел
    1. Часть первая. Локальные и файловые БД.
Приветствую всех вас! Вопрос написания первой части второго раздела инструкций по LuckPerms! Вопросов много, а времени не особо много, поэтому сразу к делу. Конфигурация, с которой я буду работать в этом разделе:
  • PaperSpigot 1.12.2 (git-Paper-1581);
  • LuckPerms-Bukkit 4.3.11
    • enable-ops: false
    • commands-allow-op: false
    • apply-bukkit-default-permissions: false
  • Vault 1.6.7
  • ChatControl 5.7.1

Итак, возвращаемся к форматам хранения. Как я писал ещё в третьей части первого раздела, базы данных делятся на удалённые, локальные и файловые. О работе с удалёнными БД подробно написано в той самой третьей части, здесь же мы поговорим о двух остальных.

Локальными БД в LP являются H2 и SQLite, причём разработчик отмечает в комментариях, что в этом типе предпочтительнее будет использовать H2. Изменяется формат хранения внутри конфига, в строке: storage-method: sqlite (вместо sqlite можно установить h2 или любой другой формат). Никаких дополнительных настроек для их использования не требуется.
Визуально локальные БД не представляют ничего особого, просто файлы, которые не получится отредактировать напрямую. В этом, кстати, их основное, помимо скорости, преимущество — редактировать такие БД можно либо при помощи особых программ (H2/SQLite Editor какой-нибудь), либо при помощи интерфейсов LP (команды и web-editor). Следовательно, сломать их не получится. Работа с этими БД происходит быстрее (по заявлению разработчика), чем с файлами, особенно при больших объёмах информации. Подробнее об этом можно также почитать на специализированных ресурсах.

Файловые БД, если их можно назвать базами данных, делятся на несколько типов: yaml, json, hocon, toml, из которых разработчик советует выбирать yaml. Они представляют собой привычный всем формат хранения PermissionsEx — файл, который можно редактировать напрямую. Только, в отличие от PEX, LP разделяет файлы на несколько составляющих — группы, игроки, иерархические наследования (о которых как-нибудь в другой раз), кэш UUID и лог действий. Однако можно убрать всю структуру папок и закинуть всё в один файл, если добавить -combined после названия формата хранения:
storage-method: yaml-combined
Выглядит это примерно так:
Код:
default:
  permissions:
  - chatcontrol.chat.global
  - chatcontrol.chat.overrideranged
admin:
  permissions:
  - '*'
  prefixes:
  - '&cAdmin&r ':
      priority: 20
Любые прямые изменения файла применяются сразу благодаря функции File Watcher. LP сам видит все внесённые изменения и применяет их. Если же вам привычнее применять изменения самостоятельно, то File Watcher можно отключить в конфиге:
watch-files: false
После чего изменения применяются командой /lp sync.
Если локальные БД редактировались только специальными программами, то здесь всё стандартно, достаточно обычного блокнота (или его заменителя) и прямых рук. Но появляется возможность нарушить синтаксис, что не есть хорошо. Да и скорость у файлов (особенно если он один) оставляет желать лучшего, тем более при больших объёмах.

Смотрите, анализируйте и выберите самый оптимальный для вас вариант. Я же выбираю локальную H2.
На этом я с вами прощаюсь. С вами был InterWall, надеюсь ещё увидимся.
 
Последнее редактирование:
Назад
Верх