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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Использую такой костыль
    Код:
        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 Старожил Пользователь

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

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

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

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

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

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Не совсем правильно ты сформулировал мысль: 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
     
  10. Автор темы
    GodlikE

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

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

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

    Баллы:
    173
    Skype:
    shkurovs
    Делайте просто player.sendMessage().
     
  12. Автор темы
    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();
               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());
               }
        }
             }
     
    Последнее редактирование: 11 июн 2014
  13. Den_Abr

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

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

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