1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Сделать игрока афк, если он стоит более X сек.

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

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

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

    Баллы:
    76
    Здравствуйте, формучане. Очень нужна помощь с моей задумкой. Во многих плагинах каким-то образом уже реализовано то, что после некоторого времени игрок помечается как афк. Вопрос, каким образом идёт проверка времени после последнего движения? Есть что-то такое...
    Класс... {
    -------------------
    @EventHandler
    public void onMove(PlayerMoveEvent e) {
    Player p = e.getPlayer();
    Location loc = e.getTo();
    Bukkit.getScheduler().runTaskLater(main, new BukkitRunnable() {
    @Override
    public void run() {
    //Если лока игрока сейчас равна прошлой, то {
    main.setAfk(p, true);
    }
    }
    }, 20L * main.getConfig().getInt("time-afk"))
    }
    }
     
  2. zabelov

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

    Баллы:
    61
    Имя в Minecraft:
    Zabelov
    Насколько я знаю, то там, если не отправляются пакеты о движении игрока какое-то время, то он записывается в афк
     
  3. Автор темы
    NukerFall

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

    Баллы:
    76
    Мне бы пример в коде... У меня есть размышления, но никак не пойму, как же мне это реализовать...
     
  4. dreadfaly

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

    Баллы:
    76
    Имя в Minecraft:
    dolphif
    PHP:
    private Map<UUID,IntegerafkPlayers;

    public 
    ConstructorFunction() {
        
    afkPlayers = new HashMap<UUID,Integer>();

        new 
    BukkitRunnable() {
          
            @
    Override
            
    public void run() {
                for (
    Player player Bukkit.getOnlinePlayers()) {
                    
    int current afkPlayers.get(player.getUniqueId());
                    if (
    current == null) {
                        
    current 0;
                    }
                    
    current++;
                    
    afkPlayers.remove(player.getUniqueId());
                    
    afkPlayers.put(player.getUniqueId(), current);
                }
            }
        }.
    runTaskTimer(PluginInstance20);
    }

    @
    EventHandler
    public void onChat(AsyncPlayerChatEvent e) {
        
    afkPlayers.remove(e.getPlayer().getUniqueId());
    }

    @
    EventHandler
    public void onMove(PlayerMoveEvent e) {
        
    afkPlayers.remove(e.getPlayer().getUniqueId());
    }

    @
    EventHandler
    public void onInteract(PlayerInteractEvent e) {
        
    afkPlayers.remove(e.getPlayer().getUniqueId());
    }

    public 
    boolean isPlayerAfkLongerThan(Player playerint seconds) {
        return (
    afkPlayers.get(player.getUniqueId()) >= seconds);
    }
     
  5. Автор темы
    NukerFall

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

    Баллы:
    76
    Большое спасибо, сейчас попробую.
     
  6. Автор темы
    NukerFall

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

    Баллы:
    76
    Когда нужно вызывать эту функцию? Сразу в onEnable()?
     
  7. dreadfaly

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

    Баллы:
    76
    Имя в Minecraft:
    dolphif
    Попробуй.
     
  8. Автор темы
    NukerFall

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

    Баллы:
    76
    Это ж конструктор...
     
  9. Krutius

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

    Баллы:
    76
    Имя в Minecraft:
    MrPencilBox
    Последнее редактирование: 29 мар 2019
  10. Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Essentials в помощь
     
  11. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Эти пакеты отправляются независимо от того - двигается игрок или нет.
    Выше накидали варианты решения этой задачи
     
  12. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Всегда было интересно, зачем вы онлайн-игроков храните по UUID. Расскажешь?
     
  13. Автор темы
    NukerFall

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

    Баллы:
    76
    мне запихнуть в Runnable() функцию updateData? и под getOnlinePlayers()?
     
  14. dreadfaly

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

    Баллы:
    76
    Имя в Minecraft:
    dolphif
    Привычка :eek:
     
  15. Krutius

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

    Баллы:
    76
    Имя в Minecraft:
    MrPencilBox
    Просто добавить в onEnable, другой код "на афк" удалить
     
Статус темы:
Закрыта.

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