Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал Работа с Permissions

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем DmitriyMX, 10 июл 2012.

  1. Автор темы
    DmitriyMX

    DmitriyMX Старожил Пользователь

    Баллы:
    153
    Skype:
    dmn550
    На любом нормальном сервере всегда есть разделение игроков на какие-то группы. Будь то просто админ/юзер или что-то покруче, как admin/gm/vip/builder/crafter/noob. Ведь не всегда нужно, что бы какие-то функции плагина были доступны всем подряд, верно? По этому и возникла потребность в «пермишенах». В этой статье я рассмотрю методы работы с двумя permission-плагинами: PermissionsEx и PermissionsBukkit.

    PermissionsEx

    На момент написания статьи, это самый популярный плагин для управления правами доступа. Вот с него то мы и начнем.

    Для начала, нам понадобится сам плагин. На Bukkit-Dev, он последний раз находился здесь. В скаченном архиве будет 3 файла: один плагин и два расширения к нему. Нам нужен только плагин, и поэтому распаковываем только его. Далее нужно подключить его как библиотеку к нашему проекту. Делается это слудующим образом (описание для eclipse):
    1. Правый тык по проекту -> Properties
    2. По древу переходим в Java Build Path
    3. Переходим на вкладку Libraries и жмем там кнопку Add External JARs
    4. Выбираем наш PermissionsEx.jar и жмем везде OK
    Отлично, теперь перейдем к коду.

    По сравнению со старым плагином Permissions (от Yeti), о котором говорилось в моей старой статье (кстати, незаконченной, простите), здесь всё куда проще реализовывается. По сути, нам от PermissionsEx нужно узнать только одну банальную вещь: имеет ли определенный игрок права на определенное правило. Под «правилом» я имею ввиду строки вида «worldedit.select.region». Так вот, всё что нам нужно, это написать пару строчек простого кода:
    Код:
    PermissionUser pex_user = PermissionsEx.getUser(event.getPlayer());
    if(pex_user.has("worldedit.select.region")){
       //тут какое-то действие, если разрешение есть
    }
     
    // Или, если вам нужно только один раз за функцию/событие узнать права
    if(PermissionsEx.getUser(event.getPlayer()).has("worldedit.select.region")){
       //тут какое-то действие, если разрешение есть
    }
    Этого примера должно хватить для большинства задач. Если интересуют еще какие-либо возможности PermissionsEx, то бегом изучать оф. документацию. Ну или задавайте вопросы здесь в коментариях, постараюсь на них ответить =)

    PermissionsBukkit

    Тоже не менее популярный плагин для управления правами доступа. Скажу даже больше: это официальный плагин по работе с пермишенами от разработчиков Bukkit. На самом деле, в Bukkit уже встроена своя система пермишенов (как давно – не знаю), а сам плагин нужен лишь для удобства управления ими. Скачать плагин можно здесь.

    А теперь самое интересное… Нам этот плагин не нужно подключать к своему проекту! Как я уже сказал выше: весь необходимый функцианал уже реализовано в самом «ведре».
    Код:
    Player user = event.getPlayer();
    if(user.hasPermission("worldedit.select.region")){
       //действие, если есть права     
    }
    Разницы с PermissionsEx (по проверке прав доступа) почти никакой, за исключением факта, что весь этот функцианал уже доступен «из коробки» Bukkit-а.

    PermissionsEx or PermissionsBukkit?
    2 in 1!


    Если делаешь плагин для общественности, а не для себя, то использовать нужно оба плагина. Реализовать такое очень просто. Достаточно при старте плагина выяснить, какой из “движков” есть на сервере:
    Код:
    //объявляем глобальные переменные
    boolean usePEX = false;
    boolean usePB = false;
     
    //в onEnabled() пишем "распознаватель"
    PluginManager pm = Bukkit.getPluginManager();
    if(pm.getPlugin("PermissionsEx") != null){
       usePEX = true;
    }else if(pm.getPlugin("PermissionsBukkit") != null){
       usePB = true;
    }else{
       Bukkit.getLogger().warning("Permissions plugins not found!")
    }
     
    //Пишем универсальную функцию проверки прав
    public boolean hasPermission(Player player, String permission){
       if(usePEX){
           return PermissionsEx.getUser(player).has(permissions);
       }else if(usePB){
           return player.hasPermission(permission);
       }else{
           return player.isOp(); //ну операторам то делать всё можно, ведь так? ;)
       }
    }
     
    //в каком-либо эвенте, теперь надо только написать
    if(hasPermission(event.getPlayer(), "worldedit.select.region")){
       //тут какие-то действия
    }
    Вуаля! Теперь ваш плагин поддерживает 2 системы управления пермишенами.
    Для тех из вас, кому всё-таки нужен рабочий пример всей этой бурды, которую я нагородил выше, выкладываю исходники для разбора и эксперементов.


    Ссылки

    Следующая статья:
    Документация:
    Полезное:
    ________________________________________​
    Источник: Работа с Permissions
     
    DaDeraNeTiVe нравится это.
  2. Хостинг MineCraft
    <
  3. Автор темы
    DmitriyMX

    DmitriyMX Старожил Пользователь

    Баллы:
    153
    Skype:
    dmn550
    Спасибо за предложение. В ближайшее время дополню статью плагинами Vault и bPermission
     
  4. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    А мне выдаёт ошибку в getPlayer():
    if(hasPermission((sender.getPlayer(), "test.test"))
    Предлагает сделать так
    if(hasPermission(((Player) sender).getPlayer(), "pid.all"))
    В чате от игрока работаёт, а от консоли - нет
    sender это CommandSender
     
    ПриветОтМиднайта нравится это.

Поделиться этой страницей