Why wont this method of checking death + getting the killer work!?

Discussion in 'Plugin Development' started by Relentless_x, Apr 16, 2011.

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

    Relentless_x

    Code:
    	public void onEntityDamage(EntityDamageEvent event) {
    		if (!(event.getEntity() instanceof Player)) {
    			return;
    		}
    		if (!(event instanceof EntityDamageByEntityEvent)) {
    			return;
    		}
    		if (!(((EntityDamageByEntityEvent)event).getDamager() instanceof Player)) {
    			return;
    		}
    		Player atk = (Player)((EntityDamageByEntityEvent)event).getDamager();
    		Player def = (Player)event.getEntity();
    		//String attacker = atk.getName();
    		//String defender = def.getName();
    		if (event.getDamage() - def.getHealth() < 0) {
    			return;
    		}
    		Bukkit.getServer().broadcastMessage("Someone died");
    }
    
    Please help, who ever finally solves this problem for me will have my eternal love.. i have two broken plugins because of it :'(
     
  2. Offline

    cjc343

    There's an ENTITY_DEATH event that's probably more appropriate.
     
  3. Offline

    Relentless_x

    but you cant get the killer from it so its useless to me :(
     
  4. Offline

    cjc343

    Ah. Without having played with your onEntityDamage stuff I have no clue then, sorry.
     
  5. Offline

    Relentless_x

    :( ok thanks anyway!

    Please someone be my saviour!
     
  6. Offline

    vildaberper

    The code looks fine to me.
    Add some debug statements, I always forget that myself. xD
     
  7. Offline

    cjc343

    I tested your code (modified for debug purposes):

    Code:
        @Override 
        public void onEntityDamage(EntityDamageEvent event) {
            System.out.println("WHOOOPWHOOOPWHOOOP Entity Damaged.");
            if (!(event.getEntity() instanceof Player)) {
                return;
            }
            if (!(event instanceof EntityDamageByEntityEvent)) {
                return;
            }
            System.out.println("A player entity was damaged");
            if (!(((EntityDamageByEntityEvent)event).getDamager() instanceof Player)) {
                return;
            }
            System.out.println("The damager was also a plyaer");
            Player atk = (Player)((EntityDamageByEntityEvent)event).getDamager();
            Player def = (Player)event.getEntity();
            String attacker = atk.getName();
            String defender = def.getName();
            System.out.println("attacker: " + attacker + " defender: " + defender);
            if (event.getDamage() - def.getHealth() < 0) {
                return;
            }
            instance.getServer().broadcastMessage("Someone died");
        }
    and got the following in the logs:

    Code:
    20:00:12 [INFO] WHOOOPWHOOOPWHOOOP Entity Damaged
    20:00:12 [INFO] A player entity was damaged
    20:00:12 [INFO] The damager was also a plyaer
    20:00:12 [INFO] attacker: cjc343 defender: Player
    
    The only thing I can think of is that you may not have registered the ENTITY_DAMAGE event in onEnable?
     
  8. Offline

    Relentless_x

    ok in one of the plugins i didnt put in ENTITY_DAMAGE :p fail.. one of the mi did and its still not working... but ill work on it. I'm an idiot haha, thanks! I swear i did add it though.. i must have removed it by mistake..

    But now it spams when you kill someone and it registers them as dead before they are dead.. hmm
     
Thread Status:
Not open for further replies.

Share This Page