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

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

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

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

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

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

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    EntityDamageEvent EntityDamageByEntityEvent
    e.getDamager()
     
    makssof и MrSharky нравится это.
  3. GodlikE

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

    Баллы:
    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 нравится это.
  4. Автор темы
    makssof

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

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

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

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

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

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

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

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

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

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

    Баллы:
    123
    Посмотри что в плагине DeathMessages
     
  9. BeYkeR

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

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

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А вы смотрели, что возвращает getKiller()?
     
    ПриветОтЛайки и musel70 нравится это.
  11. BeYkeR

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

    Баллы:
    173
    Пардон, но я нашел кое-что у наших "собратьев" :
    Код:
    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 нравится это.
  12. Den_Abr

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

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

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

    Баллы:
    103
    Воу, спасибо, попробую. Однако хитро придумано!
     
  14. JustBlender

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    103
    =D
    Это примерно 1/4 всех языков translate.google.ru
     
    Последнее редактирование: 12 июл 2014
  20. BeYkeR

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

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

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