Solved Getting item lore error

Discussion in 'Plugin Help/Development/Requests' started by seanliam2000, Apr 12, 2015.

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

    seanliam2000

    So I am adding on to my wardrobe plugin by adding some hats but I have come across an error I have tried to fixed but failed horribly:
    I was trying to automate clicking a block and equipping it as a hat by checking the lore for the word "Hat" everything works fine except for when someone clicks an item that doesnt have "Hat" in the lore
    Code:java
    1. package me.seanliam2000.Wardrobe;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.inventory.InventoryClickEvent;
    12. import org.bukkit.event.inventory.InventoryType.SlotType;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.meta.ItemMeta;
    16.  
    17. public class Hatinv implements Listener {
    18.  
    19. public static Inventory hatinv = Bukkit.createInventory(null, 54, "Hats");
    20.  
    21. public static void openhat(Player player) {
    22. //Items that get set in the inventory
    23. //leather
    24.  
    25. hatinv.setItem(0, setOption(Material.DIRT, (short)0, ChatColor.GOLD + "Dirt hat", ChatColor.AQUA + "Hat"));
    26. hatinv.setItem(1, setOption(Material.GRASS, (short)0, ChatColor.GOLD + "Grass hat", ChatColor.AQUA + "Hat"));
    27. hatinv.setItem(2, setOption(Material.STONE, (short)0, ChatColor.GOLD + "Stone hat", ChatColor.AQUA + "Hat"));
    28. hatinv.setItem(3, setOption(Material.COBBLESTONE, (short)0, ChatColor.GOLD + "Cobblestone hat", ChatColor.AQUA + "Hat"));
    29. hatinv.setItem(4, setOption(Material.SAND, (short)0, ChatColor.GOLD + "Sand hat", ChatColor.AQUA + "Hat"));
    30. hatinv.setItem(5, setOption(Material.WOOD, (short)0, ChatColor.GOLD + "Wood hat", ChatColor.AQUA + "Hat"));
    31. hatinv.setItem(6, setOption(Material.WOOD, (short)1, ChatColor.GOLD + "Wood hat", ChatColor.AQUA + "Hat"));
    32. hatinv.setItem(7, setOption(Material.WOOD, (short)2, ChatColor.GOLD + "Wood hat", ChatColor.AQUA + "Hat"));
    33. hatinv.setItem(8, setOption(Material.WOOD, (short)3, ChatColor.GOLD + "Wood hat", ChatColor.AQUA + "Hat"));
    34. hatinv.setItem(9, setOption(Material.BEDROCK, (short)0, ChatColor.GOLD + "Bedrock hat", ChatColor.AQUA + "Hat"));
    35. hatinv.setItem(10, setOption(Material.GOLD_ORE, (short)0, ChatColor.GOLD + "Gold ore hat", ChatColor.AQUA + "Hat"));
    36. hatinv.setItem(11, setOption(Material.IRON_ORE, (short)0, ChatColor.GOLD + "Iron ore hat", ChatColor.AQUA + "Hat"));
    37. hatinv.setItem(12, setOption(Material.COAL_ORE, (short)0, ChatColor.GOLD + "Coal ore hat", ChatColor.AQUA + "Hat"));
    38. hatinv.setItem(13, setOption(Material.DIAMOND_ORE, (short)0, ChatColor.GOLD + "Diamond hat", ChatColor.AQUA + "Hat"));
    39. hatinv.setItem(14, setOption(Material.LEAVES, (short)0, ChatColor.GOLD + "Leaf hat", ChatColor.AQUA + "Hat"));
    40. hatinv.setItem(15, setOption(Material.LEAVES, (short)1, ChatColor.GOLD + "Leaf hat", ChatColor.AQUA + "Hat"));
    41. hatinv.setItem(16, setOption(Material.LEAVES, (short)2, ChatColor.GOLD + "Leaf hat", ChatColor.AQUA + "Hat"));
    42. hatinv.setItem(17, setOption(Material.LEAVES, (short)3, ChatColor.GOLD + "Leaf hat", ChatColor.AQUA + "Hat"));
    43. hatinv.setItem(18, setOption(Material.SPONGE, (short)0, ChatColor.GOLD + "Sponge hat", ChatColor.AQUA + "Hat"));
    44. hatinv.setItem(19, setOption(Material.SPONGE, (short)1, ChatColor.GOLD + "Sponge hat", ChatColor.AQUA + "Hat"));
    45.  
    46. hatinv.setItem(48, setOption(Material.STAINED_GLASS_PANE, (short)5, ChatColor.GOLD + "Wardrobe", ChatColor.AQUA + "Back to wardrobe | <---"));
    47. hatinv.setItem(50, setOption(Material.STAINED_GLASS_PANE, (short)7, ChatColor.GOLD + "Hats", ChatColor.AQUA + "Current menu"));
    48. hatinv.setItem(49, setOption(Material.BARRIER, (short)0, ChatColor.DARK_RED + "Close menu", "Close the menu"));
    49.  
    50. player.openInventory(hatinv); //Open the inventory
    51. }
    52. public static ItemStack setOption(Material material, short damage, String name, String lore)
    53. {
    54. ItemStack setOption = new ItemStack(material, 1, damage);
    55. ItemMeta meta = setOption.getItemMeta();
    56. meta.setDisplayName(name);
    57. if (!lore.equals(""))
    58. {
    59. ArrayList<String> Lore = new ArrayList<String>();
    60. if (lore.contains("|"))
    61. {
    62. for (String alore : lore.split("\\|"))
    63. {
    64. Lore.add(alore);
    65. }
    66. }
    67. else
    68. {
    69. Lore.add(lore);
    70. }
    71. meta.setLore(Lore);
    72. }
    73. setOption.setItemMeta(meta);
    74. return setOption;
    75. }
    76.  
    77. @EventHandler
    78. public void onHelmetRemove(InventoryClickEvent event)
    79. {
    80. if (event.getSlotType() == SlotType.ARMOR) {
    81. event.setCancelled(true);
    82. }
    83. }
    84. @EventHandler
    85. public void onInventoryClick(InventoryClickEvent event) {
    86. Player player = (Player) event.getWhoClicked();
    87. ItemStack clicked = event.getCurrentItem(); // The item that was clicked
    88. Inventory inventory = event.getInventory(); // The inventory that was clicked in
    89. if (inventory.getName().equals(hatinv.getName())) {
    90.  
    91. event.setCancelled(true);
    92.  
    93. if (clicked.getItemMeta().getLore().contains(ChatColor.AQUA + "Hat"))
    94. {
    95. if (player.hasPermission("wardrobe.hats"))
    96. {
    97. event.setCancelled(true); // Make it so the item is back in its original spot
    98. player.getInventory().setHelmet(clicked);
    99. player.sendMessage(Configuration.prefix + ChatColor.AQUA +" Equipping " + clicked.getItemMeta().getDisplayName());
    100. player.updateInventory();
    101. }
    102.  
    103. }
    104. if (!player.hasPermission("wardrobe.hats"))
    105. {
    106. player.sendMessage(Configuration.prefix + " " + Configuration.perms);
    107. }
    108.  
    109. if (clicked.getType() == Material.BARRIER) {
    110. event.setCancelled(true);
    111. player.closeInventory();
    112. player.sendMessage(Configuration.prefix + " Menu closed");
    113. }
    114. if (event.getSlot() == 48) {
    115. event.setCancelled(true);
    116. player.sendMessage(Configuration.prefix + " Wardrobe menu opened");
    117. Wardrobeinv.open(player);
    118. }
    119. }
    120. }
    121. }
    122.  

    And the error:
    Code:
    [15:02:57] [Server thread/ERROR]: Could not pass event InventoryClickEvent to Wardrobe v1.3
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:305) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:1588) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketPlayInWindowClick.a(SourceFile:31) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketPlayInWindowClick.a(SourceFile:9) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_25]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_25]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:696) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:634) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:537) [spigot.jar:git-Spigot-c3c767f-33d5de3]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_25]
    Caused by: java.lang.NullPointerException
        at me.seanliam2000.Wardrobe.Hatinv.onInventoryClick(Hatinv.java:93) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_25]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
        ... 14 more
    
    Go easy on me :3
     
  2. Offline

    teej107

  3. Offline

    Zombie_Striker

    Something on line 93 is null. You should get into the habit of always checking to make sure the Item/ItemMeta/Lore ect. is not null. Just simply put
    Code:
    if(Object != null)
    before comparative if statements that regard objects that can be null.
     
    seanliam2000 likes this.
  4. Offline

    seanliam2000

    Okay I had tried a few null things but must have put them in the wrong area lol, ill try again. And i knew theerror was on line 93 i just didnt know how to fix




    @teej107 Not very helpful......


    EDIT: For all the people who may come across this error in the future add this right above the lore you are checking for:
    Code:java
    1.  
    2. if (clicked.getItemMeta() != null) {
    3. if (clicked.getItemMeta().getLore() != null) {
    4.  
     
    Last edited: Apr 12, 2015
Thread Status:
Not open for further replies.

Share This Page