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

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

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

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

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

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

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

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

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

    Баллы:
    16
    С целью приобретения опыта. Стало интересно попробовать взаимодействовать с Projectile.
    А так, event.getEntity().getShooter() возвращает ProjectileSource.
     
  5. 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("ЭТО БЫЛА КАКАЯ-ТА НЕВЬЕБИЧСКИ СТРАННАЯ ХЕРОТЕНЬ!! (Скорее всего - раздатчик)");
        }
    
     
  6. CoolBoy

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

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

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

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

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

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

    alexandrage Администратор

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

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

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

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

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

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