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

Помогите Kick с сервера при входе, если у игрока дефолтовские permissions

Тема в разделе "Разработка плагинов для новичков", создана пользователем Epictrium, 1 дек 2015.

Статус темы:
Закрыта.
  1. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Приветствую!

    Недавно возникла идея сделать автоматический "кик" с сервера при входе, если игрок состоит в permissions как default. То есть на сервер могут зайти только те игроки, которые имеют permissions выше дефолтовских.

    Написал код, протестил - кикать то кикает, но кикает всех без разбору, не обращая внимания на permissions игрока..

    Собственно сам код:
    Код:
    package lst.permissionizer;
    
    import org.bukkit.plugin.java.JavaPlugin;
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    public class LSTPermissionizer extends JavaPlugin implements Listener{
        public static final Logger _log = Logger.getLogger("Minecraft");
     
        @Override
        public void onEnable() {
               Bukkit.getPluginManager().registerEvents(this, this);
        }
     
        @EventHandler
        public void onPlayerConnect(PlayerJoinEvent e){
            Player p = e.getPlayer();
         
            if(p.hasPermission("lst.guest")){
                p.kickPlayer(ChatColor.RED + "KICK!");
            }
            else if(p.hasPermission("lst.member")){
                return;
            }
        }
    }
    Дефолтовская группа у меня именуется как "lst.guest", а группа игроков, которую сервер не будет кикать называется "lst.member".

    В качестве API использую jar файл крафтбаккита версии 1.8.7

    Прошу Вашей помощи! С меня огромное спасибо!
     
  2. Хостинг MineCraft
    <
  3. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Код:
    @EventHandler
    public void onPlayerConnect(PlayerJoinEvent e)
    {
    if(e.getPlayer().hasPermission("lst.member"))
        return;
    e.getPlayer().kickPlayer(ChatColor.RED + "KICK!");
    }
    Попробуйте так. Чтобы не кикало выдайте разрешение группе lst.member.
     
  4. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    Почему PlayerLoginEvent не используете? Так можно вообще не пускать на сервер.
     
  5. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Попробовал - все равно кикает всех без разбору =([DOUBLEPOST=1448961715,1448961292][/DOUBLEPOST]
    Пробовал - не помогло([DOUBLEPOST=1449063011][/DOUBLEPOST]up((
     
  6. Starr

    Starr Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    А ты в плугин умл регистрировал пермишены? Не факт, что поможет, но стоит попробовать.
    Можешь обращаться к пексу, если он есть, и использовать его методы получения пермишена.
     
  7. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Пробовал и в плугин умл добавлять пермишены - тот же резульат.
    А как обратиться к пексу и использовать его методы получения пермишена?
     
  8. Starr

    Starr Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Код:
    Player player = (Player) sender;
    PermissionUser user = PermissionsEx.getUser(player);
    
    if (user.has("super.permission.node")) {
    // do smth
    }
     
  9. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Итак, вот код:
    Код:
    package lst.permissionizer;
    import org.bukkit.plugin.java.JavaPlugin;
    import ru.tehkode.permissions.PermissionUser;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    public class LSTPermissionizer extends JavaPlugin implements Listener{
        public static final Logger _log = Logger.getLogger("Minecraft");
        @Override
        public void onEnable() {
               Bukkit.getPluginManager().registerEvents(this, this);
        }
        @EventHandler
        public void onPlayerConnect(PlayerJoinEvent sender){
            Player player = (Player) sender;
            PermissionUser user = PermissionsEx.getUser(player);
            
            if (user.has("Guest")) {
                sender.getPlayer().kickPlayer(ChatColor.RED + "KICK!");
            }
            else {
                return;
            }
        }
    }
    Вот пермишен умл:
    Код:
    groups:
      Guest:
        default: true
        build: false
        permissions:
        - modifyworld.*
      Member:
        default: false
        build: true
        permissions:
        - modifyworld.*
    
    users:
      Epictrium:
        group:
        - Member
    Вот плугин умл:
    Код:
    name: LSTPermissionizer
    main: lst.permissionizer.LSTPermissionizer
    version: 1.1.0
    Результат - теперь вообще никого не кикает...
    З.Ы. При запуске сервера в конфиге ни единой ошибки по пексу и по моему плагину...
     
  10. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @EventHandler
        public void onLogin(PlayerLoginEvent e){
            if(!e.getPlayer().hasPermission("lst.member")){
                e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
                e.setKickMessage(ChatColor.RED + "KICK.");
            }
        }
     
    Последнее редактирование: 3 дек 2015
  11. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Мне кажется, что у меня проблема с обозначением самого пермишена, потому что либо кикает всех, либо не кикает никого)) По сути скрипт работает, но что то не так с обозначением перпишенов)

    Вот список того, что я пробовал с обозначением permissions:

    1) hasPermission("Guest"), где "Guest" название группы в файле "permissions.yml". Результат - кикает всех;

    2) hasPermission("bukkit.command.list"), где "bukkit.command.list" находилось в пермишенах группы "Guest" в файле "prmissions.yml". Результат - никого не кикает.

    3) hasPermission("lst.member"), где "lst.member" выдуманное мной пермишн, которое ничего не давало и даже не было зарегистрировано в коде, но было зарегистрировано в файле "plugin.yml" (я не полностью понимаю принцип работы пермишенов). Результат - никого не кикает.

    Чую, решение моей проблемы совсем близко:lol:
     
    Последнее редактирование: 3 дек 2015
  12. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    я тебе скинул рабочий код. У меня он работает. Я использую PlayerLoginEvent, а не PlayerJoinEvent.[DOUBLEPOST=1449164404,1449164157][/DOUBLEPOST]
    upload_2015-12-3_19-38-44.png
    Смотри в консоль. С начало у меня небыло lst.member. Добавил себя в группу vip, где есть есть lst.member и зашёл.
     
  13. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Я знаю что он рабочий, просто не могу разобраться как правильно указать эти пермишенс:cry:[DOUBLEPOST=1449164631,1449164408][/DOUBLEPOST]
    Я кажется понял в чем дело... Сейчас отпишусь)
     
  14. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    По стандарту у всех есть эта группа.

    vip:
    inheritance:
    - Guest

    Поэтому и кикает всех.

    Ну так если в коде нету перма, то как плагин должен работать?

    if(!e.getPlayer().hasPermission("lst.member"))
    ! - Если у игрока НЕТУ lst.member выполнять код.
     
  15. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Дело в том, что у всех групп в моем пермишенс файле нет строчки "inheritance:". А что если ее добавить к недефолтовской группе и после нее вместо "- Guest" оставить пустое поле? Получается, уже не будет считаться, что у недефолтофской группы дефолтофская группа?
     
  16. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    значит из-за
    default: true

    Используй мой код. И нужным группам выдай lst.member - чтобы их не кикало при заходе.
     
  17. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Код:
    groups:
      Guest:
        default: true
        build: true
        permissions:
        - modifyworld.*
      Member:
        inheritance:
        default: false
        build: true
        permissions:
        - modifyworld.*
        - lst.member
    
    в Member default стоит на фолсе((
     
  18. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    upload_2015-12-3_20-15-44.png

    Код:
    package lst.permissionizer;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerLoginEvent;
    public class LSTPermissionizer extends JavaPlugin implements Listener{
        public static final Logger _log = Logger.getLogger("Minecraft");
        @Override
        public void onEnable() {
               Bukkit.getPluginManager().registerEvents(this, this);
               LSTPermissionizer._log.info("Плагин включён!");
        }
        @Override
        public void onDisable() {
            LSTPermissionizer._log.info("Плагин отключён!");
        }
       
        @EventHandler
        public void onLogin(PlayerLoginEvent e){
            if(!e.getPlayer().hasPermission("lst.member")){
                e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
                e.setKickMessage(ChatColor.RED + "KICK.");
            }
        }
    }
    permissions.yml

    Код:
    groups:
      Guest:
        default: true
        build: true
        permissions:
        - modifyworld.*
      Member:
        inheritance:
        default: false
        build: true
        permissions:
        - modifyworld.*
        - lst.member
    plugin.yml

    Код:
    name: asd
    main: lst.permissionizer.LSTPermissionizer
    version: 1.0
    author: asd
    
     
  19. Автор темы
    Epictrium

    Epictrium Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Epictrium
    Вот такая вот басня:
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     
  20. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    хм. Ну а если попробовать себя опнуть? Или офнуть плагин. Дать группу. И опять включить плагин.
    У тестил на 1.8.8. И у меня всё робило. У тебя точно последний пекс?
     
  21. Starr

    Starr Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Так в втом то и дело что у него не последний)
     
Статус темы:
Закрыта.

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