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

Помогите Как получить игрока в ProjectileHitEvent?

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

  1. Автор темы
    Earl Morze

    Earl Morze Новичок Пользователь

    Баллы:
    16
    Доброго всем вечера. Как получить игрока который кинул Projectile?
     
  2. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    event.getEntity().getShooter() вроде
    А зачем если не секрет?
    P.S.Просто интересно
     
  3. Автор темы
    Earl Morze

    Earl Morze Новичок Пользователь

    Баллы:
    16
    С целью приобретения опыта. Стало интересно попробовать взаимодействовать с Projectile.
    А так, event.getEntity().getShooter() возвращает ProjectileSource.
     
  4. Mr_RoboMan

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

    Баллы:
    123
    Код:
        @EventHandler
        public void projectileHitEvent(ProjectileHitEvent event) {
            ProjectileSource source = event.getEntity().getShooter();
            if (source instanceof Player) {
                Player player = (Player) source;
                System.out.println("ИТО БЫЛ ПЛАУЕР");
                return;
            }
            if (source instanceof Entity) {
                Entity entity = (Entity) source;
                System.out.println("ЭТО БЫЛ ИНТИТИ");
                return;
            }
            System.out.println("ЭТО БЫЛА КАКАЯ-ТА НЕВЬЕБИЧСКИ СТРАННАЯ ХЕРОТЕНЬ!! (Скорее всего - раздатчик)");
        }
    
     
  5. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Код:
    public void onHit(ProjectileHitEvent event) 
    {
        if (event.getEntity().getShooter() instanceof Player) 
        {
            Player player = (Player) event.getEntity().getShooter();
        }
    }
    
    Но запомни, instanceof - плохо.
     
  6. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    По этому нужно использовать getType().
    Код:
    if(event.getEntity().getShooter().getType()==EntityType.PLAYER)
     
  7. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    нельзя так. т.к шутер может быть раздатчик. А он не ентити
     
  8. alexandrage

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

    Баллы:
    173
    Сколько раз слышал про instanceof, но не было ни одного пруфа с тастами скорости.
     
  9. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    А это уже зависит от версии. К сожалению никак не привыкну ко всем нововведениям и живу в NMS.
    Не в скорости дело, а в не ООП подходе. По крайней мере в 1.8 на скорость влияет уже архитектура программы. Немного погуглив и найдя несколько тестов по скорости, оказывается скорость кастомного getType может быть ниже выполнения instanceof в разы и наоборот. Тут нужно проводить конкретный замер по ведру, чтобы придти к конкретным выводам.
     
  10. Автор темы
    Earl Morze

    Earl Morze Новичок Пользователь

    Баллы:
    16
    Спасибо за помощь!
     

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