Помогите Смерть игрока

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

GodlikE

Старожил
Пользователь
Баллы
103
Имя в Minecraft
GodlikE
Всем привет=) Если один игрок убивает другого, то вызывается ивент PlayerDeathEvent, у меня вопрос: Как получить убийцу из этого ивента? Если это невозможно, подскажите пожалуйста другие способы получить убийцу=)
 
Использую такой костыль
Код:
    public 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 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;
    }
Спасибо=) Но Эклипс ругается на строчку LivingEntity shooter = ((Projectile) damager).getShooter();
Текст ошибки: Type mismatch: cannot convert from ProjectileSource to LivingEntity.
 
Спасибо=) Но Эклипс ругается на строчку LivingEntity shooter = ((Projectile) damager).getShooter();
Текст ошибки: Type mismatch: cannot convert from ProjectileSource to LivingEntity.
Ну значит он для новых версий не подойдёт
 
Не совсем правильно ты сформулировал мысль: PlayerDeathEvent будет вызываться в любом случае, не только если игрока убьет игрок, из самого названия понятно же.. И там вроде бы не getPlayer(), а getEntity()..
Вот кусочек моего кода:
Код:
    @EventHandler
    public void onDeath(PlayerDeathEvent e){
        if(e.getEntity() instanceof Player){
            Player player = (Player) e.getEntity();
                if(e.getEntity().getKiller() instanceof Player){
                    e.setDeathMessage(null);
                    Bukkit.broadcastMessage(" " + ChatColor.BLUE + ChatColor.ITALIC.toString() + plugin.getConfigHandler().getPrefix() + ChatColor.DARK_GRAY + "> " + ChatColor.BLUE + e.getEntity().getName() + ChatColor.GRAY + " was killed by " + ChatColor.BLUE + e.getEntity().getKiller().getName());   
                    plugin.sendMessage(player, "Your enemy has only " + ChatColor.RED + (int)e.getEntity().getKiller().getHealth()/2 + "❤ " + ChatColor.GRAY + "to kill him.");
                }else{
                    e.setDeathMessage(null);
                    Bukkit.broadcastMessage(" " + ChatColor.BLUE + ChatColor.ITALIC.toString() + plugin.getConfigHandler().getPrefix() + ChatColor.DARK_GRAY + "> " + ChatColor.BLUE + e.getEntity().getName() + ChatColor.GRAY + " has died!");   
                    plugin.sendMessage(player, "Cause of Death: " + ChatColor.BLUE + player.getLastDamageCause().getCause().toString().replace("_", " ").toLowerCase() + ChatColor.GRAY + " took " + ChatColor.BLUE + player.getLastDamage() + " hearts!");
                }
        }
    }
Так что не надо мне тут бла-бла ;P
 
Не совсем правильно ты сформулировал мысль: PlayerDeathEvent будет вызываться в любом случае, не только если игрока убьет игрок, из самого названия понятно же.. И там вроде бы не getPlayer(), а getEntity()..
Вот кусочек моего кода:
Код:
    @EventHandler
    public void onDeath(PlayerDeathEvent e){
        if(e.getEntity() instanceof Player){
            Player player = (Player) e.getEntity();
                if(e.getEntity().getKiller() instanceof Player){
                    e.setDeathMessage(null);
                    Bukkit.broadcastMessage(" " + ChatColor.BLUE + ChatColor.ITALIC.toString() + plugin.getConfigHandler().getPrefix() + ChatColor.DARK_GRAY + "> " + ChatColor.BLUE + e.getEntity().getName() + ChatColor.GRAY + " was killed by " + ChatColor.BLUE + e.getEntity().getKiller().getName());  
                    plugin.sendMessage(player, "Your enemy has only " + ChatColor.RED + (int)e.getEntity().getKiller().getHealth()/2 + "❤ " + ChatColor.GRAY + "to kill him.");
                }else{
                    e.setDeathMessage(null);
                    Bukkit.broadcastMessage(" " + ChatColor.BLUE + ChatColor.ITALIC.toString() + plugin.getConfigHandler().getPrefix() + ChatColor.DARK_GRAY + "> " + ChatColor.BLUE + e.getEntity().getName() + ChatColor.GRAY + " has died!");  
                    plugin.sendMessage(player, "Cause of Death: " + ChatColor.BLUE + player.getLastDamageCause().getCause().toString().replace("_", " ").toLowerCase() + ChatColor.GRAY + " took " + ChatColor.BLUE + player.getLastDamage() + " hearts!");
                }
        }
    }
Так что не надо мне тут бла-бла ;P
А что у вас находится в переменной plugin?=))
 
Вот такой вариант не подойдет?=)
Код:
@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();
           health = player2.getHealth();
           player.damage(10);
           player.sendMessage("Вы ударили " + player2.getName());
           player2.sendMessage("Вас ударил " + player.getName());
           health = player2.getHealth();
           kill = 0;
          
           if (health == kill)
           {
              Bukkit.broadcastMessage(player.getName() + " замочил игрока " + player2.getName());
           }
    }
         }
 
Последнее редактирование:
Назад
Верх