Advertisement
Guest User

IconMenu

a guest
Apr 29th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.63 KB | None | 0 0
  1. package com.jabyftw.sgames.util;
  2.  
  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.event.inventory.InventoryCloseEvent;
  11. import org.bukkit.event.inventory.InventoryMoveItemEvent;
  12. import org.bukkit.inventory.Inventory;
  13. import org.bukkit.inventory.ItemStack;
  14. import org.bukkit.plugin.Plugin;
  15. import org.bukkit.scheduler.BukkitRunnable;
  16.  
  17. /**
  18.  * @author nisovin - http://forums.bukkit.org/threads/icon-menu.108342/
  19.  * @editor Rafael
  20.  */
  21. @SuppressWarnings("UnusedDeclaration")
  22. public class IconMenu implements Listener {
  23.  
  24.     private final Plugin plugin;
  25.     private final String name;
  26.     private final int size, page;
  27.     private final IconMenuEventHandler handler;
  28.     private ItemStack[] Icons;
  29.  
  30.     public IconMenu(Plugin plugin, String name, int size, int page, IconMenuEventHandler handler) {
  31.         this.plugin = plugin;
  32.         this.name = name.replaceAll("&", "§");
  33.         this.size = size;
  34.         this.page = page;
  35.         this.handler = handler;
  36.         this.Icons = new ItemStack[size];
  37.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
  38.     }
  39.  
  40.     public int getPage() {
  41.         return page;
  42.     }
  43.  
  44.     public IconMenu setOption(int position, ItemStack icon) {
  45.         Icons[position] = icon;
  46.         return this;
  47.     }
  48.  
  49.     public void destroy() {
  50.         HandlerList.unregisterAll(this);
  51.     }
  52.  
  53.     public void openInventory(Player player) {
  54.         Inventory inventory = Bukkit.createInventory(player, size, name);
  55.         for(int i = 0; i < Icons.length; i++) {
  56.             inventory.setItem(i, Icons[i]);
  57.         }
  58.         player.openInventory(inventory);
  59.     }
  60.  
  61.     @EventHandler(priority = EventPriority.MONITOR)
  62.     void onInventoryClick(InventoryClickEvent e) {
  63.         if(e.getInventory().getTitle().equals(name)) {
  64.             e.setCancelled(true);
  65.             if(e.getRawSlot() >= 0 && e.getRawSlot() < size && Icons[e.getRawSlot()] != null) {
  66.                 InventoryMenuClickEvent event = new InventoryMenuClickEvent((Player) e.getWhoClicked(), e.getSlot(), page, e.getCurrentItem());
  67.                 handler.onInventoryClick(event);
  68.                 if(event.isClosing()) {
  69.                     final Player player = (Player) e.getWhoClicked();
  70.                     plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new BukkitRunnable() {
  71.  
  72.                         @Override
  73.                         public void run() {
  74.                             player.closeInventory();
  75.                         }
  76.                     }, 1);
  77.                 }
  78.             }
  79.         }
  80.     }
  81.  
  82.     @EventHandler(priority = EventPriority.MONITOR)
  83.     void onInventoryClose(InventoryCloseEvent e) {
  84.         if(e.getInventory().getTitle().equals(name)) {
  85.             handler.onInventoryClose(new InventoryMenuCloseEvent((Player) e.getPlayer()));
  86.         }
  87.     }
  88.  
  89.     @EventHandler(priority = EventPriority.MONITOR)
  90.     void onInventoryMove(InventoryMoveItemEvent e) {
  91.         if(e.getInitiator().getTitle().equals(name)) {
  92.             e.setCancelled(true);
  93.         }
  94.     }
  95.  
  96.     public interface IconMenuEventHandler {
  97.  
  98.         public void onInventoryClick(InventoryMenuClickEvent e);
  99.  
  100.         public void onInventoryClose(InventoryMenuCloseEvent e);
  101.     }
  102.  
  103.     public class InventoryMenuClickEvent {
  104.  
  105.         private final Player player;
  106.         private final int slot, page;
  107.         private final ItemStack item;
  108.  
  109.         private boolean closing = false;
  110.  
  111.         public InventoryMenuClickEvent(Player player, int slot, int page, ItemStack item) {
  112.             this.player = player;
  113.             this.slot = slot;
  114.             this.page = page;
  115.             this.item = item;
  116.         }
  117.  
  118.         public Player getPlayer() {
  119.             return player;
  120.         }
  121.  
  122.         public int getSlot() {
  123.             return slot;
  124.         }
  125.  
  126.         public int getPage() {
  127.             return page;
  128.         }
  129.  
  130.         public ItemStack getItem() {
  131.             return item;
  132.         }
  133.  
  134.         public boolean isClosing() {
  135.             return closing;
  136.         }
  137.  
  138.         public void setClosing(boolean closing) {
  139.             this.closing = closing;
  140.         }
  141.     }
  142.  
  143.     public class InventoryMenuCloseEvent {
  144.  
  145.         private final Player player;
  146.  
  147.         public InventoryMenuCloseEvent(Player player) {
  148.             this.player = player;
  149.         }
  150.  
  151.         public Player getPlayer() {
  152.             return player;
  153.         }
  154.     }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement