From 22e5982e9ee7b811a3b3719b2bb345256d07908d Mon Sep 17 00:00:00 2001 From: ScriptCat Date: Mon, 28 Jul 2025 22:14:52 +0300 Subject: [PATCH] testing render items in inventory --- .../java/tokarotik/giftapi/APIManager.java | 3 +- src/main/java/tokarotik/giftapi/Main.java | 7 +-- .../giftapi/NBT/{cache => nbt}/BasicNBT.java | 2 +- .../{cache => nbt}/WorldNBTSynchronizer.java | 2 +- .../giftapi/NBT/pages/PagesManager.java | 17 ++++--- .../giftapi/NBT/pages/PagesUtil.java | 26 ----------- .../giftapi/{NBT => }/cache/CacheManager.java | 12 +++-- .../giftapi/{NBT => }/cache/CacheUtil.java | 11 +++-- .../giftapi/inventory/InventoryItems.java | 10 ---- .../giftapi/inventory/InventoryManager.java | 21 +++++---- .../giftapi/inventory/InventoryUtil.java | 21 +++++---- .../inventoryitems/InventoryItems.java | 20 ++++++++ .../inventoryitems/InventoryItemsUtil.java | 46 +++++++++++++++++++ 13 files changed, 121 insertions(+), 77 deletions(-) rename src/main/java/tokarotik/giftapi/NBT/{cache => nbt}/BasicNBT.java (98%) rename src/main/java/tokarotik/giftapi/NBT/{cache => nbt}/WorldNBTSynchronizer.java (98%) rename src/main/java/tokarotik/giftapi/{NBT => }/cache/CacheManager.java (83%) rename src/main/java/tokarotik/giftapi/{NBT => }/cache/CacheUtil.java (88%) delete mode 100644 src/main/java/tokarotik/giftapi/inventory/InventoryItems.java create mode 100644 src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java create mode 100644 src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java diff --git a/src/main/java/tokarotik/giftapi/APIManager.java b/src/main/java/tokarotik/giftapi/APIManager.java index c1b89f5..cb3e8d9 100644 --- a/src/main/java/tokarotik/giftapi/APIManager.java +++ b/src/main/java/tokarotik/giftapi/APIManager.java @@ -15,11 +15,12 @@ public class APIManager implements Listener { public final Main plugin; private final InventoryManager inventoryManager; - public APIManager(Main plugin, FileConfiguration config) + public APIManager(Main plugin, FileConfiguration config, int inventory_slots) { this.plugin = plugin; this.inventoryManager = new InventoryManager( plugin.getCacheManager(), + inventory_slots, ConfigPaths.getWithColor(config, ConfigPaths.GUINAME, "GiftAPI Menu"), ConfigPaths.getWithColor(config, ConfigPaths.GUIRIGHT, "<>"), diff --git a/src/main/java/tokarotik/giftapi/Main.java b/src/main/java/tokarotik/giftapi/Main.java index 995d2de..b401cb6 100644 --- a/src/main/java/tokarotik/giftapi/Main.java +++ b/src/main/java/tokarotik/giftapi/Main.java @@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; -import tokarotik.giftapi.NBT.cache.CacheManager; +import tokarotik.giftapi.cache.CacheManager; import tokarotik.giftapi.dev.AddCommand; import tokarotik.giftapi.dev.GiftCommand; @@ -16,14 +16,15 @@ public class Main extends JavaPlugin implements Listener { private CacheManager cacheManager; private APIManager apiManager; + private final int inventory_slots = 54; @Override public void onEnable() { saveDefaultConfig(); - cacheManager = new CacheManager(54); - apiManager = new APIManager(this, getConfig()); + cacheManager = new CacheManager(inventory_slots); + apiManager = new APIManager(this, getConfig(), inventory_slots); this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE this.getCommand("add").setExecutor(new AddCommand(apiManager, this)); // DELETE FOR RELEASE diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java b/src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java similarity index 98% rename from src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java rename to src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java index 7c24c16..f229d62 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java +++ b/src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT.cache; +package tokarotik.giftapi.NBT.nbt; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools; diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java b/src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java similarity index 98% rename from src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java rename to src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java index a3c8f9a..10b9827 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java +++ b/src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT.cache; +package tokarotik.giftapi.NBT.nbt; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTTagCompound; diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java index b286d00..696d551 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java @@ -8,15 +8,17 @@ public class PagesManager private NBTTagList tag; private int current_page = 0; private int count_pages = 0; - - public PagesManager(NBTTagList tag) + private final int items_slots; + public PagesManager(NBTTagList tag, int items_slots) { + this.items_slots = items_slots; this.tag = tag; setCountPages(); } - public PagesManager() + public PagesManager(int items_slots) { + this.items_slots = items_slots; this.tag = new NBTTagList("giftapi"); } @@ -40,9 +42,11 @@ public class PagesManager setCountPages(); } - public int getIntCurrentPage() { return this.current_page; } + public ItemStack[] getList() { return PagesUtil.reverse( PagesUtil.getRawList(this.tag) ); } - public void setIntCurrentPage(int current_page) { this.current_page = current_page; } + public int getCurrentPage() { return this.current_page; } + + public void setCurrentPage(int current_page) { this.current_page = current_page; } public int getCountPages() { return this.count_pages; } @@ -50,8 +54,7 @@ public class PagesManager int tag_size = this.tag.size(); if (tag_size == 0) { this.count_pages = 0; } - int access_slots = 45; - this.count_pages = Math.floorDiv(tag_size, access_slots); + this.count_pages = Math.floorDiv(tag_size, this.items_slots); } } diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java index 50fc94f..08117e3 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java @@ -5,7 +5,6 @@ import net.minecraft.server.v1_6_R3.NBTTagList; import org.bukkit.inventory.ItemStack; import tokarotik.giftapi.NBT.item.ItemLoad; import tokarotik.giftapi.NBT.item.ItemNBT; -import tokarotik.giftapi.NBT.pages.page.Page; import java.util.Arrays; import java.util.Collections; @@ -78,29 +77,4 @@ public class PagesUtil return (ItemStack[]) array.toArray(); } - - public static boolean isUpdatedTag(NBTTagList tag, NBTTagList new_tag) - { - if (!new_tag.equals(tag)) { return false; } - return true; - } - - public static NBTTagList updateTag(Page page, NBTTagList tag) - { - Integer page_number = page.getNumber(); - if (page_number == null) { return tag; } - - NBTTagList new_tag = new NBTTagList(); - - for (int i = 0; i < tag.size(); i++) - { - NBTTagList pageNBT = (NBTTagList) tag.get(i); - - if (page_number == i) { pageNBT = page.getTag(); } - - new_tag.add(pageNBT); - } - - return new_tag; - } } diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java b/src/main/java/tokarotik/giftapi/cache/CacheManager.java similarity index 83% rename from src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java rename to src/main/java/tokarotik/giftapi/cache/CacheManager.java index d36de7e..921351a 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java +++ b/src/main/java/tokarotik/giftapi/cache/CacheManager.java @@ -1,7 +1,9 @@ -package tokarotik.giftapi.NBT.cache; +package tokarotik.giftapi.cache; import net.minecraft.server.v1_6_R3.EntityPlayer; import org.bukkit.entity.Player; +import tokarotik.giftapi.NBT.nbt.BasicNBT; +import tokarotik.giftapi.NBT.nbt.WorldNBTSynchronizer; import tokarotik.giftapi.NBT.pages.PagesManager; import java.util.Map; @@ -9,10 +11,12 @@ import java.util.Map; public class CacheManager { private final CacheUtil cacheUtil; + private final int inventory_slots; - public CacheManager(int max_stack) + public CacheManager(int inventory_slots) { - cacheUtil = new CacheUtil(max_stack); + this.inventory_slots = inventory_slots; + cacheUtil = new CacheUtil(inventory_slots); } public synchronized PagesManager load(Player player) { @@ -40,7 +44,7 @@ public class CacheManager } // Fallback to new empty PageManager - PagesManager defaultPages = new PagesManager(); + PagesManager defaultPages = new PagesManager(this.inventory_slots); worldMap.put(player, defaultPages); System.out.print("New empty PageManager"); diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java b/src/main/java/tokarotik/giftapi/cache/CacheUtil.java similarity index 88% rename from src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java rename to src/main/java/tokarotik/giftapi/cache/CacheUtil.java index 5df7f6a..5205a0e 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java +++ b/src/main/java/tokarotik/giftapi/cache/CacheUtil.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT.cache; +package tokarotik.giftapi.cache; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTTagCompound; @@ -6,6 +6,7 @@ import net.minecraft.server.v1_6_R3.NBTTagList; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; +import tokarotik.giftapi.NBT.nbt.BasicNBT; import tokarotik.giftapi.NBT.pages.PagesManager; import java.util.HashMap; @@ -17,11 +18,11 @@ public class CacheUtil public final Map nether_map = new HashMap<>(); public final Map end_map = new HashMap<>(); - public final int max_stack; + public final int inventory_slots; - public CacheUtil(int max_stack) + public CacheUtil(int inventory_slots) { - this.max_stack = max_stack; + this.inventory_slots = inventory_slots; } public synchronized void saveHard(Player player) @@ -72,7 +73,7 @@ public class CacheUtil NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer); NBTTagList giftList = compound.getList("giftapi"); - PagesManager pagesManager = new PagesManager(giftList); + PagesManager pagesManager = new PagesManager(giftList, this.inventory_slots); worldMap.put(player, pagesManager); return pagesManager; } diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java b/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java deleted file mode 100644 index 0a58452..0000000 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java +++ /dev/null @@ -1,10 +0,0 @@ -package tokarotik.giftapi.inventory; - -public class InventoryItems -{ - //private - public InventoryItems() - { - - } -} diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java index e705b77..b6ba094 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java @@ -7,22 +7,27 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.EventHandler; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import tokarotik.giftapi.NBT.cache.CacheManager; +import tokarotik.giftapi.cache.CacheManager; import tokarotik.giftapi.NBT.pages.PagesManager; -public class InventoryManager implements Listener { +public class InventoryManager implements Listener +{ private final String nameGUI; + private final int inventory_slots; + private final int items_slots; private final CacheManager cacheManager; private final InventoryUtil inventoryUtil; - public InventoryManager(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) + public InventoryManager(CacheManager cacheManager, int inventory_slots, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) { this.nameGUI = nameGUI; + this.inventory_slots = inventory_slots; + this.items_slots = inventory_slots - 9; this.cacheManager = cacheManager; - inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit); + inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit, this.items_slots); } @EventHandler @@ -34,25 +39,23 @@ public class InventoryManager implements Listener { public synchronized void add(Player player, ItemStack item) { PagesManager pages = this.cacheManager.load(player); - pages.add(item); } public synchronized void remove(Player player, ItemStack item) { PagesManager pages = this.cacheManager.load(player); - pages.remove(item); } public synchronized void openCustomInventory(Player player) { - int countSlots = 54; - Inventory inventory = Bukkit.createInventory(null, countSlots, this.nameGUI); + Inventory inventory = Bukkit.createInventory(null, this.inventory_slots, this.nameGUI); this.inventoryUtil.updateInventory(inventory, player); - player.openInventory(inventory); } + public int getItemsSlots() { return this.items_slots; } + } diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java index 7f40904..8221e5e 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java @@ -6,24 +6,29 @@ 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.NBT.cache.CacheManager; +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) + 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) @@ -59,11 +64,7 @@ public class InventoryUtil PagesManager pagesManager = this.cacheManager.load(player); setUI(inventory, pagesManager); - } - - public synchronized void renderItem(Inventory inventory, ItemStack item) - { - inventory.addItem(item); + this.inventoryItems.renderPage(pagesManager, inventory); } private synchronized void setUI(Inventory inventory, PagesManager pagesManager) @@ -72,13 +73,13 @@ public class InventoryUtil setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); if (pagesManager.getCountPages() == 0) { return; } - if (pagesManager.getIntCurrentPage() != pagesManager.getCountPages()) + if (pagesManager.getCurrentPage() != pagesManager.getCountPages()) { // arrow right setArrow(inventory, this.nameArrowRight, 8, 6); } - if (pagesManager.getIntCurrentPage() != 0) + if (pagesManager.getCurrentPage() != 0) { // arrow left setArrow(inventory, this.nameArrowLeft, 0, 6); @@ -109,6 +110,6 @@ public class InventoryUtil public synchronized int getCordinates(int x, int y) { if (y == 0) {y++;} - return ((y - 1) * 9 + x) % 64; + return ((y - 1) * 9 + x) % this.inventory_slots; } } diff --git a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java new file mode 100644 index 0000000..a4e8adf --- /dev/null +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java @@ -0,0 +1,20 @@ +package tokarotik.giftapi.inventory.inventoryitems; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.NBT.pages.PagesManager; + +import java.util.List; + +public class InventoryItems +{ + private final int items_slots; + + public InventoryItems(int items_slots) { this.items_slots = items_slots; } + + public void renderPage(PagesManager pagesManager, Inventory inventory) + { + List array = InventoryItemsUtil.getArrayToRender(pagesManager, items_slots); + InventoryItemsUtil.renderList(array, inventory); + } +} diff --git a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java new file mode 100644 index 0000000..8dda5ce --- /dev/null +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java @@ -0,0 +1,46 @@ +package tokarotik.giftapi.inventory.inventoryitems; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.NBT.pages.PagesManager; + +import java.util.Arrays; +import java.util.List; + +public class InventoryItemsUtil +{ + public static List getArrayToRender(PagesManager pagesManager, int items_slots) + { + ItemStack[] items = pagesManager.getList(); + + int items_count = items.length; + int current_page = pagesManager.getCurrentPage(); + + int start_item = getStartItemIndex(current_page, items_slots); + int end_item = getEndItemIndex(current_page, items_slots, items_count); + + return Arrays.asList(items).subList(start_item, end_item); + } + + public static void renderList(List array, Inventory inventory) + { + for (ItemStack item : (ItemStack[]) array.toArray()) + { + inventory.addItem(item); + } + } + + private static int getStartItemIndex(int current_page, int items_slots) + { + return current_page * items_slots; + } + + private static int getEndItemIndex(int current_page, int items_slots, int items_count) + { + int literly_end_page = current_page * (items_slots * 2); + + if (literly_end_page < items_count) { return literly_end_page; } + + return literly_end_page - (items_count - literly_end_page); + } +}