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

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

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

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

    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
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Потому что событие смерти вызывается уже тогда, когда ты умер, а не когда ты собираешся умирать. Используй EntityDamageEvent, узнавай, что этот дамаг будет смертельным, отменяй и телепортируй.
     
  3. Автор темы
    pro100koder

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

    Баллы:
    76
    Блин, я так часто пишу что-то большое сам, без проблем, а тут вдруг такая мелочь, которую я не могу сам решить... Боже, да простят меня форумчане за этот тупой вопрос, но... Как проверить, был ли дамаг смертельным?
    Код:
    @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). Ну и как тут проверять? Как вариант, вычислять из этой жизни урон, а потом проверять, но это как-то... Говнокодерски?
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    А так не покатит? Правда подозреваю, что анимация смерти будет на половине заканчиваться - моб просто будет пропадать.
    PHP:
        @EventHandler
        
    public void onDeath(EntityDeathEvent e){
            if(
    e.getEntity() instanceof Zombie){
                
    e.getEntity().remove();
            }
        }
    Да в целом нет. Так всегда и делают...
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    В начальной школе учат решать примеры на вычитание. Или все, уже ничему там не учат?
    Тогда все - выбрасывай.
     
  6. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Нет не говнокодерски. Норм вар.
     
  7. Автор темы
    pro100koder

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

    Баллы:
    76
    Нормально всё, просто вместо анимации смерти можно напускать партиклов. Кстати, метод remove() не заметил ^_^
     
Статус темы:
Закрыта.

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