Помогите Почему я не могу телепортировать мёртвого зомби?

Статус
Закрыто для дальнейших ответов.

pro100koder

Активный участник
Пользователь
Баллы
76
В общем, многие знают плагин crackshot. Но в нём есть одна ну очень надоевшая проблема: патроны застревают в мёртвых мобах/игроках! Я придумал решение: написать небольшой плагин, который будет убирать этих зомби, которые умерли... Но вот проблема: ничего не работает( Как только не старался, как не извращался с Location, всегда один и тот же результат: НИ-ФИ-ГА. Вот код, который сейчас сидит и ленится работать у меня:
Код:
@EventHandler
    public void onDeath(EntityDeathEvent e){
        if(e.getEntity() instanceof Zombie){
            e.getEntity().teleport(new Location(Bukkit.getWorld("world"), 0, 0, 0));
        }
    }
P. S. Это уже не первый раз, когда я не могу телепортировать. В другой миниигре, если игрок умер, то он переводится в гм-3. Но если этот игрок умудрился умереть в пустоте, то он будет умирать бесконечно... Потому, что не работает телепорт 0_0
 
Потому что событие смерти вызывается уже тогда, когда ты умер, а не когда ты собираешся умирать. Используй EntityDamageEvent, узнавай, что этот дамаг будет смертельным, отменяй и телепортируй.
 
Потому что событие смерти вызывается уже тогда, когда ты умер, а не когда ты собираешся умирать. Используй EntityDamageEvent, узнавай, что этот дамаг будет смертельным, отменяй и телепортируй.
Блин, я так часто пишу что-то большое сам, без проблем, а тут вдруг такая мелочь, которую я не могу сам решить... Боже, да простят меня форумчане за этот тупой вопрос, но... Как проверить, был ли дамаг смертельным?
Код:
@EventHandler
    public void onDeath(EntityDamageByEntityEvent e){
        if(e.getEntity() instanceof Zombie){
            Zombie z = (Zombie) e.getEntity();
            e.getDamager().sendMessage(""+z.getHealth());
            if(z.getHealth()<=0){
                e.getDamager().sendMessage("killer");
                e.getEntity().teleport(new Location(Bukkit.getWorld("world"), 0, 0, 0));
            }
        }
    }
*EntityDamageByEntityEvent я запихал сюда, чтобы тестить состояние зомби. Оказывается, жизни этого зомби показываются до удара (было у зомби 1 жизнь, его ударили, стало 0, а в коде осталось 1). Ну и как тут проверять? Как вариант, вычислять из этой жизни урон, а потом проверять, но это как-то... Говнокодерски?
 
убирать этих зомби, которые умерли
А так не покатит? Правда подозреваю, что анимация смерти будет на половине заканчиваться - моб просто будет пропадать.
PHP:
    @EventHandler
    public void onDeath(EntityDeathEvent e){
        if(e.getEntity() instanceof Zombie){
            e.getEntity().remove();
        }
    }
Как вариант, вычислять из этой жизни урон, а потом проверять, но это как-то... Говнокодерски?
Да в целом нет. Так всегда и делают...
 
Блин, я так часто пишу что-то большое сам, без проблем, а тут вдруг такая мелочь, которую я не могу сам решить... Боже, да простят меня форумчане за этот тупой вопрос, но... Как проверить, был ли дамаг смертельным?
Код:
@EventHandler
    public void onDeath(EntityDamageByEntityEvent e){
        if(e.getEntity() instanceof Zombie){
            Zombie z = (Zombie) e.getEntity();
            e.getDamager().sendMessage(""+z.getHealth());
            if(z.getHealth()<=0){
                e.getDamager().sendMessage("killer");
                e.getEntity().teleport(new Location(Bukkit.getWorld("world"), 0, 0, 0));
            }
        }
    }
*EntityDamageByEntityEvent я запихал сюда, чтобы тестить состояние зомби. Оказывается, жизни этого зомби показываются до удара (было у зомби 1 жизнь, его ударили, стало 0, а в коде осталось 1). Ну и как тут проверять? Как вариант, вычислять из этой жизни урон, а потом проверять, но это как-то... Говнокодерски?
В начальной школе учат решать примеры на вычитание. Или все, уже ничему там не учат?
Тогда все - выбрасывай.
 
А так не покатит? Правда подозреваю, что анимация смерти будет на половине заканчиваться - моб просто будет пропадать.
PHP:
    @EventHandler
    public void onDeath(EntityDeathEvent e){
        if(e.getEntity() instanceof Zombie){
            e.getEntity().remove();
        }
    }

Да в целом нет. Так всегда и делают...
Нормально всё, просто вместо анимации смерти можно напускать партиклов. Кстати, метод remove() не заметил ^_^
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх