From 02d73bb7c526f3a98f8b43f575948d23d372fbec Mon Sep 17 00:00:00 2001 From: ScriptCat Date: Mon, 28 Jul 2025 18:27:58 +0300 Subject: [PATCH] coming to render items in menu --- .../java/tokarotik/giftapi/APIManager.java | 28 ++++-------- src/main/java/tokarotik/giftapi/Main.java | 20 +++++---- .../giftapi/NBT/cache/CacheUtil.java | 2 - .../giftapi/NBT/pages/PagesManager.java | 18 +++++++- .../giftapi/NBT/pages/PagesUtil.java | 16 +++++-- .../tokarotik/giftapi/dev/AddCommand.java | 44 +++++++++++++++++++ .../tokarotik/giftapi/dev/GiftCommand.java | 19 ++++---- .../giftapi/inventory/InventoryItems.java | 10 +++++ .../giftapi/inventory/InventoryManager.java | 27 ++++++------ .../giftapi/inventory/InventoryUtil.java | 43 +++++++++++++----- src/main/resources/plugin.yml | 3 ++ 11 files changed, 163 insertions(+), 67 deletions(-) create mode 100644 src/main/java/tokarotik/giftapi/dev/AddCommand.java create mode 100644 src/main/java/tokarotik/giftapi/inventory/InventoryItems.java diff --git a/src/main/java/tokarotik/giftapi/APIManager.java b/src/main/java/tokarotik/giftapi/APIManager.java index 7ac1889..c1b89f5 100644 --- a/src/main/java/tokarotik/giftapi/APIManager.java +++ b/src/main/java/tokarotik/giftapi/APIManager.java @@ -3,13 +3,14 @@ package tokarotik.giftapi; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; -import tokarotik.giftapi.NBT.cache.CacheManager; -import tokarotik.giftapi.NBT.pages.PagesManager; import tokarotik.giftapi.inventory.InventoryManager; -public class APIManager { +public class APIManager implements Listener { public final Main plugin; private final InventoryManager inventoryManager; @@ -17,7 +18,6 @@ public class APIManager { public APIManager(Main plugin, FileConfiguration config) { this.plugin = plugin; - this.inventoryManager = new InventoryManager( plugin.getCacheManager(), ConfigPaths.getWithColor(config, ConfigPaths.GUINAME, "GiftAPI Menu"), @@ -29,25 +29,15 @@ public class APIManager { Bukkit.getPluginManager().registerEvents(this.inventoryManager, this.plugin); } - public synchronized boolean add(Player player, ItemStack item) - { - CacheManager cache = plugin.getCacheManager(); - PagesManager pages = cache.load(player); + public synchronized void add(Player player, ItemStack item) { this.inventoryManager.add(player, item); } - pages.add(item); - - cache.save(player, pages); - - return false; - } - - public synchronized boolean remove(Player player, ItemStack item) - { - return false; - } + public synchronized void remove(Player player, ItemStack item) { this.inventoryManager.remove(player, item); } public synchronized void openInventory(Player player) { this.inventoryManager.openCustomInventory(player); } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { this.inventoryManager.onInventoryClick(event); } } diff --git a/src/main/java/tokarotik/giftapi/Main.java b/src/main/java/tokarotik/giftapi/Main.java index f136301..995d2de 100644 --- a/src/main/java/tokarotik/giftapi/Main.java +++ b/src/main/java/tokarotik/giftapi/Main.java @@ -9,10 +9,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import tokarotik.giftapi.NBT.cache.CacheManager; +import tokarotik.giftapi.dev.AddCommand; import tokarotik.giftapi.dev.GiftCommand; -import java.util.concurrent.CompletableFuture; - public class Main extends JavaPlugin implements Listener { private CacheManager cacheManager; @@ -27,6 +26,7 @@ public class Main extends JavaPlugin implements Listener apiManager = new APIManager(this, getConfig()); this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE + this.getCommand("add").setExecutor(new AddCommand(apiManager, this)); // DELETE FOR RELEASE getServer().getPluginManager().registerEvents(this, this); // bullshit @@ -38,7 +38,6 @@ public class Main extends JavaPlugin implements Listener { getLogger().info("Saving GiftApi..."); cacheManager.disable(); - //Bukkit.getScheduler().runTaskAsynchronously(this, () -> cacheManager.disable()); getLogger().info("GiftAPI disabled!"); } @@ -51,17 +50,22 @@ public class Main extends JavaPlugin implements Listener // if failed to add, return false // if successfully added, return true - public CompletableFuture addAsync(Player player, ItemStack item) { - return CompletableFuture.supplyAsync(() -> apiManager.add(player, item)); + public void add(Player player, ItemStack item) { + Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + apiManager.add(player, item); + }); } // if failed to remove item, return false // if successfully removed item, return true - public CompletableFuture removeAsync(Player player, ItemStack item) { - return CompletableFuture.supplyAsync(() -> apiManager.remove(player, item)); + public void remove(Player player, ItemStack item) + { + Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + apiManager.remove(player, item); + }); } // will open inventory GiftAPI - public void openGUIAsync(Player player) + public void openGUI(Player player) { Bukkit.getScheduler().runTaskAsynchronously(this, () -> { apiManager.openInventory(player); diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java b/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java index c693daf..5df7f6a 100644 --- a/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/cache/CacheUtil.java @@ -31,8 +31,6 @@ public class CacheUtil String nameWorld = world.getName(); Map map = this.getWorlMap(nameWorld); - System.out.println("Map " + map.toString() + ". World: " + nameWorld); - if (map == null) { continue; } PagesManager pages = map.get(player); diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java index f7fb4b6..b286d00 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java @@ -6,12 +6,13 @@ import org.bukkit.inventory.ItemStack; public class PagesManager { private NBTTagList tag; - private int current_page = 0; + private int count_pages = 0; public PagesManager(NBTTagList tag) { this.tag = tag; + setCountPages(); } public PagesManager() @@ -22,11 +23,13 @@ public class PagesManager public void add(ItemStack item) { PagesUtil.add(item, this.tag); + setCountPages(); } public void remove(ItemStack item) { - PagesUtil.remove(item, this.tag); + this.tag = PagesUtil.remove(item, this.tag); + setCountPages(); } public NBTTagList getTag() { return this.tag; } @@ -34,10 +37,21 @@ public class PagesManager public void setTag(NBTTagList tag) { this.tag = tag; + setCountPages(); } public int getIntCurrentPage() { return this.current_page; } public void setIntCurrentPage(int current_page) { this.current_page = current_page; } + public int getCountPages() { return this.count_pages; } + + private void setCountPages() { + 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); + } + } diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java index 7616f22..50fc94f 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java @@ -7,6 +7,10 @@ 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; +import java.util.List; + public class PagesUtil { public static void add(ItemStack item, NBTTagList tag) @@ -19,9 +23,7 @@ public class PagesUtil public static NBTTagList remove(ItemStack item, NBTTagList tag) { ItemStack[] new_list = addAllExtraOne(tag, item); - NBTTagList list = itemStackListToNBTList(new_list); - - return list; + return itemStackListToNBTList(new_list); } public static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item) @@ -69,6 +71,14 @@ public class PagesUtil return list; } + public static ItemStack[] reverse(ItemStack[] list) + { + List array = Arrays.asList(list); + Collections.reverse(array); + + return (ItemStack[]) array.toArray(); + } + public static boolean isUpdatedTag(NBTTagList tag, NBTTagList new_tag) { if (!new_tag.equals(tag)) { return false; } diff --git a/src/main/java/tokarotik/giftapi/dev/AddCommand.java b/src/main/java/tokarotik/giftapi/dev/AddCommand.java new file mode 100644 index 0000000..7a3ef27 --- /dev/null +++ b/src/main/java/tokarotik/giftapi/dev/AddCommand.java @@ -0,0 +1,44 @@ +package tokarotik.giftapi.dev; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.APIManager; +import tokarotik.giftapi.Main; + +import java.util.Random; + + +public class AddCommand implements CommandExecutor { + private final APIManager apiManager; + private final Main plugin; + + public AddCommand(APIManager APIManager, Main plugin) { + + this.apiManager = APIManager; + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + Player player; + if (!(sender instanceof Player)) { + sender.sendMessage("This command can use only player!"); + player = Bukkit.getOnlinePlayers()[0]; + + return true; + } else { + player = (Player) sender; + } + + Random rand = new Random(); + ItemStack item = new ItemStack(rand.nextInt(420) + 1); + + this.plugin.add(player, item); + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java index bf38f84..40a914d 100644 --- a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java +++ b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java @@ -1,13 +1,11 @@ package tokarotik.giftapi.dev; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import tokarotik.giftapi.APIManager; import tokarotik.giftapi.Main; @@ -25,20 +23,25 @@ public class GiftCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + Player player; + if (!(sender instanceof Player)) { sender.sendMessage("This command can use only player!"); + player = Bukkit.getOnlinePlayers()[0]; + return true; } - ItemStack item = new ItemStack(Material.BRICK, 1); + else + { + player = (Player) sender; + } - Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { - plugin.getCacheManager().load((Player) sender); - apiManager.add((Player) sender, item); + System.out.println( plugin.getCacheManager().load(player).getTag() ); + + this.plugin.openGUI(player); - apiManager.openInventory((Player) sender); - }); return true; } diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java b/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java new file mode 100644 index 0000000..0a58452 --- /dev/null +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryItems.java @@ -0,0 +1,10 @@ +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 6621cd4..e705b77 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java @@ -1,20 +1,18 @@ package tokarotik.giftapi.inventory; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; 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; +import tokarotik.giftapi.NBT.pages.PagesManager; public class InventoryManager implements Listener { - private final int countSlots = 54; private final String nameGUI; private final CacheManager cacheManager; private final InventoryUtil inventoryUtil; @@ -24,32 +22,35 @@ public class InventoryManager implements Listener { { this.nameGUI = nameGUI; this.cacheManager = cacheManager; - inventoryUtil = new InventoryUtil(nameGUI, nameArrowRight, nameArrowLeft, nameExit); + inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit); } - - @EventHandler - public void onInventoryClick(InventoryClickEvent event) + public synchronized void onInventoryClick(InventoryClickEvent event) { this.inventoryUtil.onInventoryClick(event); } - public synchronized boolean add(Player player, ItemStack item) + public synchronized void add(Player player, ItemStack item) { - return false; + PagesManager pages = this.cacheManager.load(player); + + pages.add(item); } - public synchronized boolean remove(Player player, ItemStack item) + public synchronized void remove(Player player, ItemStack item) { - return false; + PagesManager pages = this.cacheManager.load(player); + + pages.remove(item); } public synchronized void openCustomInventory(Player player) { - Inventory inventory = Bukkit.createInventory(null, this.countSlots, this.nameGUI); + int countSlots = 54; + Inventory inventory = Bukkit.createInventory(null, countSlots, this.nameGUI); - this.inventoryUtil.updateInventory(inventory); + this.inventoryUtil.updateInventory(inventory, player); player.openInventory(inventory); } diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java index b17564c..7f40904 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java @@ -6,17 +6,20 @@ 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.NBT.pages.PagesManager; public class InventoryUtil { - + private final CacheManager cacheManager; 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) + public InventoryUtil(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) { + this.cacheManager = cacheManager; this.nameGUI = nameGUI; this.nameArrowRight = nameArrowRight; this.nameArrowLeft = nameArrowLeft; @@ -51,24 +54,40 @@ public class InventoryUtil } } - public void updateInventory(Inventory inventory) + public synchronized void updateInventory(Inventory inventory, Player player) { - setUI(inventory); + PagesManager pagesManager = this.cacheManager.load(player); + + setUI(inventory, pagesManager); } - private void setUI(Inventory inventory) + public synchronized void renderItem(Inventory inventory, ItemStack item) + { + inventory.addItem(item); + } + + private synchronized void setUI(Inventory inventory, PagesManager pagesManager) { - // 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); + if (pagesManager.getCountPages() == 0) { return; } + + if (pagesManager.getIntCurrentPage() != pagesManager.getCountPages()) + { + // arrow right + setArrow(inventory, this.nameArrowRight, 8, 6); + } + + if (pagesManager.getIntCurrentPage() != 0) + { + // arrow left + setArrow(inventory, this.nameArrowLeft, 0, 6); + } } - private void setItem(Inventory inventory, Material material, String name, int x, int y) + 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(); @@ -82,12 +101,12 @@ public class InventoryUtil ); } - private void setArrow(Inventory inventory, String name, int x, int y) + private synchronized void setArrow(Inventory inventory, String name, int x, int y) { setItem(inventory, Material.ARROW, name, x, y); } - public int getCordinates(int x, int y) + public synchronized int getCordinates(int x, int y) { if (y == 0) {y++;} return ((y - 1) * 9 + x) % 64; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1f0385d..daba45a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,5 +4,8 @@ main: tokarotik.giftapi.Main commands: gift: + description: for test + usage: / + add: description: for test usage: / \ No newline at end of file