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

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

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

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

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

    Баллы:
    76
    Как можно реализовать восстановление хп после респавна? Чтобы игроку раз в 2 секунды регенилось 1 хп ?
     
  2. Energy warrior

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

    Баллы:
    76
    Код:
    @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);
    }
    
    Что-то такое.
     
  3. Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Как вариант настроить флаг на реген хп в регионе спавн.
     
  4. Автор темы
    reZero

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

    Баллы:
    76
    Выдает ошибку, что хп не может быть больше 20
    Если я не ошибаюсь, то при спавне хп почему-то не ставится 1 и из-за этого вызывается такая ошибка
     
    Последнее редактирование: 22 апр 2018
  5. Автор темы
    reZero

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

    Баллы:
    76
    Вообще не вариант, мне нужен именно самопис
     
  6. bristol

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

    Баллы:
    46
    Кинь ошибку
     
  7. Автор темы
    reZero

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

    Баллы:
    76
    PHP:
    [13:10:56] [Server thread/WARN]: [hosptialTask #5 for hosptial v1.0.1 generated an exception
    java.lang.IllegalArgumentExceptionHealth 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 
     
  8. Автор темы
    reZero

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

    Баллы:
    76
    Почему-то, после респавна мне не устанавливается 1 хп, я не знаю почему
     
  9. bristol

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

    Баллы:
    46
    Как вариант подождать 1 тик после респавна и сделать тоже самое. (не точная информация, очень не точная). Щас попробую у себя сделать
     
    Последнее редактирование: 22 апр 2018
  10. Автор темы
    reZero

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

    Баллы:
    76
    Тоже была такая идея. Не пробовал
     
  11. Автор темы
    reZero

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

    Баллы:
    76
    Заработало, видимо, стоило мне попробовать сделать это с самого начала
     
  12. Автор темы
    reZero

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

    Баллы:
    76
    А как я могу остановить task ? Если я пишу task.cancel(), пишет что task не инициализирована.
     
  13. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    @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);
    }
     
    Последнее редактирование: 22 апр 2018
  14. Автор темы
    reZero

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

    Баллы:
    76
    Спасибо!
     
  15. Автор темы
    reZero

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

    Баллы:
    76
    Последний вопрос.
    Как можно сделать чтобы после смерти тпхало на корды из конфига?
    я сделал через e.getSpawnLocation().set...
    все работает, но не совсем точно. Почему-то, меня тпхает на блок вперед.
    Как можно сделать чтоб спавн происходил именно на том блоке, на котором я установил координаты?
    P.S координаты сохраняю в конфиг при помощи команды (сохраняю x,y,z,yaw,pitch)
     
  16. bristol

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

    Баллы:
    46
    Код:
        @EventHandler
        public void onRespawn(PlayerRespawnEvent e) {
            Player p = e.getPlayer();
            Location loc = ; //Тут получение твоей локации.
            e.setRespawnLocation(loc); //Установка локации.
        }
     
  17. Nikolai_Faint

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

    Баллы:
    96
    /setworldspawn
    (И без явы сойдет)
     
  18. Автор темы
    reZero

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

    Баллы:
    76
    Все равно криво спавнит
     
  19. bristol

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

    Баллы:
    46
    Кажется понял, вот код:
    Код:
        @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); //Установка локации.
        }
     
  20. Автор темы
    reZero

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

    Баллы:
    76
    Все работает. Спасибо
     
Статус темы:
Закрыта.

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