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 private IconMenu testmenu = new IconMenu("Test", 9, new IconMenu.OptionClickEventHandler() {@Overridepublic void onOptionClick(IconMenu.OptionClickEvent event) {event.getPlayer().sendMessage("Test: " + event.getName());event.setWillClose(true);}}, this).setOption(3, new ItemStack(Material.PAPER, 1), "test", "test").setOption(4, new ItemStack(Material.WRITTEN_BOOK, 1), "test", "test").setOption(5, new ItemStack(Material.EMERALD, 1), "test", "test"); 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.
There is a NullPointerException at line 34 in the IconMenu class. Try to create the menu at the event.
IconMenu class: Code:java import java.util.Arrays;import org.bukkit.Bukkit;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.EventPriority;import org.bukkit.event.HandlerList;import org.bukkit.event.Listener;import org.bukkit.event.inventory.InventoryClickEvent;import org.bukkit.inventory.Inventory;import org.bukkit.inventory.ItemStack;import org.bukkit.inventory.meta.ItemMeta;import org.bukkit.plugin.Plugin; public class IconMenu implements Listener { private String name;private int size;private OptionClickEventHandler handler;private Plugin plugin; private String[] optionNames;private ItemStack[] optionIcons; public IconMenu(String name, int size, OptionClickEventHandler handler, Plugin plugin) {this.name = name;this.size = size;this.handler = handler;this.plugin = plugin;this.optionNames = new String[size];this.optionIcons = new ItemStack[size];plugin.getServer().getPluginManager().registerEvents(this, plugin);} public IconMenu setOption(int position, ItemStack icon, String name, String... info) {optionNames[position] = name;optionIcons[position] = setItemNameAndLore(icon, name, info);return this;} public void open(Player player) {Inventory inventory = Bukkit.createInventory(player, size, name);for (int i = 0; i < optionIcons.length; i++) {if (optionIcons != null) {inventory.setItem(i, optionIcons);}}player.openInventory(inventory);} public void destroy() {HandlerList.unregisterAll(this);handler = null;plugin = null;optionNames = null;optionIcons = null;} @EventHandler(priority=EventPriority.MONITOR)void onInventoryClick(InventoryClickEvent event) {if (event.getInventory().getTitle().equals(name)) {event.setCancelled(true);int slot = event.getRawSlot();if (slot >= 0 && slot < size && optionNames[slot] != null) {Plugin plugin = this.plugin;OptionClickEvent e = new OptionClickEvent((Player)event.getWhoClicked(), slot, optionNames[slot]);handler.onOptionClick(e);if (e.willClose()) {final Player p = (Player)event.getWhoClicked();Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {public void run() {p.closeInventory();}}, 1);}if (e.willDestroy()) {destroy();}}}} public interface OptionClickEventHandler {public void onOptionClick(OptionClickEvent event);} public class OptionClickEvent {private Player player;private int position;private String name;private boolean close;private boolean destroy; public OptionClickEvent(Player player, int position, String name) {this.player = player;this.position = position;this.name = name;this.close = true;this.destroy = false;} public Player getPlayer() {return player;} public int getPosition() {return position;} public String getName() {return name;} public boolean willClose() {return close;} public boolean willDestroy() {return destroy;} public void setWillClose(boolean close) {this.close = close;} public void setWillDestroy(boolean destroy) {this.destroy = destroy;}} private ItemStack setItemNameAndLore(ItemStack item, String name, String[] lore) {ItemMeta im = item.getItemMeta();im.setDisplayName(name);im.setLore(Arrays.asList(lore));item.setItemMeta(im);return item;} } Main class: Code:java public class Novaclass extends JavaPlugin implements Listener{public void onEnable() {IconMenu testmenu =new IconMenu("Test", 9, new IconMenu.OptionClickEventHandler() {@Overridepublicvoid onOptionClick(IconMenu.OptionClickEvent event) {event.getPlayer().sendMessage("Test: "+ event.getName());event.setWillClose(true);}}, this)setOption(3, new ItemStack(Material.PAPER, 1), "test", "test")setOption(4, new ItemStack(Material.WRITTEN_BOOK, 1), "test", "test")setOption(5, new ItemStack(Material.EMERALD, 1), "test", "test"); PluginManager pm = this.getServer().getPluginManager();pm.registerEvents(this, this); } @Overridepublic boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {if(cmd.getName().equalsIgnoreCase("test2")){testmenu.open((Player)sender);return true;}return false;}} testmenu cannot be resolved(23line)
Because it is in a method so can't be accessed from other methods. Put it like this: Code:java //NOT in onEnable:IconMenu testmenu; //IN onEnable():testmenu = new IconMenu(...); //replace with your parameters