138 lines
4.4 KiB
Java
138 lines
4.4 KiB
Java
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);
|
|
}
|
|
}
|