From bea5ce8088898d08505284e13a1adb9b2b22638e Mon Sep 17 00:00:00 2001 From: ScriptCat Date: Sun, 27 Jul 2025 22:11:53 +0300 Subject: [PATCH] fuck... pages doesn't needed to save these... (have some errors) --- .../java/tokarotik/giftapi/APIManager.java | 1 + src/main/java/tokarotik/giftapi/Main.java | 2 + .../giftapi/NBT/cache/CacheManager.java | 15 ++- .../giftapi/NBT/cache/CacheUtil.java | 22 ++-- .../giftapi/NBT/page/PageManager.java | 115 ------------------ .../giftapi/NBT/page/PagesSaver.java | 22 ---- .../giftapi/NBT/pages/PagesManager.java | 60 +++++++++ .../giftapi/NBT/pages/PagesUtil.java | 74 +++++++++++ .../NBT/{page => pages}/page/Page.java | 2 +- .../NBT/{page => pages}/page/PageUtil.java | 2 +- .../giftapi/inventory/InventoryManager.java | 108 +++++----------- .../giftapi/inventory/InventoryUtil.java | 95 +++++++++++++++ 12 files changed, 283 insertions(+), 235 deletions(-) delete mode 100644 src/main/java/tokarotik/giftapi/NBT/page/PageManager.java delete mode 100644 src/main/java/tokarotik/giftapi/NBT/page/PagesSaver.java create mode 100644 src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java create mode 100644 src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java rename src/main/java/tokarotik/giftapi/NBT/{page => pages}/page/Page.java (98%) rename src/main/java/tokarotik/giftapi/NBT/{page => pages}/page/PageUtil.java (97%) create mode 100644 src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java diff --git a/src/main/java/tokarotik/giftapi/APIManager.java b/src/main/java/tokarotik/giftapi/APIManager.java index 14360da..016c464 100644 --- a/src/main/java/tokarotik/giftapi/APIManager.java +++ b/src/main/java/tokarotik/giftapi/APIManager.java @@ -17,6 +17,7 @@ public class APIManager { this.plugin = plugin; this.inventoryManager = new InventoryManager( + plugin.getCacheManager(), 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 310d09d..ffa7352 100644 --- a/src/main/java/tokarotik/giftapi/Main.java +++ b/src/main/java/tokarotik/giftapi/Main.java @@ -66,4 +66,6 @@ public class Main extends JavaPlugin implements Listener apiManager.openInventory(player); }); } + + public CacheManager getCacheManager() { return this.cacheManager; } } \ No newline at end of file diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java b/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java index 2746a3c..5da0cb2 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java @@ -2,14 +2,12 @@ package tokarotik.giftapi.NBT.cache; import net.minecraft.server.v1_6_R3.EntityPlayer; import org.bukkit.entity.Player; -import tokarotik.giftapi.NBT.page.PageManager; +import tokarotik.giftapi.NBT.pages.PagesManager; -import java.util.HashMap; import java.util.Map; public class CacheManager { - private final CacheUtil cacheUtil; public CacheManager(int max_stack) @@ -17,9 +15,9 @@ public class CacheManager cacheUtil = new CacheUtil(max_stack); } - public synchronized PageManager load(Player player) { + public synchronized PagesManager load(Player player) { String playerWorld = player.getWorld().getName(); - Map worldMap = cacheUtil.getWorlMap(playerWorld); + Map worldMap = cacheUtil.getWorlMap(playerWorld); EntityPlayer entityPlayer = BasicNBT.getPlayer(player); // Return cached PageManager if already loaded @@ -39,12 +37,17 @@ public class CacheManager } // Fallback to new empty PageManager - PageManager defaultPages = new PageManager(this.cacheUtil.max_stack); + PagesManager defaultPages = new PagesManager(this.cacheUtil.max_stack); worldMap.put(player, defaultPages); return defaultPages; } + public synchronized void save(Player player, PagesManager pagesManager) + { + Map map = this.cacheUtil.getWorlMap(player.getWorld().getName()); + map.put(player, pagesManager); + } public synchronized void disable() { diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java b/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java index 2a8db23..afff860 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java @@ -6,16 +6,16 @@ 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.page.PageManager; +import tokarotik.giftapi.NBT.pages.PagesManager; import java.util.HashMap; import java.util.Map; public class CacheUtil { - public final Map world_map = new HashMap<>(); - public final Map nether_map = new HashMap<>(); - public final Map end_map = new HashMap<>(); + public final Map world_map = new HashMap<>(); + public final Map nether_map = new HashMap<>(); + public final Map end_map = new HashMap<>(); public final int max_stack; @@ -29,11 +29,11 @@ public class CacheUtil for (World world : Bukkit.getWorlds()) { String nameWorld = world.getName(); - Map map = this.getWorlMap(nameWorld); + Map map = this.getWorlMap(nameWorld); if (map == null) { continue; } - PageManager pages = map.get(player); + PagesManager pages = map.get(player); if (pages == null) { continue; } @@ -56,7 +56,7 @@ public class CacheUtil } } - public Map getWorlMap(String worldName) + public Map getWorlMap(String worldName) { switch(worldName) { @@ -68,12 +68,12 @@ public class CacheUtil return null; } - public synchronized PageManager loadAndCachePageManager(Player player, String world, EntityPlayer entityPlayer, Map worldMap) { + public synchronized PagesManager loadAndCachePageManager(Player player, String world, EntityPlayer entityPlayer, Map worldMap) { NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer); NBTTagList giftList = compound.getList("giftapi"); - PageManager pageManager = new PageManager(giftList, this.max_stack); - worldMap.put(player, pageManager); - return pageManager; + PagesManager pagesManager = new PagesManager(giftList, this.max_stack); + worldMap.put(player, pagesManager); + return pagesManager; } } diff --git a/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java b/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java deleted file mode 100644 index bee0aaa..0000000 --- a/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java +++ /dev/null @@ -1,115 +0,0 @@ -package tokarotik.giftapi.NBT.page; - -import net.minecraft.server.v1_6_R3.NBTTagList; -import org.bukkit.inventory.ItemStack; -import tokarotik.giftapi.NBT.page.page.Page; - -public class PageManager -{ - - private NBTTagList tag; - private final int max_stack; - - public PageManager(NBTTagList tag, int max_stack) - { - this.tag = tag; - this.max_stack = max_stack; - } - - public PageManager(int max_stack) - { - - this.max_stack = max_stack; - this.tag = new NBTTagList("giftapi"); - } - - public NBTTagList getTag() - { - return this.tag; - } - - public void setTag(NBTTagList tag) - { - this.tag = tag; - } - - public boolean add(ItemStack item) - { - Page page = getPageWithEmptySlots(); - - boolean is_added = page.add(item); - boolean is_updated = updateTag(page); - - return is_added && is_updated; - } - - public boolean remove(ItemStack item) - { - Page page = getPageWithEmptySlots(); - - boolean is_removed = page.remove(item); - boolean is_updated = updateTag(page); - - return is_removed && is_updated; - } - - public Page getPage(int number) - { - if (number > 0 && number < this.tag.size()) - { - NBTTagList tag = (NBTTagList) this.tag.get(number); - - return new Page(tag, this.max_stack, number); - } - - return null; - } - - - public Page getPageWithEmptySlots() - { - for (int i = 0; i < tag.size(); i++) - { - - Page page = new Page( (NBTTagList) tag.get(i), this.max_stack, i); - - if (!page.isOverStacked()) - { - return page; - } - } - - Page page = new Page(this.max_stack); - page.setNumber(tag.size()); - - return page; - } - - public boolean updateTag(Page page) - { - Integer page_number = page.getNumber(); - - if (page_number == null) { return false; } - - 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); - } - - this.tag = new_tag; - - return true; - } - - - -} diff --git a/src/main/java/tokarotik/giftapi/NBT/page/PagesSaver.java b/src/main/java/tokarotik/giftapi/NBT/page/PagesSaver.java deleted file mode 100644 index 0088aee..0000000 --- a/src/main/java/tokarotik/giftapi/NBT/page/PagesSaver.java +++ /dev/null @@ -1,22 +0,0 @@ -package tokarotik.giftapi.NBT.page; - -import org.bukkit.entity.Player; - -public class PagesSaver -{ - final PageManager pageManager; - final Player player; - //final BasicNBT basicNBT; - - public PagesSaver(Player player, int max_stack) - { - this.pageManager = new PageManager(max_stack); - this.player = player; - //this.basicNBT = new BasicNBT(); - } - - public void loadNBT() - { - - } -} diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java new file mode 100644 index 0000000..8a76ccf --- /dev/null +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java @@ -0,0 +1,60 @@ +package tokarotik.giftapi.NBT.pages; + +import net.minecraft.server.v1_6_R3.NBTTagList; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.NBT.pages.page.Page; + +public class PagesManager +{ + + private final int max_stack; + + private NBTTagList tag; + + private int current_page = 0; + + public PagesManager(NBTTagList tag, int max_stack) + { + this.tag = tag; + this.max_stack = max_stack; + } + + public PagesManager(int max_stack) + { + this.max_stack = max_stack; + this.tag = new NBTTagList("giftapi"); + } + + public boolean add(ItemStack item) + { + return PagesUtil.add(item, this.tag, this.max_stack); + } + + public boolean remove(ItemStack item) + { + return PagesUtil.remove(item, this.tag, this.max_stack); + } + + public NBTTagList getTag() { return this.tag; } + + public void setTag(NBTTagList tag) + { + this.tag = tag; + } + + public int getIntCurrentPage() { return this.current_page; } + + public void setIntCurrentPage(int current_page) { this.current_page = current_page; } + + public Page getPage(int number) + { + if (number > 0 && number < this.tag.size()) + { + NBTTagList tag = (NBTTagList) this.tag.get(number); + + return new Page(tag, this.max_stack, number); + } + + return null; + } +} diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java new file mode 100644 index 0000000..ca4f758 --- /dev/null +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java @@ -0,0 +1,74 @@ +package tokarotik.giftapi.NBT.pages; + +import net.minecraft.server.v1_6_R3.NBTTagList; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.NBT.pages.page.Page; + +public class PagesUtil +{ + public static boolean add(ItemStack item, NBTTagList tag, int max_stack) + { + Page page = getPageWithEmptySlots(tag, max_stack); + + boolean is_added = page.add(item); + if (!is_added) { return false; } // if adding is failed, when false. why need to update when function finished without result? + + NBTTagList new_tag = updateTag(page, tag); + return isUpdatedTag( tag, new_tag ); + } + + public static boolean remove(ItemStack item, NBTTagList tag, int max_stack) + { + Page page = getPageWithEmptySlots(tag, max_stack); + + boolean is_added = page.remove(item); + if (!is_added) { return false; } // if removing is failed, when false. + + NBTTagList new_tag = updateTag(page, tag); + return isUpdatedTag( tag, new_tag ); + } + + public static Page getPageWithEmptySlots(NBTTagList tag, int max_stack) + { + for (int i = 0; i < tag.size(); i++) + { + + Page page = new Page( (NBTTagList) tag.get(i), max_stack, i); + + if (!page.isOverStacked()) + { + return page; + } + } + + Page page = new Page(max_stack); + page.setNumber(tag.size()); + + return page; + } + + 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/page/page/Page.java b/src/main/java/tokarotik/giftapi/NBT/pages/page/Page.java similarity index 98% rename from src/main/java/tokarotik/giftapi/NBT/page/page/Page.java rename to src/main/java/tokarotik/giftapi/NBT/pages/page/Page.java index f7f4876..a7897ec 100644 --- a/src/main/java/tokarotik/giftapi/NBT/page/page/Page.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/page/Page.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT.page.page; +package tokarotik.giftapi.NBT.pages.page; import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagList; diff --git a/src/main/java/tokarotik/giftapi/NBT/page/page/PageUtil.java b/src/main/java/tokarotik/giftapi/NBT/pages/page/PageUtil.java similarity index 97% rename from src/main/java/tokarotik/giftapi/NBT/page/page/PageUtil.java rename to src/main/java/tokarotik/giftapi/NBT/pages/page/PageUtil.java index 48bc141..8f092a6 100644 --- a/src/main/java/tokarotik/giftapi/NBT/page/page/PageUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/page/PageUtil.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT.page.page; +package tokarotik.giftapi.NBT.pages.page; import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagList; diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java index 1edfb2f..6621cd4 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java @@ -9,99 +9,49 @@ import org.bukkit.event.EventHandler; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import tokarotik.giftapi.NBT.cache.CacheManager; public class InventoryManager implements Listener { - public final int countSlots = 54; - + private final int countSlots = 54; private final String nameGUI; - private final String nameArrowRight; - private final String nameArrowLeft; - private final String nameExit; + private final CacheManager cacheManager; + private final InventoryUtil inventoryUtil; - public InventoryManager(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) + + public InventoryManager(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) { this.nameGUI = nameGUI; - this.nameArrowRight = nameArrowRight; - this.nameArrowLeft = nameArrowLeft; - this.nameExit = nameExit; + this.cacheManager = cacheManager; + inventoryUtil = new InventoryUtil(nameGUI, nameArrowRight, nameArrowLeft, nameExit); } + + + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) + { + this.inventoryUtil.onInventoryClick(event); + } + + public synchronized boolean add(Player player, ItemStack item) + { + return false; + } + + public synchronized boolean remove(Player player, ItemStack item) + { + return false; + } + public synchronized void openCustomInventory(Player player) { - Inventory inventory = Bukkit.createInventory(null, countSlots, this.nameGUI); + Inventory inventory = Bukkit.createInventory(null, this.countSlots, this.nameGUI); - updateInventory(inventory); + this.inventoryUtil.updateInventory(inventory); player.openInventory(inventory); } - @EventHandler - public void onInventoryClick(InventoryClickEvent event) { - Inventory inventory = event.getInventory(); - if (inventory.getTitle().equals(this.nameGUI)) { - event.setCancelled(true); - - ItemStack currentItem = event.getCurrentItem(); - String nameCurrentItem = currentItem.getItemMeta().getDisplayName(); - Player player = (Player) event.getWhoClicked(); - - if (nameCurrentItem.equals(this.nameArrowRight)) - { - player.sendMessage("Right!"); - } - - if (nameCurrentItem.equals(this.nameArrowLeft)) - { - player.sendMessage("Left!"); - } - - if (nameCurrentItem.equals(this.nameExit)) - { - player.closeInventory(); - } - } - } - - private void updateInventory(Inventory inventory) - { - setUI(inventory); - } - - private void setUI(Inventory inventory) - { - // arrow right - setArrow(inventory, this.nameArrowRight, 8, 6); - // arrow left - setArrow(inventory, this.nameArrowLeft, 0, 6); - // exit - setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); - - - } - - private 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 void setArrow(Inventory inventory, String name, int x, int y) - { - setItem(inventory, Material.ARROW, name, x, y); - } - - public int getCordinates(int x, int y) - { - if (y == 0) {y++;} - return ((y - 1) * 9 + x) % 64; - } } diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java new file mode 100644 index 0000000..b17564c --- /dev/null +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java @@ -0,0 +1,95 @@ +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; + +public class InventoryUtil +{ + + private final String nameGUI; + private final String nameArrowRight; + private final String nameArrowLeft; + private final String nameExit; + + public InventoryUtil(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) + { + this.nameGUI = nameGUI; + this.nameArrowRight = nameArrowRight; + this.nameArrowLeft = nameArrowLeft; + this.nameExit = nameExit; + } + + public void onInventoryClick(InventoryClickEvent event) + { + Inventory inventory = event.getInventory(); + + if (inventory.getTitle().equals(this.nameGUI)) { + event.setCancelled(true); + + ItemStack currentItem = event.getCurrentItem(); + String nameCurrentItem = currentItem.getItemMeta().getDisplayName(); + Player player = (Player) event.getWhoClicked(); + + if (nameCurrentItem.equals(this.nameArrowRight)) + { + player.sendMessage("Right!"); + } + + if (nameCurrentItem.equals(this.nameArrowLeft)) + { + player.sendMessage("Left!"); + } + + if (nameCurrentItem.equals(this.nameExit)) + { + player.closeInventory(); + } + } + } + + public void updateInventory(Inventory inventory) + { + setUI(inventory); + } + + private void setUI(Inventory inventory) + { + // arrow right + setArrow(inventory, this.nameArrowRight, 8, 6); + // arrow left + setArrow(inventory, this.nameArrowLeft, 0, 6); + // exit + setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); + + + } + + private 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 void setArrow(Inventory inventory, String name, int x, int y) + { + setItem(inventory, Material.ARROW, name, x, y); + } + + public int getCordinates(int x, int y) + { + if (y == 0) {y++;} + return ((y - 1) * 9 + x) % 64; + } +}