Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Ответ] EntityDamageByEntityEvent getDamager

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

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

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

    Баллы:
    123
    Skype:
    gasfull2
    Имя в Minecraft:
    gasfull
    Как вытащить игрока(Damager), если он например выстрелил например из лука? Или использовать другой Event?
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Arrow arrow = (Arrow) getDamager ();
    if arrow.getShooter () instanceof Player
    Player p = (player) arrow.getShooter ();
     
  4. AtomicInteger

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

    Баллы:
    46
    Проверить, был ли нападающим игрок, в общем, можно так:
    Код:
        @EventHandler
        public void onEntityEvent(EntityDamageByEntityEvent event) {
            if(event.getDamager() instanceof Player) {
                Player damager = (Player) event.getDamager();
            }
        }
    А дальше можно делать разные проверки, используя переменную damager.
    Если же нужно проверить, был ли нанесён урон именно с лука, то можно сделать как выше написали, но немного доработав:
    Код:
        @EventHandler
        public void onEntityEvent(EntityDamageByEntityEvent event) {
            if(event.getDamager() instanceof Arrow) {
                Player damager = (Player) ((Arrow) event.getDamager()).getShooter();
            }
        }
     
  5. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    46
    а то, что getShooter может быть не игрок ни разу, тебе видимо по**й? бездарность
     
  6. AtomicInteger

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

    Баллы:
    46
    Ну тогда добавляется одна простая проверка.
    Код:
        @EventHandler
        public void onEntityEvent(EntityDamageByEntityEvent event) {
            if(event.getDamager() instanceof Arrow && ((Arrow) event.getDamager()).getShooter() instanceof Player) {
                Player damager = (Player) ((Arrow) event.getDamager()).getShooter();
            }
        }
     
  7. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Скелетон? Диспенсер? Или эти все вещи кастуются к игроку?
     
  8. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Код:
            if (e.getDamager() instanceof Arrow && ((Arrow)e.getDamager()).getShooter() instanceof Player) {
                Arrow proj = (Arrow)e.getDamager();
                Player p2 = (Player)proj.getShooter();
                 e.setDamage(1000000);
     
  9. AtomicInteger

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

    Баллы:
    46
    Но если задача состоит именно в том, что бы получить игрока, который выпустил стрелу, то лучше использовать ивент EntityShootBowEvent:
    Код:
        @EventHandler
        public void onEntityShootBowEvent(EntityShootBowEvent event) {
            if(((Arrow) event.getProjectile()).getShooter() instanceof Player) {
                Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
            }
        }
    Только я не уверен, можно ли стрелять чем-то ещё, кроме стрел.Если можно, то стоит добавить проверку:
    Код:
        @EventHandler
        public void onEntityShootBowEvent(EntityShootBowEvent event) {
            if(event.getProjectile() instanceof Arrow && ((Arrow) event.getProjectile()).getShooter() instanceof Player) {
                Player player = (Player) ((Arrow) event.getProjectile()).getShooter();
            }
        }
     
  10. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Projectile - снежки, яйца, стрелы.
     
  11. AtomicInteger

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

    Баллы:
    46
    Да, но я не уверен, будет ли этот ивент вызываться при кидании снежков и подобного.Сейчас проверю.
     
  12. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    46
    а хотя при shootbow думаю что нет, чето недосмотрел хД
    разве что если из лука вместо стрелы что-нибудь вылетит
     
  13. AtomicInteger

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

    Баллы:
    46
    Вот и я о том же, не знаю, что ещё можно выстрелить из лука, кроме стрелы.Всё верно, при кидании снежков ивент EntityShootBowEvent не вызывается.Но это только снежки, возможно на что-то ещё вызывается, но вероятность этого достаточно мала.
     
  14. Exception_Prototype

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

    Баллы:
    46
    Раздатчик ?
     
  15. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Мой рабочий код выше смотри -_-
     
  16. AtomicInteger

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

    Баллы:
    46
    Нет.
    Зачем мне твой код?
    В общем, в этом ивенте есть ещё метод setProjectile, поэтому есть и методы проверки.А как я понял, по дефолту это может быть только стрела.
     
  17. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    куда такие костыли?
    event.getEntity().getType()
     
  18. Автор темы
    gasfull

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

    Баллы:
    123
    Skype:
    gasfull2
    Имя в Minecraft:
    gasfull
    Код:
    @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
    }
    }
    [DOUBLEPOST=1480520266,1480520233][/DOUBLEPOST]Всем спасибо!
     
Статус темы:
Закрыта.

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