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

  • Автор темы Автор темы makssof
  • Дата начала Дата начала

makssof

Старожил
Девелопер
Пользователь
Баллы
103
Хай ппл. Долго (Очень долго) думал, но так и не додумался - как узнать кто домажет?
То бишь
Код:
паблик воид онГетДамаге(ЭнтитиДамагеЭвент е){
  иф(дамагер == зомби){
    //...
  }
}
Знаю про ДамагеКаузе.НАПАДЕНИЕ_ЭНТИТИ (Не помню как точно там.. (Сижу с телефона)), но мне это всё равно не поможет.
Как узнать?
 
@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());
}
}
Вот, как-то так=))
 
Окей, спасибо. Ещё одна проблема:
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
    if(e.getEntity().getKiller().getType() == EntityType.ZOMBIE){
        Bukkit.broadcastMessage("Да");
    }
    else{
        Bukkit.broadcastMessage("Нет");
    }
}
Вызывает NullPointerException. Почему?
@Den_Abr
 
Окей, спасибо. Ещё одна проблема:
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
    if(e.getEntity().getKiller().getType() == EntityType.ZOMBIE){
        Bukkit.broadcastMessage("Да");
    }
    else{
        Bukkit.broadcastMessage("Нет");
    }
}
Вызывает NullPointerException. Почему?
@Den_Abr
Возможно убийцы не существует, например : лава , высота и т.д. не связанное с Entity
 
Окей, спасибо. Ещё одна проблема:
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
    if(e.getEntity().getKiller().getType() == EntityType.ZOMBIE){
        Bukkit.broadcastMessage("Да");
    }
    else{
        Bukkit.broadcastMessage("Нет");
    }
}
Вызывает NullPointerException. Почему?
@Den_Abr
У меня такая же проблема была, решил проверять через instanceof :D
 
Возможно убийцы не существует, например : лава , высота и т.д. не связанное с Entity
Но. Эту проверку я проводил прямиком на зомби. Что это исключение будет выскакивать, если не будет связано с Энтити, это и так понятно.

У меня такая же проблема была, решил проверять через instanceof :D
Спасибо за совет, попробую. :)
У меня такая же проблема была, решил проверять через instanceof :D
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
    if(e.getEntity().getKiller() instanceof Zombie){
        Bukkit.broadcastMessage("Да");
    }
    else{
        Bukkit.broadcastMessage("Нет");
    }
}
"Нет".. Почему?.. :(
Мне надо выяснить, зомби ли убил игрока. Если да, то что то делать..
 
Посмотри что в плагине DeathMessages
 
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
Player player = e.getEntity();
    if(player.getKiller() != null && player.getKiller() instanceof Zombie){
        Bukkit.broadcastMessage("Да");
    }else{
        Bukkit.broadcastMessage("Нет");
    }
}
Попробуй так.
 
Код:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
Player player = e.getEntity();
    if(player.getKiller() != null && player.getKiller() instanceof Zombie){
        Bukkit.broadcastMessage("Да");
    }else{
        Bukkit.broadcastMessage("Нет");
    }
}
Попробуй так.
А вы смотрели, что возвращает getKiller()?
 
А вы смотрели, что возвращает getKiller()?
Пардон, но я нашел кое-что у наших "собратьев" :
Код:
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;
}
 
Пардон, но я нашел кое-что у наших "собратьев" :
Код:
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;
}
Прикольное решение. Сгодился бы ещё дамаг с проверкой последнего ударяющего.
 
Пардон, но я нашел кое-что у наших "собратьев" :
Код:
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;
}
Воу, спасибо, попробую. Однако хитро придумано!
 
Кстати, может не e.getEntity().getType(), а e.getEntity().getEntityType()?
 
Но.
Есть два метода на эту тему:

и

И только первый возвращает EntityType
Я только сейчас в коде полазил своем, оказывается я использовал getEntityType() метод :D И все работает
 
Пардон, но я нашел кое-что у наших "собратьев" :
Код:
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;
}
Большое спасибо! Thank you very much! آپ کا بہت بہت شکریہ! ຂອບໃຈຫຼາຍໆເດີ້! Terima kasih banyak! Σας ευχαριστώ πολύ! बहुत बहुत धन्यवाद! Вялікі дзякуй! ¡Muchas gracias! ತುಂಬಾ ಧನ್ಯವಾದಗಳು! 非常感謝你! תודה רבה לך! Ich danke Ihnen tausendmal!
 
Большое спасибо! Thank you very much! آپ کا بہت بہت شکریہ! ຂອບໃຈຫຼາຍໆເດີ້! Terima kasih banyak! Σας ευχαριστώ πολύ! बहुत बहुत धन्यवाद! Вялікі дзякуй! ¡Muchas gracias! ತುಂಬಾ ಧನ್ಯವಾದಗಳು! 非常感謝你! תודה רבה לך! Ich danke Ihnen tausendmal!
Нихера себе, теперь скопирую это и так всегда буду благодарить :D
 
Большое спасибо! Thank you very much! آپ کا بہت بہت شکریہ! ຂອບໃຈຫຼາຍໆເດີ້! Terima kasih banyak! Σας ευχαριστώ πολύ! बहुत बहुत धन्यवाद! Вялікі дзякуй! ¡Muchas gracias! ತುಂಬಾ ಧನ್ಯವಾದಗಳು! 非常感謝你! תודה רבה לך! Ich danke Ihnen tausendmal!
Надо просто хоть чуть-чуть знать английский и хорошо пользоваться гуглом))
 
Назад
Верх