Solved p.getIteminHand HELP!

Discussion in 'Plugin Development' started by luigieai, Jun 24, 2014.

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

    luigieai

    Hi guys, im creating a /sharpness plugin(when you type the command, one level of sharpness is addict in your sword) But when i do the command, my debug code says i dont have a sword in my hand, can anyone help?

    Code:java
    1.  
    2. public class Main extends JavaPlugin {
    3.  
    4. public static Economy econ = null;
    5. public void onEnable(){
    6. if (!setupEconomy() ) {
    7. getLogger().severe(String.format("O PLUGIN FOI DESABILITADO, VAULT NAO FOI ENCONTRADO!", getDescription().getName()));
    8. getServer().getPluginManager().disablePlugin(this);
    9. return;
    10. }
    11. System.out.println("PL FEITO POR MASTEREGGLUIGI");
    12. System.out.println("SKYPE: LUIGIEAI");
    13. level=0;
    14. }
    15.  
    16. private boolean setupEconomy() {
    17. if (getServer().getPluginManager().getPlugin("Vault") == null) {
    18. return false;
    19. }
    20. RegisteredServiceProvider<Economy> rsp = getServer()
    21. .getServicesManager().getRegistration(Economy.class);
    22. if (rsp == null) {
    23. return false;
    24. }
    25. econ = rsp.getProvider();
    26. return econ != null;
    27. }
    28. public int level;
    29. public boolean onCommand(CommandSender sender, Command command, String cmd, String[] args)
    30. {
    31. Player p = (Player)sender;
    32. if(cmd.equalsIgnoreCase("Sharpness")){
    33. EconomyResponse r = econ.withdrawPlayer(p.getName(), 20);
    34. if (r.transactionSuccess()) {
    35. if(p.getInventory().getItemInHand().equals(Material.DIAMOND_SWORD)){
    36. level = p.getInventory().getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
    37. p.getItemInHand().addEnchantment(Enchantment.DAMAGE_ALL,
    38. level+1);
    39. p.sendMessage(ChatColor.GREEN+"Sharpness foi adicionado por 20 creditos!");
    40. }
    41. if(p.getInventory().getItemInHand().equals(Material.IRON_SWORD)){
    42. level = p.getInventory().getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
    43. p.getItemInHand().addEnchantment(Enchantment.DAMAGE_ALL,
    44. level+1);
    45. p.sendMessage(ChatColor.GREEN+"Sharpness foi adicionado por 20 creditos!");
    46. }
    47. if(p.getInventory().getItemInHand().equals(Material.GOLD_SWORD)){
    48. level = p.getInventory().getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
    49. p.getItemInHand().addEnchantment(Enchantment.DAMAGE_ALL,
    50. level+1);
    51. p.sendMessage(ChatColor.GREEN+"Sharpness foi adicionado por 20 creditos!");
    52. }
    53. if(p.getInventory().getItemInHand().equals(Material.STONE_SWORD)){
    54. level = p.getInventory().getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
    55. p.getItemInHand().addEnchantment(Enchantment.DAMAGE_ALL,
    56. level+1);
    57. p.sendMessage(ChatColor.GREEN+"Sharpness foi adicionado por 20 creditos!");
    58. }
    59. if(p.getInventory().getItemInHand().equals(Material.WOOD_SWORD)){
    60. level = p.getInventory().getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
    61. p.getItemInHand().addEnchantment(Enchantment.DAMAGE_ALL,
    62. level+1);
    63. p.sendMessage(ChatColor.GREEN+"Sharpness foi adicionado por 20 creditos!");
    64. }else{
    65. p.sendMessage(ChatColor.RED+"Voce nao esta com uma espada na mao!");//The error code that say i dont have a sword in hand!
    66. return true;
    67. }
    68. return true;
    69. }
    70. return true;
    71. }
    72. return false;
    73. }

    Why my plugin isn't reconizing the item in hand.
    PS:Sorry my bad english :D
     
  2. Offline

    Konato_K

    Change p.getInventory().getItemInHand().equals(Material.DIAMOND_SWORD)
    for this
    p.getItemInHand().getType()==Material.DIAMOND_SWORD
     
  3. Offline

    luigieai

    Konato_K
    Ok thanks bro, i can ask why?
     
  4. Offline

    Konato_K

    luigieai getItemInHand() returns an ItemStack, and you're comparing it with a Material, it will never return true, so you need to use getItemInHand().getType() which returns a Material, since Material is an enum you can use == instead of .equals(), players have a method getItemInHand(), so there is no need to call getInventory().

    Also, I suggest you to first check if the item in hand is null, so you will not get NPEs
     
    luigieai and 1Rogue like this.
  5. Offline

    luigieai

  6. Offline

    ZodiacTheories

  7. Offline

    Traks

    ZodiacTheories Not really, if for example the Material returned by ItemStack#getType() is null, calling .equals(Object) will throw a NullPointerException, while using the == operator won't.
     
  8. Offline

    fireblast709

  9. Offline

    ZodiacTheories

    Traks fireblast709

    Sorry :(

    I always thought that .equals was better for comparing enums - I didn't mean it in a passive-aggressive way.
     
  10. Offline

    Traks

  11. Offline

    ZodiacTheories

Thread Status:
Not open for further replies.

Share This Page