Помогите Реген хп в течении времени

  • Автор темы Автор темы reZero
  • Дата начала Дата начала

reZero

Активный участник
Пользователь
Баллы
76
Всем привет. У меня есть плагин на мини-больницу.
Суть такая: Игрок умирает, возрождается в больнице с 1 хп, и его хилит по +1 хп в 2 секунды.
Есть проблема, может я чего-то не понимаю... Никак не могу с ней справится.
Игрок возрождается, его хилит как надо, но примерно на середине здоровья дает по +2 хп и в самом конце дохиливает +1 хп. Я не понимаю как так выходит.
Вот метод регена хп...
P.S за говнокод не судите строго =(

PHP:
 public static void onRespawnRegenHealth(Player p) 
            new BukkitRunnable() 
            {
                @Override
                public void run()
                {
                    if(Respawn.playerInHospital.containsKey(p.getName())
                    {
                        if(p.getHealth() >= p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue() && p.getHealthScale() >= p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue())
                        {
                            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")));
                            p.setFoodLevel(20);
                            p.sendTitle(Utils.getColor("&6Вы вылечились"), Utils.getColor("&aТеперь у Вас ничего не болит xD"), 20, 40, 20);
                            Respawn.playerInHospital.remove(p.getName());
                            this.cancel();
                            return; 
                        }
                        else
                        {
                            p.setHealth(p.getHealth() + 1);
                            p.setHealthScale(p.getHealthScale() + 1);
                        }
                    }
                    else
                    {
                        this.cancel();
                        return;
                    }
                }
            }.runTaskTimer(main, 0, 20*main.getConfig().getLong("settings.count")); 
        }
 
Ты сначала регенишь, а потом даешь еще половину сердца?
 
Ты сначала регенишь, а потом даешь еще половину сердца?
Я проверяю, если у игрока фулл хп, я его тпхаю из больницы, а если не фулл, тогда даю +1 хп, тобишь пол сердца

heal-delay и heal-amount из wg тебе помогут. Ничего костылять не придется.
ты имеешь ввиду API wg?
 
Я проверяю, если у игрока фулл хп, я его тпхаю из больницы, а если не фулл, тогда даю +1 хп, тобишь пол сердца


ты имеешь ввиду API wg?
Да тупо флагами на регион. Будет хилять. И там телепортируй когда дохилит.
 
Код:
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
    for (Player player:playersInHospital) {
        int health = player.getHealth()+0.5;
        player.setHealth(health);
        if (health<player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) continue;
        player.teleport(location);
        playersInHospital.remove(player);
    }
}, 0, 40L);
playerinhospital - это хэш мап string, player
Возможно, это мои не знания явы всплывают, но я не совсем понимаю, как ты собрался перебрать хэш мап
 
Если ты не считаешь это костылём, то куда тебе на лечение скидывать?
Ни разу не считаю. Так сложно отследить где находится игрок и сколько у него хп?
Если есть готовая хилка в wg че и нет.
 
Последнее редактирование:
Код:
Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> {
    for (Player player:playersInHospital) {
        int health = player.getHealth()+0.5;
        player.setHealth(health);
        if (health<player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) continue;
        player.teleport(location);
        playersInHospital.remove(player);
    }
}, 0, 40L);
Да, давай, детка! Меняй здоровье игрока асинхронно, пусть Bukkit API сойдёт с ума.
Для кого везде пишут это?
javadocs сказал(а):
Asynchronous tasks should never access any API in Bukkit.
 
Назад
Верх