Solved EntityDamageByEntityEvent error

Discussion in 'Plugin Development' started by TheGamblingMan, Apr 19, 2014.

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

    TheGamblingMan

    Hey there i try to make a plugin but at the moment i am stuck because always when i hit a fireball the event
    Code:java
    1. @EventHandler
    2. public void onDamage(EntityDamageByEntityEvent e){
    3.  
    4. Player p = (Player)e.getEntity();
    5.  
    6. if(p.getInventory().getHelmet() != null){
    7. p.getInventory().getHelmet().setDurability((short)0);
    8. }
    9. if(p.getInventory().getChestplate() != null){
    10. p.getInventory().getChestplate().setDurability((short)0);
    11. }
    12.  
    13. if(p.getInventory().getLeggings() != null){
    14. p.getInventory().getLeggings().setDurability((short)0);
    15. }
    16.  
    17. if(p.getInventory().getBoots() != null){
    18. p.getInventory().getBoots().setDurability((short)0);
    19. }
    20. }

    sends an error in the consol

    Code:
     Could not pass event EntityDamageByEntityEvent to kitpvp vAlpha 1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.EntityFireball.damageEntity(EntityFireball.java:240) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.EntityHuman.attack(EntityHuman.java:918) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:1102) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.a(SourceFile:55) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.handle(SourceFile:10) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R1.entity.CraftLargeFireball cannot be cast to org.bukkit.entity.Player
        at Events.EventListener.onDamage(EventListener.java:78) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[1.7.2.jar:git-Bukkit-1.7.2-R0.3-2-g85f5776-b3023jnks]
        ... 15 more
    
    has someone an idea how i solve this error?
     
  2. Offline

    CraftedShack

    Code:java
    1. e.getEntity(); //returns an entity not a player.
    2.  
    3. //Add a check to make sure entity is a player,
    4.  
    5. if (e.getEntity() instanceof Player) {
    6. //entity is a player
    7. Player player = (Player) e.getEntity();
    8. // ... Code here
    9.  
    10. }
     
    thisguy128512 likes this.
  3. Offline

    thisguy128512

    What's happening here is, you're the Damager in the EntityDamageByEntityEvent where you HIT the fireball. The event you wrote assumes you to be TAKING damage, not giving it, so when you blindly cast event.getEntity() to Player, you will sometimes be trying to call a fireball a player.

    Instead, look above my post at CraftedShack 's answer. Use instanceof to confirm that the entity being damaged is a player, and only if they are, then execute code assuming such.
     
  4. Offline

    TheGamblingMan

Thread Status:
Not open for further replies.

Share This Page