Shop kits in menu

Discussion in 'Plugin Development' started by FlothersBR, Oct 17, 2013.

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

    FlothersBR

    How to create an inventory of kits with the shop?
    Using iconmenu and a command to open the shop?
     
  2. Offline

    Doodledew

    I have some example code for the menu.. it's not for kits (it's a gamemode changer), but still, it can teach you some basics ;)


    The Menu:

    Code:java
    1.  
    2. private Inventory inv;
    3. private ItemStack c, s, a;
    4.  
    5. public Menu(Plugin p) {
    6. inv = Bukkit.getServer().createInventory(null, 9, "Gamemode Chooser");
    7.  
    8. c = createItem(DyeColor.GREEN, ChatColor.GREEN + "Creative");
    9. s = createItem(DyeColor.YELLOW, ChatColor.YELLOW + "Survival");
    10. a = createItem(DyeColor.RED, ChatColor.RED + "Adventure");
    11.  
    12. inv.setItem(2, c);
    13. inv.setItem(4, s);
    14. inv.setItem(6, a);
    15.  
    16. Bukkit.getServer().getPluginManager().registerEvents(this, p);
    17. }
    18.  
    19. private ItemStack createItem(DyeColor dc, String name) {
    20. ItemStack i = new Wool(dc).toItemStack(1);
    21. ItemMeta im = i.getItemMeta();
    22. im.setDisplayName(name);
    23. im.setLore(Arrays.asList("Set your gamemode", "to " + name.toLowerCase() + " mode"));
    24. i.setItemMeta(im);
    25. return i;
    26. }
    27.  
    28. public void show(Player p) {
    29. p.openInventory(inv);
    30. }
    31.  
    32. @EventHandler
    33. public void onInventoryClick(InventoryClickEvent e) {
    34. if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
    35. if (e.getCurrentItem().getItemMeta() == null) return;
    36. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Creative")) {
    37. e.setCancelled(true);
    38. e.getWhoClicked().setGameMode(GameMode.CREATIVE);
    39. e.getWhoClicked().closeInventory();
    40. }
    41. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Survival")) {
    42. e.setCancelled(true);
    43. e.getWhoClicked().setGameMode(GameMode.SURVIVAL);
    44. e.getWhoClicked().closeInventory();
    45. }
    46. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Adventure")) {
    47. e.setCancelled(true);
    48. e.getWhoClicked().setGameMode(GameMode.ADVENTURE);
    49. e.getWhoClicked().closeInventory();
    50. }
    51. }



    Interact:

    Code:java
    1. private Menu menu;
    2.  
    3. public void onEnable() {
    4. menu = new Menu(this);
    5. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    6. }
    7.  
    8. @EventHandler
    9. public void onPlayerInteract(PlayerInteractEvent e) {
    10. if (!(e.getAction() == Action.RIGHT_CLICK_BLOCK)) return;
    11. menu.show(e.getPlayer());
    12. }
     
  3. Offline

    xepisolonxx

    You just stole the code from pogostick29dev check on iconmenu on the forums it has lots of good api in that.
     
  4. Offline

    Speaw

    Main Class:
    Code:java
    1. package com.speaw.cmenu;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.GameMode;
    5. import org.bukkit.Material;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.EventPriority;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.block.Action;
    11. import org.bukkit.event.player.PlayerInteractEvent;
    12. import org.bukkit.inventory.ItemStack;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14.  
    15. import com.speaw.cmenu.IconMenu;
    16.  
    17. public class Main extends JavaPlugin implements Listener {
    18. IconMenu menu;
    19. @Override
    20. public void onEnable()
    21. {
    22. getServer().getPluginManager().registerEvents(this, this);
    23. this.menu = new IconMenu(ChatColor.BLUE + "Command Menu!!", 36, new IconMenu.OptionClickEventHandler()
    24. {
    25. @SuppressWarnings({ "unused" })
    26. public void onOptionClick(IconMenu.OptionClickEvent event)
    27. {
    28. Player clicker = event.getPlayer();
    29. String name = event.getName();
    30. event.setWillClose(true);
    31. switch (event.getPosition()) {
    32. case 0:
    33. clicker.setGameMode(GameMode.CREATIVE);
    34. break;
    35. case 1:
    36. clicker.setGameMode(GameMode.SURVIVAL);
    37. break;
    38. case 2:
    39. break;
    40. case 3:
    41. break;
    42. case 4:
    43. break;
    44. case 5:
    45. break;
    46. case 6:
    47. break;
    48. case 7:
    49. break;
    50. case 8:
    51. break;
    52. }
    53. }
    54. }
    55. , this)
    56. .setOption(0, new ItemStack(Material.STICK, 1), "§4§lCreative", new String[] { "§d§lCreative."})
    57. .setOption(1, new ItemStack(Material.DIAMOND_AXE, 1), "§4§lSurvival", new String[] { "§d§lAyılar icin."});
    58. }
    59. @EventHandler (priority = EventPriority.HIGHEST)
    60. public void onInteract(PlayerInteractEvent e) {
    61. if (e.getPlayer().getItemInHand().getType() == Material.EMERALD) {
    62. if ((e.getAction() == Action.RIGHT_CLICK_AIR) || (e.getAction() == Action.RIGHT_CLICK_BLOCK)) {
    63. menu.open(e.getPlayer());
    64. return;
    65. }
    66. }
    67. }
    68. }

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

Share This Page