Помогите (Решено)Восстановление хп после респавна

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

reZero

Активный участник
Пользователь
Баллы
76
Как можно реализовать восстановление хп после респавна? Чтобы игроку раз в 2 секунды регенилось 1 хп ?
 
Код:
@EventHandler
public void onRespawn(PlayerRespawnEvent)
{
    Player p = e.getPlayer();
    p.setHealth(1);
    BukkitTask task = Bukkit.getScheduler().runTaskTimer(this, ()->{
    if(p.getHealth() >= p.getMaxHealth()) task.cancelTask();
        p.setHealth(p.getHealth() + 1);
}, 40);
}
Что-то такое.
 
Как вариант настроить флаг на реген хп в регионе спавн.
 
Код:
@EventHandler
public void onRespawn(PlayerRespawnEvent)
{
    Player p = e.getPlayer();
    p.setHealth(1);
    BukkitTask task = Bukkit.getScheduler().runTaskTimer(this, ()->{
    if(p.getHealth() >= p.getMaxHealth()) task.cancelTask();
        p.setHealth(p.getHealth() + 1);
}, 40);
}
Что-то такое.
Выдает ошибку, что хп не может быть больше 20
Если я не ошибаюсь, то при спавне хп почему-то не ставится 1 и из-за этого вызывается такая ошибка
 
Последнее редактирование:
Выдает ошибку, что хп не может быть больше 20
Если я не ошибаюсь, то при спавне хп почему-то не ставится 1 и из-за этого вызывается такая ошибка
Кинь ошибку
 
PHP:
[13:10:56] [Server thread/WARN]: [hosptial] Task #5 for hosptial v1.0.1 generated an exception
java.lang.IllegalArgumentException: Health must be between 0 and 20.0(21.0)
    at org.bukkit.craftbukkit.v1_11_R1.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:99) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at com.ReZero.HO.Events.Respawn.lambda$0(Respawn.java:92) ~[?:?]
    at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:353) [spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:738) [spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.11.2.jar:git-Spigot-3fb9445-2b6c9f4]
    at
 
Почему-то, после респавна мне не устанавливается 1 хп, я не знаю почему
 
Почему-то, после респавна мне не устанавливается 1 хп, я не знаю почему
Как вариант подождать 1 тик после респавна и сделать тоже самое. (не точная информация, очень не точная). Щас попробую у себя сделать
 
Последнее редактирование:
Код:
@EventHandler
public void onRespawn(PlayerRespawnEvent)
{
    Player p = e.getPlayer();
    p.setHealth(1);
    BukkitTask task = Bukkit.getScheduler().runTaskTimer(this, ()->{
    if(p.getHealth() >= p.getMaxHealth()) task.cancelTask();
        p.setHealth(p.getHealth() + 1);
}, 40);
}
Что-то такое.
А как я могу остановить task ? Если я пишу task.cancel(), пишет что task не инициализирована.
 
@EventHandler
Код:
BukkitTask task = null;

public void onRespawn(PlayerRespawnEvent)
{
   Player p = e.getPlayer();
   p.setHealth(1);
   task = Bukkit.getScheduler().runTaskTimer(this, ()->{
   if(p.getHealth() <= p.getMaxHealth()) {
       p.setHealth(p.getHealth() + 1);
   } else {
       task.cancelTask();
   }, 40);
}
 
Последнее редактирование:
Последний вопрос.
Как можно сделать чтобы после смерти тпхало на корды из конфига?
я сделал через e.getSpawnLocation().set...
все работает, но не совсем точно. Почему-то, меня тпхает на блок вперед.
Как можно сделать чтоб спавн происходил именно на том блоке, на котором я установил координаты?
P.S координаты сохраняю в конфиг при помощи команды (сохраняю x,y,z,yaw,pitch)
 
Последний вопрос.
Как можно сделать чтобы после смерти тпхало на корды из конфига?
я сделал через e.getSpawnLocation().set...
все работает, но не совсем точно. Почему-то, меня тпхает на блок вперед.
Как можно сделать чтоб спавн происходил именно на том блоке, на котором я установил координаты?
P.S координаты сохраняю в конфиг при помощи команды (сохраняю x,y,z,yaw,pitch)
Код:
    @EventHandler
    public void onRespawn(PlayerRespawnEvent e) {
        Player p = e.getPlayer();
        Location loc = ; //Тут получение твоей локации.
        e.setRespawnLocation(loc); //Установка локации.
    }
 
Все равно криво спавнит
Кажется понял, вот код:
Код:
    @EventHandler
    public void onRespawn(PlayerRespawnEvent e) {
        Location loc = new Location(Bukkit.getWorld(plugin.getConfig().getString("world")), plugin.getConfig().getDouble("x") + .500, 67, plugin.getConfig().getDouble("z") + .500); //Тут получение твоей локации.
        e.setRespawnLocation(loc); //Установка локации.
    }
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх