Помогите WitherSkull

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

Freeos

Участник
Пользователь
Баллы
36
Имя в Minecraft
freeos
Я пытаюсь сделать плагин, который при использовании некого предмета (PlayerInteractEvent), будет запускать голову скелета (черного такого - иссушителя). Впрочем, с запуском головы быстро справился:
Код:
e.getPlayer().launchProjectile(WitherSkull.class, e.getPlayer().getEyeLocation().getDirection().multiply(2));
shooters.add(e.getPlayer())
Далее я отлавливаю EntityDamageByEntityEvent, чтобы "найти" (если возможно) игрока у которого голова попала. И вот тут у меня проблема суть которой заключается в том, что EntityDamageByEntityEvent не может "отловить" само попадание (по крайней мере у меня не выходит) головы в игрока:
Код:
 @EventHandler
    public void EntityDamageByEntity(EntityDamageByEntityEvent e) {
        if (e.getEntity() instanceof Player) {
            if (e.getDamager() instanceof WitherSkull) {
                WitherSkull ws = (WitherSkull) e.getDamager();
                if (ws.getShooter() instanceof Player && shooters.contains(ws.getShooter())) {
                    ((Player) e.getEntity()).setWalkSpeed(0.0F);
                    ((Player) e.getEntity()).addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 10000, 128));
                    Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(),
                            new Runnable() {
                                @Override
                                public void run() {
                                    ((Player) e.getEntity()).setWalkSpeed(0.2F);
                                    ((Player) e.getEntity()).removePotionEffect(PotionEffectType.JUMP);
                                }
                            }, 40L);
                    shooters.remove(ws.getShooter());
                }
            }
}
Возможно я что то делаю не так, хотя на иностранных форумах, на которых я пытался найти решение, все было так как у меня.
 
В том дело, что нету :D. Оно просто "не хочет" "видеть"/"читать", вот это:
Код:
if (e.getDamager() instanceof WitherSkull)
А зачем вы используете долгую операцию instanceof там, где это имеет мало смысла?
Для сущностей предусмотрен метод getType(), для игрока -- getType()==EntityType.PLAYER, для черепа иссушителя getType()==EntityType.WITHER_SKULL.
 
А разве этот череп не взрывается? Если да, то тогда EntityDamageByEntityEvent тут неуместен.
 
А разве этот череп не взрывается? Если да, то тогда EntityDamageByEntityEvent тут неуместен.
Если можете, то дайте пример, как сделать, чтобы "перехватить" сам тот эвент, то есть, чтобы дальше там например эффект наложить игроку, в которого я попала, или еще что то. Ну даже когда она (голова) взрывается, то наверное она почему это делает, значит она попадает в игрока, и тогда уже может взорваться (я так думаю).
А зачем вы используете долгую операцию instanceof там, где это имеет мало смысла?
Для сущностей предусмотрен метод getType(), для игрока -- getType()==EntityType.PLAYER, для черепа иссушителя getType()==EntityType.WITHER_SKULL.
Учту :good:

Только что провел некоторые "тесты", и выяснилось, что EntityDamageByEntityEvent все таки уместен (ну может есть еще что то другое разве, кроме EntityDamageEvent - он не совсем мне подходит, так как нужно еще мне взять damager'а). При проверке, я взял DamageCause. Выяснилось что это тип ENTITY_ATTACK. А сам e.getDamager() это (CraftPlayer) - игрок который выпустил голову. Теперь осталось доделать некоторые костыли.
Возможно я опять что то не так сделал. Если знаете, то скажите, что еще можно сделать.
 
Последнее редактирование:
Назад
Верх