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

Помогите Узнать, кто домажет

Discussion in 'Разработка плагинов для новичков' started by makssof, Mar 22, 2014.

  1. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Хай ппл. Долго (Очень долго) думал, но так и не додумался - как узнать кто домажет?
    То бишь
    Code:
    паблик воид онГетДамаге(ЭнтитиДамагеЭвент е){
      иф(дамагер == зомби){
        //...
      }
    }
    Знаю про ДамагеКаузе.НАПАДЕНИЕ_ЭНТИТИ (Не помню как точно там.. (Сижу с телефона)), но мне это всё равно не поможет.
    Как узнать?
     
  2. Хостинг MineCraft
    <
  3. StealerSlain

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

    Trophy Points:
    88
    Имя в Minecraft:
    StealerSlain
    EntityDamageEvent EntityDamageByEntityEvent
    e.getDamager()
     
    makssof and MrSharky like this.
  4. GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    @EventHandler
    public void OnEntityDamage (EntityDamageByEntityEvent event) {
    if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) {
    Player player = (Player) event.getDamager();
    Player player2 = (Player) event.getEntity();
    player.sendMessage("Вы ударили " + player2.getName());
    player2.sendMessage("Вас ударил " + player.getName());
    }
    }
    Вот, как-то так=))
     
    makssof likes this.
  5. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Окей, спасибо. Ещё одна проблема:
    Code:
    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e){
        if(e.getEntity().getKiller().getType() == EntityType.ZOMBIE){
            Bukkit.broadcastMessage("Да");
        }
        else{
            Bukkit.broadcastMessage("Нет");
        }
    }
    Вызывает NullPointerException. Почему?
    @Den_Abr
     
  6. BeYkeR

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

    Trophy Points:
    173
    Возможно убийцы не существует, например : лава , высота и т.д. не связанное с Entity
     
  7. JustBlender

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

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    У меня такая же проблема была, решил проверять через instanceof :D
     
  8. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Но. Эту проверку я проводил прямиком на зомби. Что это исключение будет выскакивать, если не будет связано с Энтити, это и так понятно.

    Спасибо за совет, попробую. :)[DOUBLEPOST=1395672873,1395668008][/DOUBLEPOST]
    Code:
    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e){
        if(e.getEntity().getKiller() instanceof Zombie){
            Bukkit.broadcastMessage("Да");
        }
        else{
            Bukkit.broadcastMessage("Нет");
        }
    }
    "Нет".. Почему?.. :([DOUBLEPOST=1395672915][/DOUBLEPOST]Мне надо выяснить, зомби ли убил игрока. Если да, то что то делать..
     
  9. aceJKE

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

    Trophy Points:
    123
    Посмотри что в плагине DeathMessages
     
  10. BeYkeR

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

    Trophy Points:
    173
    Code:
    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e){
    Player player = e.getEntity();
        if(player.getKiller() != null && player.getKiller() instanceof Zombie){
            Bukkit.broadcastMessage("Да");
        }else{
            Bukkit.broadcastMessage("Нет");
        }
    }
    Попробуй так.
     
  11. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А вы смотрели, что возвращает getKiller()?
     
  12. BeYkeR

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

    Trophy Points:
    173
    Пардон, но я нашел кое-что у наших "собратьев" :
    Code:
    public static Entity getKiller(EntityDeathEvent event) {
        EntityDamageEvent entityDamageEvent = event.getEntity().getLastDamageCause();
        if ((entityDamageEvent != null) && !entityDamageEvent.isCancelled() && (entityDamageEvent instanceof EntityDamageByEntityEvent)) {
            Entity damager = ((EntityDamageByEntityEvent) entityDamageEvent).getDamager();
            if (damager instanceof Projectile) {
                LivingEntity shooter = ((Projectile) damager).getShooter();
                if (shooter != null) return shooter;
            }
            return damager;
        }
        return null;
    }
     
    makssof likes this.
  13. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Прикольное решение. Сгодился бы ещё дамаг с проверкой последнего ударяющего.
     
  14. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Воу, спасибо, попробую. Однако хитро придумано!
     
  15. JustBlender

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

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Кстати, может не e.getEntity().getType(), а e.getEntity().getEntityType()?
     
  16. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Но.
    Есть два метода на эту тему:
    и
    И только первый возвращает EntityType
     
  17. JustBlender

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

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Я только сейчас в коде полазил своем, оказывается я использовал getEntityType() метод :D И все работает
     
  18. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    Большое спасибо! Thank you very much! آپ کا بہت بہت شکریہ! ຂອບໃຈຫຼາຍໆເດີ້! Terima kasih banyak! Σας ευχαριστώ πολύ! बहुत बहुत धन्यवाद! Вялікі дзякуй! ¡Muchas gracias! ತುಂಬಾ ಧನ್ಯವಾದಗಳು! 非常感謝你! תודה רבה לך! Ich danke Ihnen tausendmal!
     
  19. JustBlender

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

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Нихера себе, теперь скопирую это и так всегда буду благодарить :D
     
  20. Автор темы
    makssof

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

    Trophy Points:
    103
    Skype:
    makssofez
    =D
    Это примерно 1/4 всех языков translate.google.ru
     
    Last edited: Jul 12, 2014
  21. BeYkeR

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

    Trophy Points:
    173
    Надо просто хоть чуть-чуть знать английский и хорошо пользоваться гуглом))
     

Share This Page