I'm getting an NPE on this line even though I check if the lore is null... And before that the lore wouldn't add Speed 2 NPE: Code:java for (String lore1 : p.getItemInHand().getItemMeta().getLore()) {if (lore1 != null) { }} Full: Code:java Bukkit.broadcastMessage("1");if (lore1.contains(ChatColor.AQUA + "Speed!")) {Bukkit.broadcastMessage("2");lore.addAll(im.getLore());lore.remove(ChatColor.AQUA + "Speed!");lore.add(ChatColor.AQUA + "Speed 2");meta.setLore(lore);hand.setItemMeta(meta);item.getItemMeta().getLore(); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory(); return;} if (meta.hasLore()) {Bukkit.broadcastMessage("3");if (!lore1.contains(ChatColor.AQUA + "Speed!")) {if (!lore1.contains(ChatColor.AQUA + "Speed 5")) {if (!lore1.contains(ChatColor.AQUA + "Speed 4")) {if (!lore1.contains(ChatColor.AQUA + "Speed 3")) {if (!lore1.contains(ChatColor.AQUA + "Speed 2")) { Bukkit.broadcastMessage("4");lore.addAll(im.getLore());lore.add(ChatColor.AQUA + "Speed!");meta.setLore(lore);hand.setItemMeta(meta); Bukkit.broadcastMessage("5");p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory();return;}}}}}} if (!meta.hasLore()) { lore.add(ChatColor.AQUA + "Speed!");meta.setLore(lore);hand.setItemMeta(meta);item.getItemMeta().getLore();p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory(); return;} } stacktrace: http://pastebin.com/qm9Wmg18
You need to check whether the item in the player's hand is null, if not, whether is has metadata, and finally, whether that metadata has lore. It would be something like this: Code:java if (p.getItemInHand() != null){ if (p.getItemInHand().hasItemMeta()){ if (p.getItemInHand().getItemMeta().hasLore()){ //Your code here... } }}
Necrodoom Code:java ItemStack item = p.getItemInHand();ItemMeta im = item.getItemMeta();if (item != null) { // So you don't get errors in the console about NullErrorException if (p.getInventory().contains(Material.BLAZE_ROD, 4)) { ItemStack hand = p.getItemInHand();ItemMeta meta = hand.getItemMeta();ItemStack is = new ItemStack(Material.BLAZE_ROD, 4);ItemMeta isMeta = is.getItemMeta(); ArrayList<String> lore = new ArrayList<String>();for (String lore1 : p.getItemInHand().getItemMeta().getLore()) {if (lore1.contains(ChatColor.AQUA + "Speed!")) {lore.addAll(im.getLore());lore.remove(ChatColor.AQUA + "Speed!");lore.add(ChatColor.AQUA + "Speed 2");meta.setLore(lore);hand.setItemMeta(meta);item.getItemMeta().getLore(); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory(); return;} if (meta.hasLore()) {if (!lore1.contains(ChatColor.AQUA + "Speed!")) {if (!lore1.contains(ChatColor.AQUA + "Speed 5")) {if (!lore1.contains(ChatColor.AQUA + "Speed 4")) {if (!lore1.contains(ChatColor.AQUA + "Speed 3")) {if (!lore1.contains(ChatColor.AQUA + "Speed 2")) {lore.addAll(im.getLore());lore.add(ChatColor.AQUA + "Speed!");meta.setLore(lore);hand.setItemMeta(meta); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory(); return;} if (!meta.hasLore()) { lore.add(ChatColor.AQUA + "Speed!");meta.setLore(lore);hand.setItemMeta(meta);item.getItemMeta().getLore();p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4));p.updateInventory(); return;}}}
drpk your entire code paste executes only if iteminhand is null.. Read your own code and fix the errors, you have a lot of logic errors there.
drpk oh, darn, sorry, misread your code. However, you use the if check too late, as you already try to get the iteminhand meta, which would NPE if item is null. You also have duplicated the variables from lines 1-2 in lines 7-8, and you have an useless code line on line 20. Fix these errors, recheck your logic, and if you still get issues, repasts code.
Necrodoom apparently the only time it works is when the item already has a lore, and even then, it just keeps adding speed Code:java ItemStack item = p.getItemInHand(); if (item != null) { // So you don't get errors in the console about NullErrorException if (p.getInventory().contains(Material.BLAZE_ROD, 4)) { ItemMeta meta = item.getItemMeta(); ItemStack is = new ItemStack(Material.BLAZE_ROD, 4); ItemMeta isMeta = is.getItemMeta(); ArrayList<String> lore = new ArrayList<String>(); for (String lore1 : p.getItemInHand().getItemMeta().getLore()) {if (lore1.contains(ChatColor.AQUA + "Speed!")) { lore.addAll(meta.getLore()); lore.remove(ChatColor.AQUA + "Speed!"); lore.add(ChatColor.AQUA + "Speed 2"); meta.setLore(lore); item.setItemMeta(meta); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4)); p.updateInventory(); return; } if (meta.hasLore()) { if (!lore1.contains(ChatColor.AQUA + "Speed!")) { if (!lore1.contains(ChatColor.AQUA + "Speed 5")) { if (!lore1.contains(ChatColor.AQUA + "Speed 4")) { if (!lore1.contains(ChatColor.AQUA + "Speed 3")) { if (!lore1.contains(ChatColor.AQUA + "Speed 2")) { lore.addAll(meta.getLore()); lore.add(ChatColor.AQUA + "Speed!"); meta.setLore(lore); item.setItemMeta(meta); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4)); p.updateInventory(); return; } if (!meta.hasLore()) { lore.add(ChatColor.AQUA + "Speed!"); meta.setLore(lore); item.setItemMeta(meta); item.getItemMeta().getLore(); p.getInventory().removeItem(new ItemStack(Material.BLAZE_ROD, 4)); p.updateInventory(); return; } } } }
okay, I fixed the NPE of those lines but those caused two more NPEs at these two lines. They are both the first in a series of if statements. Code:java if (!lore.isEmpty()) { if (lore.contains(ChatColor.GREEN + "NIght Vision!")) { and Code:java if (lore1.contains(ChatColor.AQUA + "Speed 5")) {[syntax=java][/syntax]