Please help with a EntityDamageByEntityEvent erro

Discussion in 'Plugin Development' started by Soxra, Feb 11, 2013.

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

    Soxra

    Hi,
    i got this code in my plugin:
    Code:
          @EventHandler(priority=EventPriority.LOW, ignoreCancelled=true)
          public void onEntityDamage(EntityDamageEvent event)
          {
            if ((event.getEntityType() != EntityType.PLAYER) || (!(event instanceof EntityDamageByEntityEvent))) return;
             
            EntityDamageByEntityEvent dmgev = (EntityDamageByEntityEvent)event;
            if (dmgev.getDamager().getType() != EntityType.PLAYER){
                Player victim = (Player)event.getEntity();
                if (plugin.protectedPlayers.containsKey(victim.getName())){
                    event.setCancelled(true);
                    return;
                }
                return;
            }
           
            Player victim = (Player)event.getEntity();
            Player attacker = (Player)dmgev.getDamager();
    etc. etc....

    Now my error:
    Code:
    15:26:29 [SEVERE] Could not pass event EntityDamageByEntityEvent to bbGuard v0.1
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:81)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:369)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:391)
    at net.minecraft.server.v1_4_R1.EntityLiving.damageEntity(EntityLiving.java:686)
    at net.minecraft.server.v1_4_R1.EntityHuman.damageEntity(EntityHuman.java:616)
    at net.minecraft.server.v1_4_R1.EntityPlayer.damageEntity(EntityPlayer.java:309)
    at net.minecraft.server.v1_4_R1.EntityMonster.m(EntityMonster.java:88)
    at net.minecraft.server.v1_4_R1.EntityMonster.a(EntityMonster.java:114)
    at net.minecraft.server.v1_4_R1.EntitySpider.a(EntitySpider.java:91)
    at net.minecraft.server.v1_4_R1.EntityCreature.bn(EntityCreature.java:56)
    at net.minecraft.server.v1_4_R1.EntityLiving.c(EntityLiving.java:1277)
    at net.minecraft.server.v1_4_R1.EntityMonster.c(EntityMonster.java:20)
    at net.minecraft.server.v1_4_R1.EntityLiving.j_(EntityLiving.java:534)
    at net.minecraft.server.v1_4_R1.EntityMonster.j_(EntityMonster.java:24)
    at net.minecraft.server.v1_4_R1.EntitySpider.j_(EntitySpider.java:20)
    at net.minecraft.server.v1_4_R1.World.entityJoinedWorld(World.java:1332)
    at net.minecraft.server.v1_4_R1.WorldServer.entityJoinedWorld(WorldServer.java:548)
    at net.minecraft.server.v1_4_R1.World.playerJoinedWorld(World.java:1313)
    at net.minecraft.server.v1_4_R1.World.tickEntities(World.java:1191)
    at net.minecraft.server.v1_4_R1.WorldServer.tickEntities(WorldServer.java:445)
    at net.minecr
    aft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:580)
    at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224)
    at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
    at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
    at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_4_R1.entity.CraftSpider cannot be cast to org.bukkit.entity.Player
    at de.soxra.bbguard.Pvplistener.onEntityDamage(Pvplistener.java:56)
    at sun.reflect.GeneratedMethodAccessor309.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
    ... 28 more
    I dont know why there is an error at line 56 (Player victim = (Player)event.getEntity();)
    Since i checked if the entitytype is a player or not the plugin shoul'nt reach this point.
     
  2. Offline

    Frazz86

    All your checks are checking if the entity is not equal to a player lol....
    if ((event.getEntityType() != EntityType.PLAYER)
    Change that to event.getEntity() instanceof Player
    if (dmgev.getDamager()
    Change that to dmgev.getDamager() instanceof Player

    What you're trying to do is cast a spider as a player lol
     
    Soxra likes this.
  3. Offline

    Soxra

    Error is still there:
    Code:
          @EventHandler(priority=EventPriority.LOW, ignoreCancelled=true)
          public void onEntityDamage(EntityDamageEvent event)
          {
            if (!(event.getEntity() instanceof Player) || (!(event instanceof EntityDamageByEntityEvent))) return;
            EntityDamageByEntityEvent dmgev = (EntityDamageByEntityEvent)event;
            if (!(dmgev.getDamager() instanceof Player)){
                Player victim = (Player)event.getEntity();
                if (plugin.protectedPlayers.containsKey(victim.getName())){
                    event.setCancelled(true);
                    return;
                }
                return;
            }
           
            Player victim = (Player)event.getEntity();
            Player attacker = (Player)dmgev.getDamager();
     
            if (plugin.protectedPlayers.containsKey(victim.getName())){
                event.setCancelled(true);
                attacker.sendMessage(ChatColor.GOLD + "Dieser neue Spieler ist noch beschützt.");
            }
           
            if (plugin.protectedPlayers.containsKey(attacker.getName())){
                event.setCancelled(true);
                attacker.sendMessage(ChatColor.GOLD + "Du hast noch PvP Schutz. Du kannst ihn mit /guard off entfernen.");
            }
           
          }
    Error:
    Code:
    17:28:29 [SEVERE] Could not pass event EntityDamageByEntityEvent to bbGuard v0.1
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:81)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:369)
    at org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:391)
    at net.minecraft.server.v1_4_R1.EntityLiving.damageEntity(EntityLiving.java:686)
    at net.minecraft.server.v1_4_R1.EntityHuman.damageEntity(EntityHuman.java:616)
    at net.minecraft.server.v1_4_R1.EntityPlayer.damageEntity(EntityPlayer.java:309)
    at net.minecraft.server.v1_4_R1.EntityArrow.j_(EntityArrow.java:226)
    at net.minecraft.server.v1_4_R1.World.entityJoinedWorld(World.java:1332)
    at net.minecraft.server.v1_4_R1.WorldServer.entityJoinedWorld(WorldServer.java:548)
    at net.minecraft.server.v1_4_R1.World.playerJoinedWorld(World.java:1313)
    at net.minecraft.server.v1_4_R1.World.tickEntities(World.java:1191)
    at net.minecraft.server.v1_4_R1.WorldServer.tickEntities(WorldServer.java:445)
    at net.minecraft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:580)
    at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224)
    at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
    at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
    at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_4_R1.entity.CraftArrow cannot be cast to org.bukkit.entity.Player
    at de.soxra.bbguard.Pvplistener.onEntityDamage(Pvplistener.java:56)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
    ... 20 more
    >
     
  4. Offline

    bleachisback

    Well first of all, you don't have to check for and cast EntityDamageByEntityEvent. You can just do this:
    Code:java
    1. @EventHandler(priority=EventPriority.LOW, ignoreCancelled=true)
    2. public void onEntityDamage(EntityDamageByEntityEvent event)
    3. {


    Secondly, you have a bit of a logical fallacy. You say "if it's a player, then do player stuff, but if not, you still do player stuff". You're trying to cast event.getEntity() to player, even though you know it will never be a Player.
     
  5. Offline

    Soxra

    bleachisback
    The event Entity has to be a player (if (!(event.getEntity() instanceof Player) return;)
    The damager has to be a player to:
    Code:
            if (!(dmgev.getDamager() instanceof Player)){
                Player victim = (Player)event.getEntity();
                if (plugin.protectedPlayers.containsKey(victim.getName())){
                    event.setCancelled(true);
                    return;
                }
                return;
            }
    So this shouldn't throw an error:
    Code:
            Player victim = (Player)event.getEntity();
            Player attacker = (Player)dmgev.getDamager();
     
  6. Offline

    Soxra

    Anyone else has got a suggestion?
     
Thread Status:
Not open for further replies.

Share This Page