(Решено)Не хилит хп после перезахода

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

Активный участник
Пользователь
Баллы
76
Если игроку до конца не восстановилось здоровье, я добавляю его в файл и при входе проверяю, если в файле есть игрок, тогда ставлю игроку снова 1 хп и опять запускаю таймер в котором восстанавливаю хп. Все работает, но если игрок перезаходит несколько раз, тогда хп хилиться примерно до середины и таймер останавливается, а также игрок удаляется их файла. (такое должно быть только в случает полного регена). В чем проблема?
PHP:
@SuppressWarnings("deprecation")
    @EventHandler
    public void onJoin(PlayerJoinEvent e)
    {
        Player p = e.getPlayer();
        if(Utils.chekPlayer(p))
        {
            p.setHealth(1);
            p.setHealthScale(1);
            p.teleport(new Location(p.getWorld(), main.getConfig().getDouble("settings.hospital.X"), main.getConfig().getDouble("settings.hospital.Y"), main.getConfig().getDouble("settings.hospital.Z"), main.getConfig().getInt("settings.hospital.YAW"), main.getConfig().getInt("settings.hospital.PITCH")));                                                   
            task = Bukkit.getScheduler().runTaskTimer(main, ()->
            {
                if(Utils.chekPlayer(p))
                {
                    if(p.getHealth() >= p.getMaxHealth() && p.getHealthScale() >= p.getHealth())
                    {
                        p.teleport(new Location(p.getWorld(), main.getConfig().getDouble("settings.hospitalNear.X"), main.getConfig().getDouble("settings.hospitalNear.Y"), main.getConfig().getDouble("settings.hospitalNear.Z"), main.getConfig().getInt("settings.hospitalNear.YAW"), main.getConfig().getInt("settings.hospitalNear.PITCH")));
                        Utils.removePlayer(p);
                         task.cancel();
                    }
                    else
                    {
                        p.setHealth(p.getHealth() + 1);
                        p.setHealthScale(p.getHealthScale() + 1);
                    }
                }
            }, 0, 20*main.getConfig().getInt("settings.count"));   
        }
 
Ну вообще, лучше проверять присутствие игрока по его имени. Попробуй, может заработает.
Код:
    public boolean checkPlayer(String name) {
        for(Player p : Bukkit.getOnlinePlayers()) {
            if(p.getName().equals(name)) return true;
        }
        return false;
    }
 
Последнее редактирование:
Ну вообще, лучше проверять присутствие игрока по его имени. Попробуй, может заработает.
Код:
    public boolean checkPlayer(String name) {
        for(Player p : Bukkit.getOnlinePlayers()) {
            if(p.getName().equals(name)) return true;
        }
        return false;
    }
Не уверен что этот метод проверки лучше.
Проблему я исправил самостоятельно.
Все равно спасибо!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх