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

Помогите Помощь с PEX

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

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

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Здравствуйте! Нужна помощь с PEX. У меня на сервере есть кейсы из которых выпадают группы, и он добавляет игроков через команду "group add [GROUP]" и если например у игрока был вип, и он открыл кейс и выпал флай, то у игрока будет префикс флай, а не вип, но будет всё что есть у ВИП. Я решил исправить это плагином.
    А именно получаю все группы игрока, удаляю его из всех групп, получаю самую высокую по приоритету(Из конфига) и ставлю её.
    Вот сам код:
    Код:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onJoin2(final PlayerJoinEvent v)
    {
        final Player p = v.getPlayer();
        final PermissionGroup[] playerGroups = PermissionsEx.getUser(p).getGroups();
        for (PermissionGroup pg : playerGroups) {
            Integer targetPrior1 = 1;
            Integer targetPrior2 = 2;
            Integer targetPrior3 = 3;
            Integer targetPrior4 = 4;
            Integer targetPrior5 = 5;
            p.sendMessage("asd");
            PermissionsEx.getUser(p).removeGroup(pg);
            if (c.getInt(pg.getName()) == targetPrior5) {
                PermissionsEx.getUser(p).addGroup(pg);
                p.sendMessage("asd1");
                return;
            }
            else if (c.getInt(pg.getName()) == targetPrior4){
                PermissionsEx.getUser(p).addGroup(pg);
                p.sendMessage("asd2");
                return;
            }else if (c.getInt(pg.getName()) == targetPrior3){
                PermissionsEx.getUser(p).addGroup(pg);
                p.sendMessage("asd3");
                return;
            }else if (c.getInt(pg.getName()) == targetPrior2){
                PermissionsEx.getUser(p).addGroup(pg);
                p.sendMessage("asd4");
                return;
            }else if (c.getInt(pg.getName()) == targetPrior1){
                PermissionsEx.getUser(p).addGroup(pg);
                p.sendMessage("asd5");
                return;
            }
        }
    }
    И когда игрок заходит на сервер, то ничего не происходит(Сообщения отправляются), а группы остаются такие какие и были. И даже если менять pg ==> "GroupName", то всёравно ничего не происходит. Сообщение asd1 отправляется.

    Config

    Код:
    vip: 1
    vipp: 2
    mvp: 3
    mvpp: 4
    gl: 5
     
  2. Хостинг MineCraft
    <
  3. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    По-моему, ты можешь сделать не через if а через swich.
    И я немного не понял код, что то странно все)
     
  4. Dymeth

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

    Баллы:
    76
    Не совсем понятен код. Но, вероятно, будет удобно сравнивать приоритеты групп: если выдаваемая группа "выше" старой, то удалять из этой старой. Примерно так можно получать приоритет:
    Код:
    private static String[] groups = {"vip", "vipp", "mvp", "mvpp", "gl"};
    
    private static int getGroupPriority(PermissionGroup group) {
        String name = group.getName();
        for(int i = 0; i < groups.length; i++) {
            if(groups[i].equals(name))
                return i;
        }
        return -1;
    }
     
    Последнее редактирование: 25 мар 2016
  5. Alexgrist

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

    Баллы:
    173
    Pex имееет встроеную систему "веса", зачем своё нужно?
     
  6. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Эххх. Найти бы её ещё.[DOUBLEPOST=1458919173,1458918804][/DOUBLEPOST]
    Ну типо у игрока есть 3 группы. Например gl, vip, mvp.
    В конфиге есть приоритеты для этих групп, 5,1,3
    И в коде я получаю приоритет(int), и сравниваю с тем что я указал в коде
    Например этот Integer targetPrior1 =5; И если приоритет с конфига, совпал с этим, то выполняется код.
    Но проблема в том что тупо ничего не происходит, asd1 отправляется, а всё что я делал с группами не изменяется.
     
  7. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Это я понял, но все очень не понятно.
    *1)Зачем удалять группу у игрока, но потом опять давать?* - понял, но и понял то что это большой костыль)
    и все таки, сделал бы через swich)
    Код:
    swich(c.getInt(pg.getName())){
    case 5:
    //code
    break;
    case 4:
    //code
    break;
    case 3:
    //code
    break;
    default:
    break;
    }
    Или что то такое:В
     
  8. Alexgrist

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

    Баллы:
    173
    pex group <group> weight [weight]

    или в permissions.yml:
    Код:
        options:
          prefix: '&f[&9&lBuild&f] &6'
          suffix: ''
          weight: '50'
          default: false
    Чем меньший вес у группы, тем больший приоритет у команд и префикса.
     
  9. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Спасибо.
     
Статус темы:
Закрыта.

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