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

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

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

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

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    Всем привет=) Если один игрок убивает другого, то вызывается ивент PlayerDeathEvent, у меня вопрос: Как получить убийцу из этого ивента? Если это невозможно, подскажите пожалуйста другие способы получить убийцу=)
     
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    e.getPlayer().getKiller();
     
  4. Автор темы
    GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    В этом ивенте нет такого метода=) Поэтому я и спрашиваю=)
     
  5. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Использую такой костыль
    Code:
        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;
        }
     
  6. Автор темы
    GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    Спасибо=) Но Эклипс ругается на строчку LivingEntity shooter = ((Projectile) damager).getShooter();
    Текст ошибки: Type mismatch: cannot convert from ProjectileSource to LivingEntity.
     
  7. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну значит он для новых версий не подойдёт
     
  8. Автор темы
    GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    Жаль=(
     
  9. JustBlender

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

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Не совсем правильно ты сформулировал мысль: PlayerDeathEvent будет вызываться в любом случае, не только если игрока убьет игрок, из самого названия понятно же.. И там вроде бы не getPlayer(), а getEntity()..
    Вот кусочек моего кода:
    Code:
        @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
     
  10. Автор темы
    GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    А что у вас находится в переменной plugin?=))
     
  11. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Делайте просто player.sendMessage().
     
  12. Автор темы
    GodlikE

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

    Trophy Points:
    103
    Имя в Minecraft:
    GodlikE
    Вот такой вариант не подойдет?=)
    Code:
    @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());
               }
        }
             }
     
    Last edited: Jun 11, 2014
  13. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Куда же может адресовать переменная с таким неочевидным названием?
     

Share This Page