[Ответ] EntityDamageByEntityEvent getDamager

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

gasfull

Старожил
Пользователь
Баллы
123
Имя в Minecraft
gasfull
Как вытащить игрока(Damager), если он например выстрелил например из лука? Или использовать другой Event?
 
Arrow arrow = (Arrow) getDamager ();
if arrow.getShooter () instanceof Player
Player p = (player) arrow.getShooter ();
 
Проверить, был ли нападающим игрок, в общем, можно так:
Java:
    @EventHandler
    public void onEntityEvent(EntityDamageByEntityEvent event) {
        if(event.getDamager() instanceof Player) {
            Player damager = (Player) event.getDamager();
        }
    }
А дальше можно делать разные проверки, используя переменную damager.
Если же нужно проверить, был ли нанесён урон именно с лука, то можно сделать как выше написали, но немного доработав:
Java:
    @EventHandler
    public void onEntityEvent(EntityDamageByEntityEvent event) {
        if(event.getDamager() instanceof Arrow) {
            Player damager = (Player) ((Arrow) event.getDamager()).getShooter();
        }
    }
 
Если же нужно проверить, был ли нанесён урон именно с лука, то можно сделать как выше написали, но немного доработав:
Java:
    @EventHandler
    public void onEntityEvent(EntityDamageByEntityEvent event) {
        if(event.getDamager() instanceof Arrow) {
            Player damager = (Player) ((Arrow) event.getDamager()).getShooter();
        }
    }
а то, что getShooter может быть не игрок ни разу, тебе видимо по**й? бездарность
 
а то, что getShooter может быть не игрок ни разу, тебе видимо по**й? бездарность
Ну тогда добавляется одна простая проверка.
Java:
    @EventHandler
    public void onEntityEvent(EntityDamageByEntityEvent event) {
        if(event.getDamager() instanceof Arrow && ((Arrow) event.getDamager()).getShooter() instanceof Player) {
            Player damager = (Player) ((Arrow) event.getDamager()).getShooter();
        }
    }
 
Java:
        if (e.getDamager() instanceof Arrow && ((Arrow)e.getDamager()).getShooter() instanceof Player) {
            Arrow proj = (Arrow)e.getDamager();
            Player p2 = (Player)proj.getShooter();
             e.setDamage(1000000);
 
Но если задача состоит именно в том, что бы получить игрока, который выпустил стрелу, то лучше использовать ивент EntityShootBowEvent:
Java:
    @EventHandler
    public void onEntityShootBowEvent(EntityShootBowEvent event) {
        if(((Arrow) event.getProjectile()).getShooter() instanceof Player) {
            Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
        }
    }
Только я не уверен, можно ли стрелять чем-то ещё, кроме стрел.Если можно, то стоит добавить проверку:
Java:
    @EventHandler
    public void onEntityShootBowEvent(EntityShootBowEvent event) {
        if(event.getProjectile() instanceof Arrow && ((Arrow) event.getProjectile()).getShooter() instanceof Player) {
            Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
        }
    }
 
Но если задача состоит именно в том, что бы получить игрока, который выпустил стрелу, то лучше использовать ивент EntityShootBowEvent:
Java:
    @EventHandler
    public void onEntityShootBowEvent(EntityShootBowEvent event) {
        if(((Arrow) event.getProjectile()).getShooter() instanceof Player) {
            Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
        }
    }
Только я не уверен, можно ли стрелять чем-то ещё, кроме стрел.Если можно, то стоит добавить проверку:
Java:
    @EventHandler
    public void onEntityShootBowEvent(EntityShootBowEvent event) {
        if(event.getProjectile() instanceof Arrow && ((Arrow) event.getProjectile()).getShooter() instanceof Player) {
            Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
        }
    }
Projectile - снежки, яйца, стрелы.
 
Projectile - снежки, яйца, стрелы.
ммм...fireball, snowball, нет?
мне кажется, ты вобще не уверен, о чем пишешь.
Да, но я не уверен, будет ли этот ивент вызываться при кидании снежков и подобного.Сейчас проверю.
 
Да, но я не уверен, будет ли этот ивент вызываться при кидании снежков и подобного.Сейчас проверю.
а хотя при shootbow думаю что нет, чето недосмотрел хД
разве что если из лука вместо стрелы что-нибудь вылетит
 
а хотя при shootbow думаю что нет, чето недосмотрел хД
разве что если из лука вместо стрелы что-нибудь вылетит
Вот и я о том же, не знаю, что ещё можно выстрелить из лука, кроме стрелы.Всё верно, при кидании снежков ивент EntityShootBowEvent не вызывается.Но это только снежки, возможно на что-то ещё вызывается, но вероятность этого достаточно мала.
 
Вот и я о том же, не знаю, что ещё можно выстрелить из лука, кроме стрелы.Всё верно, при кидании снежков ивент EntityShootBowEvent не вызывается.Но это только снежки, возможно на что-то ещё вызывается, но вероятность этого достаточно мала.
Раздатчик ?
 
Вот и я о том же, не знаю, что ещё можно выстрелить из лука, кроме стрелы.Всё верно, при кидании снежков ивент EntityShootBowEvent не вызывается.Но это только снежки, возможно на что-то ещё вызывается, но вероятность этого достаточно мала.
Мой рабочий код выше смотри -_-
 
Нет.
Мой рабочий код выше смотри -_-
Зачем мне твой код?
В общем, в этом ивенте есть ещё метод setProjectile, поэтому есть и методы проверки.А как я понял, по дефолту это может быть только стрела.
 
JavaScript:
@EventHandler
    public void onDead(EntityDamageByEntityEvent e){
        if (e.getEntity()==null){
            return;
        }
        Player Damager = null;
        if (e.getDamager() instanceof Projectile){
            Projectile Pj = (Projectile) e.getDamager();
            if (Pj.getShooter() instanceof Player){
                Damager = (Player) Pj.getShooter();
            }
        }else if (e.getDamager() instanceof Player){
            Damager = (Player)e.getDamager();
        }
       
        if (e.getEntity()instanceof Player && Damager!=null){
//if Player Damage Player
}
}

Всем спасибо!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх