Solved NoSuchMethod Error :S

Discussion in 'Plugin Development' started by phildachil, Mar 2, 2014.

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

    phildachil

    Hey forum,
    uhm I've been having some trouble getting the shooter of an arrow. I tried using EntityDamageByEntityEvent and ProjectileHitEvent, but I get a similar error each time.

    Here is my code:
    Code:java
    1.  
    2. @EventHandler
    3. public void ArrowHit(ProjectileHitEvent e) {
    4. if(e.getEntity().getShooter() instanceof Player) {
    5. Player p = (Player) e.getEntity();
    6. Player k = (Player) e.getEntity().getShooter();
    7. if(p instanceof Player) {
    8. if(arrowkill.contains(p.getName())) {
    9. k.getInventory().addItem(new ItemStack(Material.ARROW));
    10. k.sendMessage(ChatColor.GOLD + "[OITC] " + ChatColor.RED + "You killed " + p.getName() + ", good job!");
    11.  
    12. }
    13. return;
    14. }
    15. }
    16.  

    And here is my stacktrace
    Code:
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callProjectileHitEvent(CraftEventFactory.java:603) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.EntityArrow.h(EntityArrow.java:209) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.entityJoinedWorld(World.java:1338) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.playerJoinedWorld(World.java:1319) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.tickEntities(World.java:1207) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.WorldServer.tickEntities(WorldServer.java:480) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:637) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    Caused by: java.lang.NoSuchMethodError: org.bukkit.entity.Projectile.getShooter()Lorg/bukkit/projectiles/ProjectileSource;
    at me.phildachil.oitc.OITC.ArrowHit(OITC.java:212) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_25]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_25]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    ... 14 more
    >
     
    }
    
    Line 212 is
    Code:java
    1. if(e.getEntity().getShooter() instanceof Player) {


    Anyone able to help a bit?
     
  2. can you give the following information:
    The craftbukkit version the server is running?
    and
    The version of craftbukkit you using to compile plugin?
     
  3. Offline

    phildachil

    ferrybig
    Server is using some version of craftbukkit 1.7.2
    And I'm using bukkit-1.7.2-R0.3-20140202.193209-23 to compile the plugin.
     
  4. what exact version of bukkit are you using to compile the plugin and running the server, what build number?
     
  5. Offline

    phildachil

    I don't remember.
    Edit:
    "CraftBukkit version git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks (MC: 1.7.2) (Implementing API version 1.7.2-R0.3-SNAPSHOT"

    ferrybig
    I'm using bukkit for compiling it in eclipse. Should I try using craftbukkit instead?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  6. Offline

    alex123099

    phildachil
    Do you have any other plugins on your server with the same package-class names?
     
  7. Offline

    Jombi

    First of all on line #5, event.getEntity() in ProjectileHitEvent returns a Projectile object. You shouldn't cast that to a Player.

    Line #7 will always run because you just cast the projectile into a player.
     
  8. Offline

    phildachil

    alex123099
    No I'm testing it on a server with just this plugin
    Jombi
    So because ProjectileHitEvent is not specific to another entity getting hit, should I use EntityDamageByEntityEvent?
     
  9. Offline

    Jombi

    phildachil Yes

    Code:java
    1.  
    2. public void onEntityDamage(EntityDamageByEntityEvent event){
    3. if(event.getDamager() instanceof Arrow){
    4. Arrow arrow = (Arrow) event.getDamager();
    5. if(arrow.getShooter() instanceof Player){
    6. Player shooter = (Player) arrow.getShooter();
    7.  
    8. }
    9. }
    10. }
     
  10. Offline

    phildachil

    Jombi
    Tried this code:
    Code:java
    1.  
    2. @EventHandler
    3. public void ArrowHit(EntityDamageByEntityEvent e) {
    4. Player p = (Player) e.getEntity();
    5. Arrow a = (Arrow) e.getDamager();
    6. Player k = (Player) a.getShooter();
    7. if((p instanceof Player) && k instanceof Player) {
    8. if(arrowkill.contains(p.getName())) {
    9. k.getInventory().addItem(new ItemStack(Material.ARROW));
    10. k.sendMessage(ChatColor.GOLD + "[OITC] " + ChatColor.RED + "You killed " + p.getName() + ", good job!");
    11. }
    12. }
    13. }
    14.  


    Code:
    Caused by: java.lang.NoSuchMethodError: org.bukkit.entity.Arrow.getShooter()Lorg/bukkit/projectiles/ProjectileSource;
    at me.phildachil.oitc.OITC.ArrowHit(OITC.java:214) ~[?:?]
    
    Still won't work.
     
  11. Offline

    jpjunho

    phildachil
    Check if e.getEntity() instance of Player and if e.getDamager() instance of Arrow
     
  12. Offline

    Jombi

    phildachil
    I ninja'd my last post as you replied. Try that and let us know if it works. Also, it would be helpful if you pasted the full stacktrace when there is a problem.
     
  13. Offline

    phildachil

    It still doesn't work >_>
    Code:
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:94) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:382) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:410) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.EntityLiving.damageEntity(EntityLiving.java:656) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.EntityHuman.damageEntity(EntityHuman.java:746) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.EntityPlayer.damageEntity(EntityPlayer.java:446) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.EntityArrow.h(EntityArrow.java:228) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.entityJoinedWorld(World.java:1338) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.playerJoinedWorld(World.java:1319) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.World.tickEntities(World.java:1207) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.WorldServer.tickEntities(WorldServer.java:480) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:637) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    Caused by: java.lang.NoSuchMethodError: org.bukkit.entity.Arrow.getShooter()Lorg/bukkit/projectiles/ProjectileSource;
    at me.phildachil.oitc.OITC.ArrowHit(OITC.java:72) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_25]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_25]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2982jnks]
    ... 19 more
    
    ferrybig
    Nope didn't work.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  14. Offline

    unon1100

    .getShooter() on Arrow is deprecated in Bukkit. Instead, compile with CraftBukkit rather than just normal bukkit and try this:
    Code:java
    1. Player k = (Player) ((CraftArrow) a).getShooter();
     
  15. Errm, you just need to update Craftbukkit on the server that you are testing on.

    ProjectileSource is a recent API addition.
     
    CubieX likes this.
  16. Offline

    phildachil

    unon1100
    CraftArrow can't be resolved to a type
    TfT_02
    Woah, that worked. Thanks!
     
Thread Status:
Not open for further replies.

Share This Page