Туториал 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. До встречи!
 
Последнее редактирование:
Спасибо. 🙂

О, context это очень интересная вещь, но в ней разбираться лучше самому. https://github.com/lucko/LuckPerms/wiki/Context

Думаю, будет не плохо, если для других форумчан ты все-таки расскажешь о такой штуке, как "context". Я сам уже про нее многое прочитал на wiki плагина. 🙂
 
Код:
> 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/?*******
При вводе в консоль нечего даёт типо команды не существует а если в игре прописать то нечего не даёт.Этой команды как бы получается нет.Как мне быть?
p.S.Thermos 1.7.10
 
При вводе в консоль нечего даёт типо команды не существует а если в игре прописать то нечего не даёт.Этой команды как бы получается нет.Как мне быть?
p.S.Thermos 1.7.10
Чуть выше про термос уже писал. Автор поддерживает только одну платформу с фордж — губку. На котле, ккотле и термосе оно не запустится.
 
Самое интересное то что плагин работает нормально , но ток эта команда не пашет
 
При вводе в консоль нечего даёт типо команды не существует а если в игре прописать то нечего не даёт.Этой команды как бы получается нет.Как мне быть?
p.S.Thermos 1.7.10
В старой версии нету веб редактора.
 
а новая это какая?Что будет если поставлю на Термос??
 
Пользуюсь LuckPerms уже пару месяцев, возможностей намного больше чем в PEX.
Также я перевел этот плагин на русский язык, и он сейчас встроен в него.
Список локализаций
 
Да, только не знаю о чём рассказывать. Жду предложений.
Контекст пока осваиваю, на него гораздо позже будет большой пост.
Расскажи о временных правах, не такая уж и трудная вещь.
 
Да, только не знаю о чём рассказывать. Жду предложений.
Контекст пока осваиваю, на него гораздо позже будет большой пост.
Если ты шаришь в этому плуге.
Ну вот смотри.
У меня тк: *\LuckPerms\yaml-storage\groups\default.yml
Вопрос как это мне все перевести в mysql ?
К примеру в pex можно было написать pex dump qwe.sql (А потом импорт в бд)
#
 
Вроде всё и так отлично работает без банджи(соединено 5 серверов), что-то кроме синхронизации luckperms на бандже делает?
 
Вроде всё и так отлично работает без банджи(соединено 5 серверов), что-то кроме синхронизации luckperms на бандже делает?
Много чего, временные права, веб едитор групп, да вообще сложно описать, лучше почитать на странице LuckPerms'а.
 
Много чего, временные права, веб едитор групп, да вообще сложно описать, лучше почитать на странице LuckPerms'а.
Ты не понял, я давно всё по Вики поставил на все сервера, теперь вышел гайд. Я в то время не разобрался, зачем ставить LuckPerms на BungeeCord(соответственно, не поставил) и сейчас решил спросить, есть ли вообще в этом особый смысл?
 
Часть пятая. Мелкие, но важные детали.​
Содержание:
  1. Первый раздел
    1. Часть первая. Быстрый старт.
    2. Часть вторая. Префиксы и суффиксы.
    3. Часть третья. Форматы хранения.
    4. Часть четвёртая. BungeeCord.
    5. Часть пятая. Мелкие, но важные детали.
  2. Второй раздел
    1. Часть первая. Локальные и файловые БД.

Так, а о чём это мы? Ах да, приветствую!
Надеюсь с настройкой банджи все справились (даже если не настраивали, то не страшно, главное было понять). Так вот, сегодня речь пойдёт о более простых вещах, но это ни в коем разе не уменьшает их важность. Приступим.
Ах да, этот пост — перевод из оригинальной статьи. Кому хочется оригинала с примерами — прошу:
https://github.com/lucko/LuckPerms/wiki/Advanced-Setup

Спецификация прав по серверам и мирам​

Вспоминаем конфиг, вот так выглядят необходимые нам строки:
Код:
server: global
include-global: true
global — название вашего сервера. Если есть потребность в особых правах для сервера, стоит поставить сюда другое название. global же это, своего рода, заглушка и называет сервер "никак".
Параметр include-global уточняет, будут ли на сервере работать права/группы с пометкой server=global.
Почему это важно помнить? Да потому что эти параметры и помогают с распределением прав и могут выключить её на этом сервере. Ещё раз, global — заглушка, не название. Если прописать в конфиге include-global: false и не поменять название сервера, то ЛЮБЫЕ права из системы будут отклоняться.
Подобные уточнения присутствуют везде, это подводит к следующему пункту.

