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

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

Discussion in 'Разработка плагинов для новичков' started by slavik123123123, May 14, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    slavik123123123

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

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

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

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

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

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

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

    Trophy Points:
    123
    Code:
            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 Старожил Пользователь

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

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

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

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

    Trophy Points:
    123
    Code:
        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 Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Вот вариант со stream (java 8). Правда, никто не обещает того, что будет действительно случайный игрок.
    Code:
    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();
    }

    А вот с повышенной случайностью вариант:
    Code:
    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();
    }
     
    Last edited: May 14, 2016
  10. Автор темы
    slavik123123123

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Не могу понять почему не работает (String == String)
    Code:
        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. А при сравнении ничего не происходит.

    Code:
    [22:16:38 INFO]: default
    [22:16:38 INFO]: <Leymooooooooooo> a
    >
     
  11. Dereku

    Dereku Старожил

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

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

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

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

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну при включении проверяй, если дата:время уже прошло, то меняй дату на следующий день.
     
Thread Status:
Not open for further replies.

Share This Page