package tokarotik.giftapi.inventory; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import tokarotik.giftapi.cache.CacheManager; import tokarotik.giftapi.NBT.pages.PagesManager; import tokarotik.giftapi.inventory.inventoryitems.InventoryItems; public class InventoryUtil { private final CacheManager cacheManager; private final InventoryItems inventoryItems; private final String nameGUI; private final String nameArrowRight; private final String nameArrowLeft; private final String nameExit; private final int inventory_slots; public InventoryUtil(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit, int inventory_slots) { this.cacheManager = cacheManager; this.nameGUI = nameGUI; this.nameArrowRight = nameArrowRight; this.nameArrowLeft = nameArrowLeft; this.nameExit = nameExit; this.inventory_slots = inventory_slots; this.inventoryItems = new InventoryItems(inventory_slots); } public void onInventoryClick(InventoryClickEvent event) { Inventory inventory = event.getInventory(); if (inventory.getTitle().equals(this.nameGUI)) { event.setCancelled(true); ItemStack currentItem = event.getCurrentItem(); if (currentItem == null) { return; } String nameCurrentItem = null; if (currentItem.hasItemMeta()) { if (currentItem.getItemMeta().hasDisplayName()) { nameCurrentItem = currentItem.getItemMeta().getDisplayName(); } } Player player = (Player) event.getWhoClicked(); if (!nameCurrentItem.isEmpty()) { if (nameCurrentItem.equals(this.nameArrowRight)) { PagesManager pagesManager = this.cacheManager.load(player); if (pagesManager.getCountPages() > pagesManager.getCurrentPage()) { pagesManager.nextPage(); updateInventory(inventory, player); } } if (nameCurrentItem.equals(this.nameArrowLeft)) { PagesManager pagesManager = this.cacheManager.load(player); if (0 < pagesManager.getCurrentPage()) { pagesManager.backPage(); updateInventory(inventory, player); } } if (nameCurrentItem.equals(this.nameExit)) { player.closeInventory(); } } } } public synchronized void updateInventory(Inventory inventory, Player player) { PagesManager pagesManager = this.cacheManager.load(player); setUI(inventory, pagesManager); this.inventoryItems.renderPage(pagesManager, inventory); } private synchronized void setUI(Inventory inventory, PagesManager pagesManager) { int height = (this.inventory_slots / 9) + 1; // exit setItem(inventory, Material.REDSTONE, this.nameExit, 4, height); if (pagesManager.getCountPages() == 0) { return; } if (pagesManager.getCurrentPage() != pagesManager.getCountPages()) { // arrow right setArrow(inventory, this.nameArrowRight, 8, height); } if (pagesManager.getCurrentPage() != 0) { // arrow left setArrow(inventory, this.nameArrowLeft, 0, height); } } private synchronized void setItem(Inventory inventory, Material material, String name, int x, int y) { ItemStack item = new ItemStack(material, 1); ItemMeta meta_item = item.getItemMeta(); meta_item.setDisplayName(name); item.setItemMeta(meta_item); inventory.setItem( getCordinates(x, y), item ); } private synchronized void setArrow(Inventory inventory, String name, int x, int y) { setItem(inventory, Material.ARROW, name, x, y); } public synchronized int getCordinates(int x, int y) { if (y == 0) {y++;} return ((y - 1) * 9 + x) % (this.inventory_slots + 9); } }