Solved IconMenu problem

Discussion in 'Plugin Development' started by Quaro, Apr 7, 2013.

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

    Quaro

    I tryed using:
    http://forums.bukkit.org/threads/icon-menu.108342/

    How can i create menu, in "OnEnable" and than use it in my events?

    Code:java
    1.  
    2. private IconMenu testmenu = new IconMenu("Test", 9, new IconMenu.OptionClickEventHandler() {
    3. @Override
    4. public void onOptionClick(IconMenu.OptionClickEvent event) {
    5. event.getPlayer().sendMessage("Test: " + event.getName());
    6. event.setWillClose(true);
    7. }
    8. }, this)
    9. .setOption(3, new ItemStack(Material.PAPER, 1), "test", "test")
    10. .setOption(4, new ItemStack(Material.WRITTEN_BOOK, 1), "test", "test")
    11. .setOption(5, new ItemStack(Material.EMERALD, 1), "test", "test");
    12.  



    Code:
    18:57:01 [SEVERE] Could not load 'plugins\&&&&&&.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:182)
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:305)
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:230)
            at org.bukkit.craftbukkit.v1_5_R2.CraftServer.loadPlugins(CraftServer.ja
    va:239)
            at org.bukkit.craftbukkit.v1_5_R2.CraftServer.<init>(CraftServer.java:21
    7)
            at net.minecraft.server.v1_5_R2.PlayerList.<init>(PlayerList.java:55)
            at net.minecraft.server.v1_5_R2.DedicatedPlayerList.<init>(SourceFile:11
    )
            at net.minecraft.server.v1_5_R2.DedicatedServer.init(DedicatedServer.jav
    a:105)
            at net.minecraft.server.v1_5_R2.MinecraftServer.run(MinecraftServer.java
    :379)
            at net.minecraft.server.v1_5_R2.ThreadServerApplication.run(SourceFile:5
    73)
    Caused by: java.lang.NullPointerException
            at nova.craft.IconMenu.<init>(IconMenu.java:34)
            at nova.craft.Novaclass.<init>(Novaclass.java:45)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
     
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
    rce)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:178)
            ... 9 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 31, 2016
  2. Offline

    Vincent1468

    There is a NullPointerException at line 34 in the IconMenu class.
    Try to create the menu at the event.
     
  3. Offline

    MrTheNewGuy

    remove the private before Icon menu.
    you are creating a method not referring to the IconMenu class
     
  4. Offline

    Quaro

    IconMenu class:
    Code:java
    1.  
    2. import java.util.Arrays;
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.EventPriority;
    7. import org.bukkit.event.HandlerList;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.inventory.InventoryClickEvent;
    10. import org.bukkit.inventory.Inventory;
    11. import org.bukkit.inventory.ItemStack;
    12. import org.bukkit.inventory.meta.ItemMeta;
    13. import org.bukkit.plugin.Plugin;
    14.  
    15. public class IconMenu implements Listener {
    16.  
    17. private String name;
    18. private int size;
    19. private OptionClickEventHandler handler;
    20. private Plugin plugin;
    21.  
    22. private String[] optionNames;
    23. private ItemStack[] optionIcons;
    24.  
    25. public IconMenu(String name, int size, OptionClickEventHandler handler, Plugin plugin) {
    26. this.name = name;
    27. this.size = size;
    28. this.handler = handler;
    29. this.plugin = plugin;
    30. this.optionNames = new String[size];
    31. this.optionIcons = new ItemStack[size];
    32. plugin.getServer().getPluginManager().registerEvents(this, plugin);
    33. }
    34.  
    35.  
    36. public IconMenu setOption(int position, ItemStack icon, String name, String... info) {
    37. optionNames[position] = name;
    38. optionIcons[position] = setItemNameAndLore(icon, name, info);
    39. return this;
    40. }
    41.  
    42. public void open(Player player) {
    43. Inventory inventory = Bukkit.createInventory(player, size, name);
    44. for (int i = 0; i < optionIcons.length; i++) {
    45. if (optionIcons != null) {
    46. inventory.setItem(i, optionIcons);
    47. }
    48. }
    49. player.openInventory(inventory);
    50. }
    51.  
    52. public void destroy() {
    53. HandlerList.unregisterAll(this);
    54. handler = null;
    55. plugin = null;
    56. optionNames = null;
    57. optionIcons = null;
    58. }
    59.  
    60. @EventHandler(priority=EventPriority.MONITOR)
    61. void onInventoryClick(InventoryClickEvent event) {
    62. if (event.getInventory().getTitle().equals(name)) {
    63. event.setCancelled(true);
    64. int slot = event.getRawSlot();
    65. if (slot >= 0 && slot < size && optionNames[slot] != null) {
    66. Plugin plugin = this.plugin;
    67. OptionClickEvent e = new OptionClickEvent((Player)event.getWhoClicked(), slot, optionNames[slot]);
    68. handler.onOptionClick(e);
    69. if (e.willClose()) {
    70. final Player p = (Player)event.getWhoClicked();
    71. Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
    72. public void run() {
    73. p.closeInventory();
    74. }
    75. }, 1);
    76. }
    77. if (e.willDestroy()) {
    78. destroy();
    79. }
    80. }
    81. }
    82. }
    83.  
    84. public interface OptionClickEventHandler {
    85. public void onOptionClick(OptionClickEvent event);
    86. }
    87.  
    88. public class OptionClickEvent {
    89. private Player player;
    90. private int position;
    91. private String name;
    92. private boolean close;
    93. private boolean destroy;
    94.  
    95. public OptionClickEvent(Player player, int position, String name) {
    96. this.player = player;
    97. this.position = position;
    98. this.name = name;
    99. this.close = true;
    100. this.destroy = false;
    101. }
    102.  
    103. public Player getPlayer() {
    104. return player;
    105. }
    106.  
    107. public int getPosition() {
    108. return position;
    109. }
    110.  
    111. public String getName() {
    112. return name;
    113. }
    114.  
    115. public boolean willClose() {
    116. return close;
    117. }
    118.  
    119. public boolean willDestroy() {
    120. return destroy;
    121. }
    122.  
    123. public void setWillClose(boolean close) {
    124. this.close = close;
    125. }
    126.  
    127. public void setWillDestroy(boolean destroy) {
    128. this.destroy = destroy;
    129. }
    130. }
    131.  
    132. private ItemStack setItemNameAndLore(ItemStack item, String name, String[] lore) {
    133. ItemMeta im = item.getItemMeta();
    134. im.setDisplayName(name);
    135. im.setLore(Arrays.asList(lore));
    136. item.setItemMeta(im);
    137. return item;
    138. }
    139.  
    140. }
    141.  


    Main class:
    Code:java
    1.  
    2. public class Novaclass extends JavaPlugin implements Listener{
    3. public void onEnable() {
    4. IconMenu testmenu =new IconMenu("Test", 9, new IconMenu.OptionClickEventHandler() {
    5. @Override
    6. publicvoid onOptionClick(IconMenu.OptionClickEvent event) {
    7. event.getPlayer().sendMessage("Test: "+ event.getName());
    8. event.setWillClose(true);
    9. }
    10. }, this)
    11. setOption(3, new ItemStack(Material.PAPER, 1), "test", "test")
    12. setOption(4, new ItemStack(Material.WRITTEN_BOOK, 1), "test", "test")
    13. setOption(5, new ItemStack(Material.EMERALD, 1), "test", "test");
    14.  
    15. PluginManager pm = this.getServer().getPluginManager();
    16. pm.registerEvents(this, this);
    17.  
    18. }
    19.  
    20. @Override
    21. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    22. if(cmd.getName().equalsIgnoreCase("test2")){
    23. testmenu.open((Player)sender);
    24. return true;
    25. }
    26. return false;
    27. }
    28. }
    29.  

    testmenu cannot be resolved(23line)
     
  5. Offline

    chasechocolate

    Because it is in a method so can't be accessed from other methods. Put it like this:
    Code:java
    1. //NOT in onEnable:
    2. IconMenu testmenu;
    3.  
    4. //IN onEnable():
    5. testmenu = new IconMenu(...); //replace with your parameters
     
  6. Offline

    Quaro

    Really helped, THANKS!!!!!
     
Thread Status:
Not open for further replies.

Share This Page