diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java index 696d551..6dafafa 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java @@ -22,35 +22,29 @@ public class PagesManager this.tag = new NBTTagList("giftapi"); } - public void add(ItemStack item) + public synchronized void add(ItemStack item) { PagesUtil.add(item, this.tag); setCountPages(); } - public void remove(ItemStack item) + public synchronized void remove(ItemStack item) { this.tag = PagesUtil.remove(item, this.tag); setCountPages(); } - public NBTTagList getTag() { return this.tag; } + public synchronized NBTTagList getTag() { return this.tag; } - public void setTag(NBTTagList tag) - { - this.tag = tag; - setCountPages(); - } + public synchronized ItemStack[] getList() { return PagesUtil.getRawList(this.tag); } - public ItemStack[] getList() { return PagesUtil.reverse( PagesUtil.getRawList(this.tag) ); } + public synchronized int getCurrentPage() { return this.current_page; } - public int getCurrentPage() { return this.current_page; } + public synchronized void setCurrentPage(int current_page) { this.current_page = current_page; } - public void setCurrentPage(int current_page) { this.current_page = current_page; } + public synchronized int getCountPages() { return this.count_pages; } - public int getCountPages() { return this.count_pages; } - - private void setCountPages() { + private synchronized void setCountPages() { int tag_size = this.tag.size(); if (tag_size == 0) { this.count_pages = 0; } diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java index 08117e3..4710e66 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java @@ -6,26 +6,22 @@ import org.bukkit.inventory.ItemStack; import tokarotik.giftapi.NBT.item.ItemLoad; import tokarotik.giftapi.NBT.item.ItemNBT; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - public class PagesUtil { - public static void add(ItemStack item, NBTTagList tag) + public synchronized static void add(ItemStack item, NBTTagList tag) { NBTTagCompound nbt = ItemNBT.getTag(item); tag.add(nbt); } - public static NBTTagList remove(ItemStack item, NBTTagList tag) + public synchronized static NBTTagList remove(ItemStack item, NBTTagList tag) { ItemStack[] new_list = addAllExtraOne(tag, item); return itemStackListToNBTList(new_list); } - public static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item) + public synchronized static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item) { ItemStack[] new_list = new ItemStack[tag.size()]; ItemStack[] old_list = getRawList(tag); @@ -41,7 +37,7 @@ public class PagesUtil return new_list; } - public static NBTTagList itemStackListToNBTList(ItemStack[] items) + public synchronized static NBTTagList itemStackListToNBTList(ItemStack[] items) { NBTTagList list = new NBTTagList(); @@ -56,7 +52,7 @@ public class PagesUtil return list; } - public static ItemStack[] getRawList(NBTTagList tag) + public synchronized static ItemStack[] getRawList(NBTTagList tag) { ItemStack[] list = new ItemStack[tag.size()]; @@ -69,12 +65,4 @@ public class PagesUtil return list; } - - public static ItemStack[] reverse(ItemStack[] list) - { - List array = Arrays.asList(list); - Collections.reverse(array); - - return (ItemStack[]) array.toArray(); - } } diff --git a/src/main/java/tokarotik/giftapi/dev/AddCommand.java b/src/main/java/tokarotik/giftapi/dev/AddCommand.java index 7a3ef27..9046dc4 100644 --- a/src/main/java/tokarotik/giftapi/dev/AddCommand.java +++ b/src/main/java/tokarotik/giftapi/dev/AddCommand.java @@ -1,41 +1,38 @@ 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; -import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; public class AddCommand implements CommandExecutor { - private final APIManager apiManager; private final Main plugin; - public AddCommand(APIManager APIManager, Main plugin) { - - this.apiManager = APIManager; + public AddCommand(Main plugin) + { 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); + } + Player player = (Player) sender; + + Material[] values = Material.values(); + int id = values[ThreadLocalRandom.current().nextInt(values.length)].getId(); + ItemStack item = new ItemStack(id); this.plugin.add(player, item); diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java index 8221e5e..45ee8fb 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java @@ -39,22 +39,30 @@ public class InventoryUtil event.setCancelled(true); ItemStack currentItem = event.getCurrentItem(); - String nameCurrentItem = currentItem.getItemMeta().getDisplayName(); + + 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.equals(this.nameArrowRight)) + if (!nameCurrentItem.isEmpty()) { - player.sendMessage("Right!"); - } + if (nameCurrentItem.equals(this.nameArrowRight)) { + player.sendMessage("Right!"); + } - if (nameCurrentItem.equals(this.nameArrowLeft)) - { - player.sendMessage("Left!"); - } + if (nameCurrentItem.equals(this.nameArrowLeft)) { + player.sendMessage("Left!"); + } - if (nameCurrentItem.equals(this.nameExit)) - { - player.closeInventory(); + if (nameCurrentItem.equals(this.nameExit)) { + player.closeInventory(); + } } } } @@ -69,20 +77,22 @@ public class InventoryUtil private synchronized void setUI(Inventory inventory, PagesManager pagesManager) { + int height = (this.inventory_slots / 9) + 1; + // exit - setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); + 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, 6); + setArrow(inventory, this.nameArrowRight, 8, height); } if (pagesManager.getCurrentPage() != 0) { // arrow left - setArrow(inventory, this.nameArrowLeft, 0, 6); + setArrow(inventory, this.nameArrowLeft, 0, height); } @@ -110,6 +120,6 @@ public class InventoryUtil public synchronized int getCordinates(int x, int y) { if (y == 0) {y++;} - return ((y - 1) * 9 + x) % this.inventory_slots; + return ((y - 1) * 9 + x) % (this.inventory_slots + 9); } } diff --git a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java index a4e8adf..a35be38 100644 --- a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java @@ -12,7 +12,7 @@ public class InventoryItems public InventoryItems(int items_slots) { this.items_slots = items_slots; } - public void renderPage(PagesManager pagesManager, Inventory inventory) + public synchronized 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 index 8dda5ce..95b59c3 100644 --- a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java @@ -9,7 +9,7 @@ import java.util.List; public class InventoryItemsUtil { - public static List getArrayToRender(PagesManager pagesManager, int items_slots) + public synchronized static List getArrayToRender(PagesManager pagesManager, int items_slots) { ItemStack[] items = pagesManager.getList(); @@ -19,28 +19,31 @@ public class InventoryItemsUtil int start_item = getStartItemIndex(current_page, items_slots); int end_item = getEndItemIndex(current_page, items_slots, items_count); + System.out.print("\nStart " + start_item + " End " + end_item); + return Arrays.asList(items).subList(start_item, end_item); } - public static void renderList(List array, Inventory inventory) + public synchronized static void renderList(List array, Inventory inventory) { - for (ItemStack item : (ItemStack[]) array.toArray()) - { + for (ItemStack item : array) { + System.out.println("\nitem " + item.toString()); inventory.addItem(item); } } - private static int getStartItemIndex(int current_page, int items_slots) + private synchronized 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) + private synchronized static int getEndItemIndex(int current_page, int items_slots, int items_count) { - int literly_end_page = current_page * (items_slots * 2); + int literly_end_page = (current_page + 1) * items_slots; + System.out.println("Cur page " + current_page + " Items Slots " + items_slots + " Items Count " + items_count + " Lit End Page " + literly_end_page); if (literly_end_page < items_count) { return literly_end_page; } - return literly_end_page - (items_count - literly_end_page); + return literly_end_page - (literly_end_page - items_count); } }