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

Помогите Получить рандомного игрока без групп.

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

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

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Здравствуйте. Как можно сделать выполнение кода например ровно в 13:00, 17:00, 18:30.
    Как можно получить рандомного игрока на сервере, у которого нет никаких групп?
    Код:
            for (Player p : Bukkit.getOnlinePlayers()) {
                String group = perms.getPrimaryGroup(p).toString().toLowerCase();
                if (group == "default") {
                       ТУТ ИХ НУЖНО ПОЛУЧИТЬ
                }
            }
        }
     
    Последнее редактирование: 14 май 2016
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

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

    Баллы:
    123
    Попробуй как-то так может быть)
    Код:
    Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                   
                }
            }, new Date());
    PыSы. Вместо new Date() создай дату когда надо выполнить run() (можно с помощью SimpleDateFormat).
     
  4. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Можно пример. А то я чтото не врубаюсь(
     
  5. Mr_RoboMan

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

    Баллы:
    123
    Код:
            Timer timer = new Timer(); //Создаем таймер
            SimpleDateFormat SDT = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //Формат даты
            Date date = SDT.parse("2016/05/14 13:38:40"); //Дата
            timer.schedule(new TimerTask() { //Запускаем "шедулер"
                @Override
                public void run() { //Делаем то шо надо :-)
                    System.out.println("TEST: " + SDT.format(new Date()));
                }
            }, date); //Вставляем дату когда это событие запустится
    
    Можно)
     
  6. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    спасибо. работает.[DOUBLEPOST=1463226026,1463225383][/DOUBLEPOST]Новый вопрос:
    Как можно получить рандомного игрока на сервере, у которого нет никаких групп?[DOUBLEPOST=1463226236][/DOUBLEPOST]
    Код:
            for (Player p : Bukkit.getOnlinePlayers()) {
                String group = perms.getPrimaryGroup(p).toString().toLowerCase();
                if (group == "default") {
                       ТУТ ИХ НУЖНО ПОЛУЧИТЬ
                }
            }
        }
     
  7. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Если нельзя сразу получить список игроков с дефолтной группой, то в этом цикле формируешь список игроков и получаешь рандомный элемент из полученного списка.
     
  8. Mr_RoboMan

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

    Баллы:
    123
    Код:
        public Player getRandomPlayerFromGroup(String group) {
            ArrayList<Player> playersInGroup = new ArrayList();
            for (Player p : Bukkit.getOnlinePlayers()) {
                String pGroup = perms.getPrimaryGroup(p).toString().toLowerCase();
                if (pGroup.equals(group)) playersInGroup.add(p);
            }
            return playersInGroup.get(new Random().nextInt(playersInGroup.size()));
        }
    
    Как аргумент group посылаешь "default"
     
  9. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Вот вариант со stream (java 8). Правда, никто не обещает того, что будет действительно случайный игрок.
    Код:
    PermissionsEx perms = (PermissionsEx) this.getServer().getPluginManager().getPlugin("PermissionsEx");
    
    public Player getRandomPlayerInGroup(String group) {
        Set<PermissionUser> activeUsers = perms.getPermissionsManager().getGroup(group).getActiveUsers();
        PermissionUser user = activeUsers.stream().findFirst().get();
        return user.getPlayer();
    }

    А вот с повышенной случайностью вариант:
    Код:
    PermissionsEx perms = (PermissionsEx) this.getServer().getPluginManager().getPlugin("PermissionsEx");
    
    public Player getRandomPlayerInGroup(String group) {
        //Слишком ленив, чтобы сделать это красиво
        PermissionUser[] tempArray = (PermissionUser[]) perms.getPermissionsManager()
                .getGroup(group).getActiveUsers().toArray();
        List<PermissionUser> activeUsers = Arrays.asList(tempArray);
        Collections.shuffle(activeUsers);
        PermissionUser user = activeUsers.stream().findFirst().get();
        return user.getPlayer();
    }
     
    Последнее редактирование: 14 май 2016
  10. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Не могу понять почему не работает (String == String)
    Код:
        public void OnChat(AsyncPlayerChatEvent e) {
            System.out.print(perms.getPrimaryGroup(e.getPlayer()).toString().toLowerCase());
            if (perms.getPrimaryGroup(e.getPlayer()).toString().toLowerCase() == "default") {
            System.out.print("AA");
            }
    }
    Тоесть в консоль нормально выводится default. А при сравнении ничего не происходит.

    Код:
    [22:16:38 INFO]: default
    [22:16:38 INFO]: <Leymooooooooooo> a
    >
     
  11. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Потому что String.equals(String) . Почитай про операторы сравнения на досуге.
     
  12. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Спасибо всем! Если не сложно, то подскажите как сделать так, чтобы таймер не запускался после нужного времени. А то после перезагрузки сервера таймер почемуто сразуже запускается(Тоесть если время 15:40, а в коде 15:50, то код запустится в 15:50. А если запустить сервер или плагин после 15:50, то почемуто код запустится.)
     
  13. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну при включении проверяй, если дата:время уже прошло, то меняй дату на следующий день.
     
Статус темы:
Закрыта.

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