Inventory Menu's

Discussion in 'Resources' started by Ivan, Dec 11, 2013.

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

    Ivan

    Show Spoiler

    InventoryMenuHandler.java
    Code:java
    1.  
    2. import org.bukkit.entity.Player;
    3. import org.bukkit.event.EventHandler;
    4. import org.bukkit.event.Listener;
    5. import org.bukkit.event.inventory.InventoryAction;
    6. import org.bukkit.event.inventory.InventoryClickEvent;
    7. import org.bukkit.event.inventory.InventoryCloseEvent;
    8. import org.bukkit.plugin.java.JavaPlugin;
    9.  
    10. import java.util.ArrayList;
    11. import java.util.Collections;
    12.  
    13. /**
    14.  * User: Ivan
    15.  * Date: 4/12/13
    16.  * Time: 16:06
    17.  * Look me up on bukkit forums!
    18.  * [url]http://forums.bukkit.org/members/ivan.5352/[/url]
    19.  */
    20. public class InventoryMenuHandler implements Listener {
    21.  
    22. private ArrayList<InventoryMenu> menulist = new ArrayList<InventoryMenu>();
    23. private JavaPlugin plugin;
    24.  
    25. public InventoryMenuHandler(JavaPlugin plugin) {
    26. this.plugin = plugin;
    27. plugin.getLogger().info("Loading Inventory Menu Handler...");
    28. plugin.getServer().getPluginManager().registerEvents(this, plugin);
    29. plugin.getLogger().info("Inventory Menu Handler loaded!");
    30. }
    31.  
    32. /**
    33.   * Registers a menu. If a menu isn't registered it will not react
    34.   * to any actions of the player!
    35.   *
    36.   * @param menu
    37.   * @return
    38.   */
    39. public boolean registerMenu(InventoryMenu menu) {
    40. if (!menulist.contains(menu)) {
    41. menulist.add(menu);
    42. return true;
    43. }
    44. return false;
    45. }
    46.  
    47. /**
    48.   * Unregisters a menu. To be used when you're not going to use
    49.   * a menu instance anymore.
    50.   *
    51.   * @param menu
    52.   * @return
    53.   */
    54. public boolean unRegisterMenu(InventoryMenu menu) {
    55. return menulist.remove(menu);
    56. }
    57.  
    58. @EventHandler
    59. public void onMenuClick(InventoryClickEvent event) {
    60. Player player = ((Player) event.getWhoClicked());
    61. ArrayList<InventoryMenu> copiedList = new ArrayList<InventoryMenu>(menulist); //To prevent ConcurrentModification exceptions
    62. for (InventoryMenu menu : copiedList) {
    63. if (event.getInventory().getHolder() == menu) {
    64. menu.onOptionClick(player, menu.getOption(event.getRawSlot()), event.getAction());
    65. event.setCancelled(true);
    66. player.updateInventory();
    67. }
    68. }
    69. }
    70.  
    71. @EventHandler
    72. public void onMenuClose(InventoryCloseEvent event) {
    73. Player player = ((Player) event.getPlayer());
    74. ArrayList<InventoryMenu> copiedList = new ArrayList<InventoryMenu>(menulist); //To prevent ConcurrentModification exceptions
    75. for (InventoryMenu menu : copiedList) {
    76. if (event.getInventory().getHolder() == menu) {
    77. menu.onClose(player);
    78. }
    79. }
    80. }
    81.  
    82. }
    83.  

    InventoryMenu.java
    Code:java
    1.  
    2. import org.bukkit.Bukkit;
    3. import org.bukkit.entity.Player;
    4. import org.bukkit.event.inventory.InventoryAction;
    5. import org.bukkit.inventory.Inventory;
    6. import org.bukkit.inventory.InventoryHolder;
    7. import org.bukkit.inventory.ItemStack;
    8. import org.bukkit.inventory.meta.ItemMeta;
    9. import java.util.ArrayList;
    10. import java.util.HashMap;
    11. /**
    12.  * User: Ivan
    13.  * Date: 29/11/13
    14.  * Time: 23:19
    15.  * Look me up on bukkit forums!
    16.  * [url]http://forums.bukkit.org/members/ivan.5352/[/url]
    17.  */
    18. public abstract class InventoryMenu implements InventoryHolder {
    19. private HashMap<Integer, InventoryMenuOption> options = new HashMap<Integer, InventoryMenuOption>();
    20. private Inventory inventory;
    21. public InventoryMenuHandler handler;
    22. public InventoryMenu(InventoryMenuHandler handler, String title, int rows){
    23. this.inventory = Bukkit.createInventory(this, 9*rows , title);
    24. this.handler = handler;
    25. handler.registerMenu(this);
    26. }
    27. public void addMenuOption(int index, InventoryMenuOption option){
    28. options.put(index,option);
    29. inventory.setItem(index, option.getItemStack());
    30. }
    31. public Inventory getInventory(){
    32. return this.inventory;
    33. }
    34. public InventoryMenuOption getOption(int slot){
    35. return options.get(slot);
    36. }
    37. public abstract void onOptionClick(Player player, InventoryMenuOption option, InventoryAction action);
    38. public void sendToPlayer(Player player){
    39. player.openInventory(this.inventory);
    40. }
    41. }
    42. class InventoryMenuOption {
    43. private ItemStack baseitem;
    44. private String displayName;
    45. private ArrayList<String> lore;
    46. public InventoryMenuOption(ItemStack baseitem, String displayName, ArrayList<String> lore){
    47. this.baseitem = baseitem;
    48. this.displayName = displayName;
    49. this.lore = lore;
    50. }
    51. public ItemStack getItemStack(){
    52. ItemStack freshitemstack = new ItemStack(baseitem);
    53. ItemMeta meta = freshitemstack.getItemMeta();
    54. meta.setDisplayName(this.displayName);
    55. meta.setLore(this.lore);
    56. freshitemstack.setItemMeta(meta);
    57. return freshitemstack;
    58. }
    59. public void setLore(ArrayList<String> lore){
    60. this.lore = lore;
    61. }
    62. public String getDisplayName(){
    63. return displayName;
    64. }
    65. }
    66. class InventoryMenuOption {
    67. private ItemStack baseitem;
    68. private String displayName;
    69. private ArrayList<String> lore;
    70. public InventoryMenuOption(ItemStack baseitem, String displayName, ArrayList<String> lore){
    71. this.baseitem = baseitem;
    72. this.displayName = displayName;
    73. this.lore = lore;
    74. }
    75. public ItemStack getItemStack(){
    76. ItemStack freshItemStack = new ItemStack(baseitem);
    77. ItemMeta meta = freshItemStack.getItemMeta();
    78. meta.setDisplayName(this.displayName);
    79. meta.setLore(this.lore);
    80. freshItemStack.setItemMeta(meta);
    81. return freshItemStack;
    82. }
    83. public void setLore(ArrayList<String> lore){
    84. this.lore = lore;
    85. }
    86. public String getDisplayName(){
    87. return displayName;
    88. }
    89. }
    90.  


    You register the Handler in your onEnable(), you extend InventoryMenu and fill in the events.
    Example:
    Show Spoiler

    Code:java
    1.  
    2. public class DeveloperMenu extends InventoryMenu {
    3. public DeveloperMenu(InventoryMenuHandler handler) {
    4. super(handler, "Developers Menu");
    5. this.addMenuOption(0, new InventoryMenuOption(new ItemStack(Material.WATCH), ChatColor.GOLD+"Day", new ArrayList<String>()));
    6. this.addMenuOption(1, new InventoryMenuOption(new ItemStack(Material.WATCH), ChatColor.BLUE+"Night", new ArrayList<String>()));
    7. this.addMenuOption(3, new InventoryMenuOption(new ItemStack(Material.EXP_BOTTLE), ChatColor.AQUA+"Creative", new ArrayList<String>()));
    8. this.addMenuOption(4, new InventoryMenuOption(new ItemStack(Material.IRON_SWORD), ChatColor.GREEN+"Survival", new ArrayList<String>()));
    9. this.addMenuOption(5, new InventoryMenuOption(new ItemStack(Material.WATER_BUCKET), ChatColor.AQUA+"Toggle Downfall", new ArrayList<String>()));
    10. this.addMenuOption(8, new InventoryMenuOption(new ItemStack(Material.RECORD_4), ChatColor.DARK_RED+"Sounds", new ArrayList<String>()));
    11. this.addMenuOption(7, new InventoryMenuOption(new ItemStack(Material.FIREWORK), ChatColor.RED+"Particles", new ArrayList<String>()));
    12. }
    13. @Override
    14. public void onOptionClick(Player player, InventoryMenuOption option, InventoryAction action) {
    15. if(option.getDisplayName().contains("Day")){
    16. player.getWorld().setTime(0);
    17. player.closeInventory();
    18. } else if(option.getDisplayName().contains("Night")){
    19. player.getWorld().setTime(14000);
    20. player.closeInventory();
    21. } else if(option.getDisplayName().contains("Creative")){
    22. player.setGameMode(GameMode.CREATIVE);
    23. player.closeInventory();
    24. } else if(option.getDisplayName().contains("Survival")){
    25. player.setGameMode(GameMode.SURVIVAL);
    26. player.closeInventory();
    27. } else if(option.getDisplayName().contains("Downfall")){
    28. player.getWorld().setThundering(!player.getWorld().isThundering());
    29. player.getWorld().setWeatherDuration(1000);
    30. player.closeInventory();
    31. }
    32. handler.unRegisterMenu(this);
    33. }
    34.  
    35. @Override
    36. public void onClose(Player player){
    37.  
    38. }
    39. }
    40.  

    Gives you:
    [​IMG]
     
    Micius and pope_on_dope like this.
  2. Offline

    Quaro

    menu.onClose(player);
    method undefined.

    Ivan And how to open menu?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
Thread Status:
Not open for further replies.

Share This Page