Can't set death message for PvP death

Discussion in 'Plugin Development' started by ImJack, Apr 20, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    ImJack

    So, I was just randomly writing test plugins, and decided to attempt to change death messages. So far, I've been successful using this code

    Code:
    public class Main {
        @EventHandler
        public void onDeath(PlayerDeathEvent event)
        {
            Player p = event.getEntity();
            String name = p.getName();
            EntityDamageEvent de = p.getLastDamageCause();
            DamageCause cause = de.getCause();
            if(cause == DamageCause.DROWNING)
            {
                event.setDeathMessage(""+name+" forgot to come up for air");
            }
            else if(cause == DamageCause.STARVATION)
            
                event.setDeathMessage(""+name+" decided to fast");
            }
    etc.

    But when I try to do DamageCause.PLAYER, it obviously doesn't work since PvP deaths are different. So how do I change it from "Player was shot by Player2" and/or "Player was slain by Player2" to something else?
     
  2. Offline

    chasechocolate

    Code:java
    1. if(de instanceof EntityDamageByEntityEvent){
    2. //Cast
    3. //Check if the event.getEntity() and event.getDamager() are players
    4. }
     
  3. Offline

    ImJack

    Can you be more in depth? I'm new to this XD
     
  4. Offline

    nitrousspark

    heres how i make my death messages, it even tells you if it was a headshot

    Code:
     
     
    @EventHandler
    public void death(PlayerDeathEvent event)
    {
     
    Player player = event.getEntity();
    EntityDamageEvent dc = event.getEntity().getLastDamageCause();
    if(dc instanceof EntityDamageByEntityEvent)
    {
    if(((EntityDamageByEntityEvent)dc).getDamager().getType() == EntityType.FISHING_HOOK)
    {
    event.setDeathMessage(ChatColor.BOLD + event.getEntity().getKiller().getName() + ChatColor.AQUA + " Murdered " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
    }
    if(((EntityDamageByEntityEvent)dc).getDamager() instanceof Egg)
    {
    Egg egg = (Egg)((EntityDamageByEntityEvent)dc).getDamager();
    Player shooter = (Player)egg.getShooter();
    event.setDeathMessage(ChatColor.BOLD + shooter.getName() + ChatColor.AQUA + " Egged " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
     
    Projectile proj = (Projectile)((EntityDamageByEntityEvent)dc).getDamager();
    if(!(proj.getShooter() instanceof Player))
    {
    return;
    }
     
    Entity victim = event.getEntity();
    EntityType victimType = victim.getType();
     
    double projY = proj.getLocation().getY();
    double victimY = victim.getLocation().getY();
    boolean headshot = projY - victimY > getBodyHeight(victimType);
     
    if(headshot)
    {
    event.setDeathMessage(ChatColor.BLUE + "[HeadShot]" + ChatColor.WHITE + ChatColor.BOLD + shooter.getName() + ChatColor.AQUA + " Egged " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
    }
    if(!headshot)
    {
    event.setDeathMessage(ChatColor.BOLD + shooter.getName() + ChatColor.AQUA + " Egged " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
    }
    }
    if(((EntityDamageByEntityEvent)dc).getDamager() instanceof Arrow)
    {
    Arrow arrow = (Arrow)((EntityDamageByEntityEvent)dc).getDamager();
    Player shooter = (Player)arrow.getShooter();
    event.setDeathMessage(ChatColor.BOLD + shooter.getName() + ChatColor.AQUA + " Shot " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
     
    Projectile proj = (Projectile)((EntityDamageByEntityEvent)dc).getDamager();
    if(!(proj.getShooter() instanceof Player))
    {
    return;
    }
     
    Entity victim = event.getEntity();
    EntityType victimType = victim.getType();
     
    double projY = proj.getLocation().getY();
    double victimY = victim.getLocation().getY();
    boolean headshot = projY - victimY > getBodyHeight(victimType);
     
    if(headshot)
    {
    event.setDeathMessage(ChatColor.BLUE + "[HeadShot]" + ChatColor.WHITE + ChatColor.BOLD + shooter.getName() + ChatColor.AQUA + " Shot " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
    }
    }
    if(((EntityDamageByEntityEvent)dc).getDamager() instanceof Player)
    {
    event.setDeathMessage(ChatColor.BOLD + event.getEntity().getKiller().getName() + ChatColor.AQUA + " Murdered " + ChatColor.WHITE + ChatColor.BOLD + player.getName());
    }
    }
    }
     
    private double getBodyHeight(EntityType type)
    {
     
    switch(type)
    {
    case CREEPER:
    case ZOMBIE:
    case SKELETON:
    case PLAYER:
    case PIG_ZOMBIE:
    case VILLAGER:
    return 1.35d;
    default:
    return Float.POSITIVE_INFINITY;
    }
    }
     
  5. Offline

    ImJack

    Could you please put tabs so it's easier to understand what's going on?
     
  6. Offline

    candyfloss20

    For the pvp death i do this:
    Code:java
    1. if (event.getEntity().getKiller() instanceof Player){
    2. for (Player allplayers : Bukkit.getOnlinePlayers()) {
    3. allplayers.playSound(allplayers.getLocation(), Sound.BLAZE_DEATH,5,5);
    4. event.setDeathMessage(UHCCore.TAG+"§a"+player.getName()+" §4was killed by: §a"+killer.getName());
    5. killer.getLocation().getWorld().strikeLightning(killer.getLocation());
    6. player.sendMessage(UHCCore.TAG+"Your killer had: §a"+killer.getHealth()+" §7left.");
    7. }
    8. }
     
  7. Offline

    viper_monster

    candyfloss20 do you realize you have bumped a 1 year old thread?
     
    McMhz likes this.
  8. Offline

    McMhz

    Haha.
     
Thread Status:
Not open for further replies.

Share This Page