Adding Lore to Items on PlayerClickEvent

Discussion in 'Plugin Development' started by Benlewis9000, Mar 6, 2014.

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

    Benlewis9000

    On my old plugin, I had it so that it added the players name to an item in the lore when they picked it up, however, you could bypass this method by using chests, furnaces, brewing stands ect, so I am now trying to create one that tags an item when you click on it.
    However, seeing as I am posting here, it does not work. When you pick it up it detects no lore, creates metadata, adds the lore and its fine. But you are still holding it, so you cant see. When you place it down again, it detects that 1) the item is not null, 2) that the event was registered and processed but does not execute 3) checking for lore, then adding it if .getLore() == null! Instead it returns a NullPointerException. You also still cant see the lore, but it registers the itemMeta.
    The method being used is as follows:
    Code:java
    1. @EventHandler
    2.  
    3. public void onInventoryClickEvent(InventoryClickEvent event) {
    4.  
    5.  
    6.  
    7. ItemStack item = event.getCurrentItem();
    8.  
    9. ItemMeta itemMeta = item.getItemMeta();
    10.  
    11. Player player = (Player) event.getWhoClicked();
    12.  
    13.  
    14.  
    15. player.sendMessage("§aInventoryClickEvent was registered!");
    16.  
    17.  
    18.  
    19. if(item != null || item.getType() != Material.AIR) {
    20.  
    21.  
    22.  
    23. player.sendMessage("§aItem is not null");
    24.  
    25.  
    26.  
    27. if(itemMeta.getLore() == null){ //ERROR Points at this line!
    28.  
    29. player.sendMessage("§aNo lore detected! Creating some...");
    30.  
    31. ItemMeta newMeta = itemMeta;
    32.  
    33. newMeta.setLore(Arrays.asList("§4[§3ItemTag§4]§3 " + player.getName())); //ERROR used to point at this one!
    34.  
    35. item.setItemMeta(newMeta);
    36.  
    37. event.setCurrentItem(item);
    38.  
    39.  
    40.  
    41. }else{
    42.  
    43. player.sendMessage("§aItem already has lore!");
    44.  
    45. }
    46.  
    47. }
    48.  
    49. }

    I have also tried item.hasLore() == false, but it also did not work.
     
  2. Offline

    HungerCraftNL

    Try this:
    PHP:
    if(!im.hasLore()){
      
    //code
    }
     
  3. Offline

    Benlewis9000

    HungerCraftNL
    I managed to get it to stop printing errors with
    Code:java
    1. if(event.getCurrentItem().getItemMeta() != null){

    but it still does not show lore?
     
  4. Offline

    diage

    Browser OP VVVV
     
  5. Offline

    HungerCraftNL

    Try this:
    PHP:
    import java.util.Arrays;
     
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
     
    @
    EventHandler
    public void onInventoryClickEvent(InventoryClickEvent event) { 
        
    Player player = (Playerevent.getWhoClicked();
        
    ItemStack item player.getItemInHand();
        
    ItemMeta itemMeta item.getItemMeta();
        
    player.sendMessage("§aInventoryClickEvent was registered!");
     
        if(
    item != null || item.getType() != Material.AIR) {
            if(
    event.getInventory() == player.getInventory()){
                
    player.sendMessage("§aItem is not null");
     
                if(!
    itemMeta.hasLore()){
                    
    player.sendMessage("§aNo lore detected! Creating some...");
                    
    ItemMeta newMeta itemMeta;
                    
    newMeta.setLore(Arrays.asList("§4[§3ItemTag§4]§3 " player.getName()));
                    
    item.setItemMeta(newMeta);
                    
    player.updateInventory();
                } else {
                    
    player.sendMessage("§aItem already has lore!");
                }
            }
        }
    }
    It has some changes:
    • It checks or the event inventory is the player inventory, you can change that to every inventory you want.
    • Added inventory update
    • Not adding new item to inventory.
     
  6. Offline

    Benlewis9000

    HungerCraftNL
    Can't teat it until tomorrow but looks hopeful! Just so you know, adding the item back into the inventory was a debug test, and how does the checking for player inventory help? Can you access them elsewhere?
     
  7. Offline

    HungerCraftNL

    Here is the checking for the player inventory.
    PHP:
    if(event.getInventory() == player.getInventory()){
      
    //code
    }
     
  8. Offline

    Benlewis9000

    HungerCraftNL
    I think you misunderstood me... Why should I do it, not how.
     
  9. Offline

    HungerCraftNL

    Otherwise it will work on other inventorys as well, or might throw errors.
     
  10. Offline

    Benlewis9000

  11. Offline

    HungerCraftNL

    Any errors?
     
  12. Offline

    Benlewis9000

    HungerCraftNL
    Code:
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:1473) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInSetCreativeSlot.a(SourceFile:23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInSetCreativeSlot.handle(SourceFile:9) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.NullPointerException
        at me.benLewis.itemTag.ItemTag.onInventoryClickEvent(ItemTag.java:66) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_15]
        at java.lang.reflect.Method.invoke(Method.java:601) ~[?:1.7.0_15]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 13 more
    [22:11:21] [Server thread/INFO]: [builds]<Benlewis9000> t
    Code:
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:1473) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInSetCreativeSlot.a(SourceFile:23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInSetCreativeSlot.handle(SourceFile:9) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.NullPointerException
        at me.benLewis.itemTag.ItemTag.onInventoryClickEvent(ItemTag.java:66) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_15]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_15]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_15]
        at java.lang.reflect.Method.invoke(Method.java:601) ~[?:1.7.0_15]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 13 more
    [21:54:34] [Server thread/ERROR]: Could not pass event InventoryCreativeEvent to Item Tag v1.1
     
  13. Offline

    HungerCraftNL

    Can you post the full ItemTag class?
     
  14. Offline

    Benlewis9000

    HungerCraftNL
    I ask it is kept relatively private though please ;)
    http://pastebin.com/dpiFWD30

    and still not liking this line for an NPE
    if(itemMeta.getLore() != null){

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

    HungerCraftNL

    You've tried
    PHP:
    if(!itemMeta.hasLore()){
    ?
     
  16. Offline

    Benlewis9000

    HungerCraftNL
    Yes, I've tried literally every variation there is. But I think when it use your way ' I have been changing them around a lot for tests' it prints errors on line 57 or something, can't remember, check the traces I posted above, and then refer to the past in link.
     
Thread Status:
Not open for further replies.

Share This Page