2025-07-28 23:37:49 +03:00

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);
}
}