ericek111

IconMenu

Jul 3rd, 2014
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.38 KB | None | 0 0
  1. package me.lixko.plugins.remoteorderer;
  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, Plugin plugin) {
  28.         this.name = name;
  29.         this.size = size;
  30.         this.handler = handler;
  31.         this.plugin = plugin;
  32.         this.optionNames = new String[size];
  33.         this.optionIcons = new ItemStack[size];
  34.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
  35.     }
  36.    
  37.     public IconMenu setOption(int position, ItemStack icon, String name, String... info) {
  38.         optionNames[position] = name;
  39.         optionIcons[position] = setItemNameAndLore(icon, name, info);
  40.         return this;
  41.     }
  42.    
  43.     public void open(Player player) {
  44.         Inventory inventory = Bukkit.createInventory(player, size, name);
  45.         for (int i = 0; i < optionIcons.length; i++) {
  46.             if (optionIcons[i] != null) {
  47.                 inventory.setItem(i, optionIcons[i]);
  48.             }
  49.         }
  50.         player.openInventory(inventory);
  51.     }
  52.    
  53.     public void destroy() {
  54.         HandlerList.unregisterAll(this);
  55.         handler = null;
  56.         plugin = null;
  57.         optionNames = null;
  58.         optionIcons = null;
  59.     }
  60.    
  61.     @EventHandler(priority=EventPriority.MONITOR)
  62.     void onInventoryClick(InventoryClickEvent event) {
  63.         if (event.getInventory().getTitle().equals(name)) {
  64.             event.setCancelled(true);
  65.             int slot = event.getRawSlot();
  66.             if (slot >= 0 && slot < size && optionNames[slot] != null) {
  67.                 Plugin plugin = this.plugin;
  68.                 OptionClickEvent e = new OptionClickEvent((Player)event.getWhoClicked(), slot, optionNames[slot]);
  69.                 handler.onOptionClick(e);
  70.                 if (e.willClose()) {
  71.                     final Player p = (Player)event.getWhoClicked();
  72.                     Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
  73.                         public void run() {
  74.                             p.closeInventory();
  75.                         }
  76.                     }, 1);
  77.                 }
  78.                 if (e.willDestroy()) {
  79.                     destroy();
  80.                 }
  81.             }
  82.         }
  83.     }
  84.    
  85.     public interface OptionClickEventHandler {
  86.         public void onOptionClick(OptionClickEvent event);      
  87.     }
  88.    
  89.     public class OptionClickEvent {
  90.         private Player player;
  91.         private int position;
  92.         private String name;
  93.         private boolean close;
  94.         private boolean destroy;
  95.        
  96.         public OptionClickEvent(Player player, int position, String name) {
  97.             this.player = player;
  98.             this.position = position;
  99.             this.name = name;
  100.             this.close = true;
  101.             this.destroy = false;
  102.         }
  103.        
  104.         public Player getPlayer() {
  105.             return player;
  106.         }
  107.        
  108.         public int getPosition() {
  109.             return position;
  110.         }
  111.        
  112.         public String getName() {
  113.             return name;
  114.         }
  115.        
  116.         public boolean willClose() {
  117.             return close;
  118.         }
  119.        
  120.         public boolean willDestroy() {
  121.             return destroy;
  122.         }
  123.        
  124.         public void setWillClose(boolean close) {
  125.             this.close = close;
  126.         }
  127.        
  128.         public void setWillDestroy(boolean destroy) {
  129.             this.destroy = destroy;
  130.         }
  131.     }
  132.    
  133.     private ItemStack setItemNameAndLore(ItemStack item, String name, String[] lore) {
  134.         ItemMeta im = item.getItemMeta();
  135.             im.setDisplayName(name);
  136.             im.setLore(Arrays.asList(lore));
  137.         item.setItemMeta(im);
  138.         return item;
  139.     }
  140.    
  141. }
Advertisement
Add Comment
Please, Sign In to add comment