Events not working

Discussion in 'Plugin Development' started by Googlelover1234, Sep 17, 2014.

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

    Googlelover1234

    Hi there :). So, I've been trying to recode my plugin in multiple packages, for one, to learn more on how they work, and two, organization is not my sweet spot. Anyway, Basically, I've been trying to do some inventory events. On my old plugin, I used this method, and it worked perfectly fine. Now, only one of the inventories work, and the others just give me NPEs. The stack traces don't give me much of an idea of why it's breaking, so if anyone could help, that'd be fantastic. Here's code of one of my inventory classes.

    Code:java
    1. package com.GummyPvP.Events;
    2.  
    3. import org.bukkit.entity.Player;
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.Listener;
    6. import org.bukkit.event.inventory.InventoryClickEvent;
    7.  
    8. import com.GummyPvP.Main.Main;
    9.  
    10. public class FreeKitsListener implements Listener {
    11.  
    12. @EventHandler
    13. public void onFreeClick(InventoryClickEvent e) {
    14. Player p = (Player) e.getWhoClicked();
    15.  
    16. if (!e.getInventory().getName().equalsIgnoreCase(Main.getInstance().free.getName()))
    17. return;
    18.  
    19. if (e.getCurrentItem().getItemMeta() == null)
    20. return;
    21.  
    22. if (e.getCurrentItem().getItemMeta().getDisplayName().equals(" ")) {
    23. e.setCancelled(true);
    24. p.closeInventory();
    25.  
    26. }
    27.  
    28. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Rules")) {
    29. e.setCancelled(true);
    30. p.performCommand("rules");
    31. p.closeInventory();
    32.  
    33. }
    34.  
    35. if (e.getCurrentItem().getItemMeta().getDisplayName()
    36. .contains("Click to buy kits instantly by donating!")) {
    37. e.setCancelled(true);
    38. p.performCommand("buykits");
    39. p.closeInventory();
    40.  
    41. }
    42.  
    43. if (e.getCurrentItem().getItemMeta().getDisplayName()
    44. .contains("Welcome to GummyPvP.com!")) {
    45. e.setCancelled(true);
    46. p.closeInventory();
    47.  
    48. }
    49. }
    50. }
    51.  
     
  2. Offline

    ChipDev

    Stack trace?
     
  3. Offline

    Googlelover1234

    This just points to the first if statement that begins registering the clicks. I've deleted it, and it just goes on to the next. I've noticed the "InventoryCreativeEvent", which was different before...

    Code:
    [16:54:00 ERROR]: Could not pass event InventoryCreativeEvent to GummyPvP v0.1
    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 com.GummyPvP.Events.GUIListener.onInvClick(GUIListener.java:23) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor419.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_20]
        at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_20]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 13 more
    
    Actually, it points to the other class... let me post the code here.
     
  4. Offline

    Monkey_Swag

    post line 23 of your GUIListener.java class
     
  5. Offline

    Googlelover1234

    Whoops.. one second...
    Code:java
    1. package com.GummyPvP.Events;
    2.  
    3. import org.bukkit.entity.Player;
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.Listener;
    6. import org.bukkit.event.inventory.InventoryClickEvent;
    7.  
    8. import com.GummyPvP.Main.Main;
    9.  
    10. public class GUIListener implements Listener {
    11.  
    12. @EventHandler
    13. public void onInvClick(InventoryClickEvent e) {
    14.  
    15. Player p = (Player) e.getWhoClicked();
    16.  
    17. if (e.getInventory().getName().equalsIgnoreCase(Main.getInstance().inv.getName()))
    18. return;
    19.  
    20. if (e.getCurrentItem().getItemMeta() == null)
    21. return;
    22.  
    23. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Rules")) {
    24. e.setCancelled(true);
    25. p.performCommand("rules");
    26. p.closeInventory();
    27. }
    28.  
    29. if (e.getCurrentItem().getItemMeta().getDisplayName()
    30. .contains("Click to buy kits instantly by donating!")) {
    31. e.setCancelled(true);
    32. p.performCommand("buykits");
    33. p.closeInventory();
    34. }
    35.  
    36. if (e.getCurrentItem().getItemMeta().getDisplayName()
    37. .contains("Welcome to GummyPvP.com!")) {
    38. e.setCancelled(true);
    39. p.closeInventory();
    40. }
    41.  
    42. if (e.getCurrentItem().getItemMeta().getDisplayName()
    43. .contains("Free Kits")) {
    44. Main.getInstance().openFreeKits(p);
    45. }
    46.  
    47. if (e.getCurrentItem().getItemMeta().getDisplayName()
    48. .contains("Donator Kits")) {
    49. e.setCancelled(true);
    50. p.closeInventory();
    51. p.openInventory(Main.getInstance().donate);
    52. }
    53. }
    54. }
    55.  


    I tried putting them into one class, now it just doesn't recognize me clicking anything in the "Free Kits" inventory. Code:
    Code:java
    1. @EventHandler
    2. public void onFreeClick(InventoryClickEvent e) {
    3. Player p = (Player) e.getWhoClicked();
    4.  
    5. if (e.getInventory().getType().equals(InventoryType.CREATIVE))
    6. return;
    7.  
    8. if (e.getCurrentItem().getItemMeta() == null)
    9. return;
    10.  
    11. if (e.getCurrentItem().getItemMeta().getDisplayName().equals(" ")) {
    12. e.setCancelled(true);
    13. p.closeInventory();
    14.  
    15. }
    16.  
    17. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Rules")) {
    18. e.setCancelled(true);
    19. p.performCommand("rules");
    20. p.closeInventory();
    21.  
    22. }
    23.  
    24. if (e.getCurrentItem().getItemMeta().getDisplayName()
    25. .contains("Click to buy kits instantly by donating!")) {
    26. e.setCancelled(true);
    27. p.performCommand("buykits");
    28. p.closeInventory();
    29.  
    30. }
    31.  
    32. if (e.getCurrentItem().getItemMeta().getDisplayName()
    33. .contains("Welcome to GummyPvP.com!")) {
    34. e.setCancelled(true);
    35. p.closeInventory();
    36.  
    37. }
    38. }


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

    Techy4198

    before the whole 'if(e.getCurrentItem().getItemMeta().blablabla){' thing you need to do 'if(e.getCurrentItem.hasItemMeta()){'
     
  7. Offline

    Googlelover1234

    I already had a check for that, but I tried your method anyhow. Does the same thing. If I can get any help from anyone, that'd be great!

    Still haven't gotten this to work, it actually gives no error now, and it just ignores all of the event.

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

    fireblast709

    Googlelover1234 check if the ItemMeta even has a display name before using it.
    Code:java
    1. if(!item.hasItemMeta())
    2. return;
    3. ItemMeta meta = item.getItemMeta();
    4. if(!meta.hasDisplayName())
    5. return;
     
  9. Offline

    Googlelover1234

    Nope... if you want to see what's happening, I can msg you the ip of my test server, but anyway, basically, the first inventory works. I can click anything in there, it does what it is supposed to do. the "Free Kits" inventory, however, does the opposite. I have fixed all errors, yet it still is not working.
     
  10. Offline

    Techy4198

    Googlelover1234 on line 16 of the code you originally posted, you have '!e.getInventory().blablabla'. remove the ! otherwise it will only run all that if the inventory name is NOT equal to the free kits name. I don't think this is what you want to happen.
     
  11. Offline

    Googlelover1234

    Not to be rude, but please read the post if you guys want to help. Anyway, I tried putting it into one event, because I've had no luck. Here's the code:

    Code:java
    1. package com.GummyPvP.Events;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.inventory.InventoryClickEvent;
    8. import org.bukkit.event.inventory.InventoryType;
    9.  
    10. import com.GummyPvP.Main.Main;
    11.  
    12. public class GUIListener implements Listener {
    13.  
    14. @EventHandler
    15. public void onInvClick(InventoryClickEvent e) {
    16.  
    17. Player p = (Player) e.getWhoClicked();
    18.  
    19. if (!e.getCurrentItem().hasItemMeta())
    20. return;
    21.  
    22. if (!e.getCurrentItem().getItemMeta().hasDisplayName())
    23. return;
    24.  
    25. if (e.getInventory().getType().equals(InventoryType.CREATIVE))
    26. return;
    27.  
    28. if (e.getCurrentItem().getItemMeta().getDisplayName().equals(" ")) {
    29. e.setCancelled(true);
    30. p.closeInventory();
    31. }
    32.  
    33. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Rules")) {
    34. e.setCancelled(true);
    35. p.performCommand("rules");
    36. p.closeInventory();
    37. }
    38.  
    39. if (e.getCurrentItem().getItemMeta().getDisplayName()
    40. .contains("Click to buy kits instantly by donating!")) {
    41. e.setCancelled(true);
    42. p.performCommand("buykits");
    43. p.closeInventory();
    44. }
    45.  
    46. if (e.getCurrentItem().getItemMeta().getDisplayName()
    47. .contains("Welcome to GummyPvP.com!")) {
    48. e.setCancelled(true);
    49. p.closeInventory();
    50. }
    51. if (e.getInventory().getName()
    52. .equalsIgnoreCase(Main.getInstance().inv.getName())) {
    53. if (e.getCurrentItem().getItemMeta().getDisplayName()
    54. .contains("Free Kits")) {
    55. Main.getInstance().openFreeKits(p);
    56. p.sendMessage(Main.getInstance().free.getName());
    57. }
    58.  
    59. if (e.getCurrentItem().getItemMeta().getDisplayName()
    60. .contains("Donator Kits")) {
    61. e.setCancelled(true);
    62. p.closeInventory();
    63. p.openInventory(Main.getInstance().donate);
    64. }
    65. } else if (e.getInventory().getName()
    66. .equalsIgnoreCase(Main.getInstance().free.getName())) {
    67. e.setCancelled(true);
    68. p.performCommand(ChatColor.stripColor(e.getCurrentItem()
    69. .getItemMeta().getDisplayName()));
    70. p.closeInventory();
    71. }
    72.  
    73. }
    74. }
    75.  


    Still not working. IP To my test server is GummyPvP.com if you want to see the plugin, I guess it might help you visualize what is happening better.
     
  12. Offline

    mythbusterma

    Googlelover1234

    Use meaningful variable names, not "p" or "e," it's much harder to read. Second, read the documentation of InventoryClickEvent BEFORE you come post on the Bukkit forums, you could save everyone some time. It's a very simple problem that is outlined VERY clearly in the documentation.
     
Thread Status:
Not open for further replies.

Share This Page