Расчёт прав в системе​

И вот здесь начинаются детали:

Специфические для сервера права будут превалировать над глобальными
Здесь всё понятно. Если, допустим, глобально стоит право fly.use true, но для сервера survival оно запрещено (fly.use false) — право с уточнением сервера будет превалировать над общим/глобальным.
Точно такая же схема и для прав по мирам. У прав для мира приоритет выше, нежели у общих.

Временные права приоритетнее, нежели постоянные
Скажем, если игроку временно выдали право essentials.gamemode.* true, а постоянно у него прописано essentials.* false, у игрока будет действовать временное право, поскольку оно приоритетнее постоянного.
По времени тоже есть приоритет. Скажем, если выдано несколько одинаковых временных прав с разной длительностью, будет действовать только то, которое с наименьшей длительностью.

Права по шаблонам и RegEx будут замещаться обычными
Сразу объясняю, по шаблону это права со звёздочкой, которые охватывают весь набор прав из категории. essentials.* это как раз шаблон на все права от Essentials. Так вот, допустим группе доступно право essentials.* true, но также присутствует право essentials.me false. Это значит, что будут доступны все права Essentials, кроме essentials.me. Думаю, подробнее рассмотреть можно только на практике.
Кстати, уточнённые шаблоны, по типу essentials.gamemode.*, будут заменять собою менее уточнённые. Поэтому essentials.gamemode.* false будет запрещать, даже если выставлено essentials.* true.

Особые права конкретно для игрока будут заменять собою общие
Думаю, тут даже писать не стоит. Если в группе прописано essentials.me true, а у игрока проставлено essentials.me false — будет работать только то, которое у игрока.

Сокращения​

Если предыдущий раздел был о самой работе с правами, то здесь именно об упрощении. Вот представим ситуацию, что в плагине есть права:
Код:
luckperms.user.setpermission
luckperms.user.unsetpermission
luckperms.group.setpermission
luckperms.group.unsetpermission
И мы хотим назначить кого-то, чтобы ему были доступны все эти команды. Вроде бы просто, достаточно прописать ему эти права и всё. И оно на самом деле так и есть, но просто подумайте, во что превратится работа с таблицей прав, если там таких мелких изменений будет много. Представили? Бррр... я бы не хотел такое видеть, вот и автор LP тоже не в восторге. И он придумал сокращения. Весь набор выше можно представить одной строкой, вот так:
Код:
luckperms.(user|group).(setpermission|unsetpermission)
Согласитесь, выглядит гораздо проще. Практическое применение? А вот допустим киты в Essentials, их же много, правда? Каждый раз смотреть на груду прав на киты из start, armor, tools, food... ужас. LP же предлагает их все запихнуть в одну строку вот так:
Код:
essentials.kits.(start|armor|tools|food)
Всё, и никаких 10-15 прав на все киты. Играться можно сколько угодно.

Но есть же сервера, которые с китами на весь латинский алфавит (или на 4 первые буквы, кому как хочется):
Код:
essentials.kits.a
essentials.kits.b
essentials.kits.c
essentials.kits.d
Ну вот и что тут делать? Можно, конечно, методом выше, но это же ерунда. Буквы то мелкие, а строка получится немаленькая. Для таких тоже придумали сокращение:
Код:
essentials.kits.(a-d)
Легко? Очень, а с цифрами то как легко, можно поступить также. Котовасия прав с цифрами
Код:
prisonmines.teleport.1
prisonmines.teleport.2
prisonmines.teleport.3
prisonmines.teleport.4
...лёгким движением руки превращается...
Код:
prisonmines.teleport.(1-4)
...в элегантную, а главное простую для понимания, строку.

Regex​

А вот здесь всё очень сложно, я такой вещью никогда не пользовался. Скажу лишь, что любая строка regex в LP должна начинаться с "R=", а дальше уже по правилам регулярных выражений. Да, все необходимые символы должны экранироваться (эскейп это ещё называют, не знаком с точной терминологией), если так принято в синтаксисе. Вещь это мощная, но может быть сложной в освоении. Проще говоря, много похожих прав можно запихнуть в одну строку. Подробнее про regex можно прочитать на википедии, или погуглить самим.

Так, я уже сбился, это всё? Похоже да, на сегодня хватит. С вами был InterWall и скоро мы познакомимся с выдачей временных прав, групп и параметров.
 
Последнее редактирование:
Назад
Верх