diff --git a/src/main/java/tokarotik/giftapi/Main.java b/src/main/java/tokarotik/giftapi/Main.java index 6b012ef..3a45ad6 100644 --- a/src/main/java/tokarotik/giftapi/Main.java +++ b/src/main/java/tokarotik/giftapi/Main.java @@ -23,10 +23,10 @@ public class Main extends JavaPlugin implements Listener { saveDefaultConfig(); - cacheManager = new CacheManager(inventory_slots); + cacheManager = new CacheManager(inventory_slots - 9); apiManager = new APIManager(this, getConfig(), inventory_slots); - this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE + this.getCommand("gift").setExecutor(new GiftCommand(this)); // DELETE FOR RELEASE this.getCommand("add").setExecutor(new AddCommand(this)); // DELETE FOR RELEASE getServer().getPluginManager().registerEvents(this, this); // bullshit @@ -52,25 +52,19 @@ public class Main extends JavaPlugin implements Listener // if failed to add, return false // if successfully added, return true public void add(Player player, ItemStack item) { - Bukkit.getScheduler().runTaskAsynchronously(this, () -> { - apiManager.add(player, item); - }); + Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.add(player, item)); } // if failed to remove item, return false // if successfully removed item, return true public void remove(Player player, ItemStack item) { - Bukkit.getScheduler().runTaskAsynchronously(this, () -> { - apiManager.remove(player, item); - }); + Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.remove(player, item)); } // will open inventory GiftAPI public void openGUI(Player player) { - Bukkit.getScheduler().runTaskAsynchronously(this, () -> { - apiManager.openInventory(player); - }); + Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.openInventory(player)); } public CacheManager getCacheManager() { return this.cacheManager; } diff --git a/src/main/java/tokarotik/giftapi/NBT/item/ItemLoad.java b/src/main/java/tokarotik/giftapi/NBT/item/ItemLoad.java index 3474dff..4fe314a 100644 --- a/src/main/java/tokarotik/giftapi/NBT/item/ItemLoad.java +++ b/src/main/java/tokarotik/giftapi/NBT/item/ItemLoad.java @@ -2,8 +2,9 @@ package tokarotik.giftapi.NBT.item; import net.minecraft.server.v1_6_R3.NBTTagList; import net.minecraft.server.v1_6_R3.NBTTagString; -import org.bukkit.inventory.ItemStack; import net.minecraft.server.v1_6_R3.NBTTagCompound; + +import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.Arrays; @@ -11,8 +12,6 @@ import java.util.List; public class ItemLoad { - - public static ItemStack getItem(NBTTagCompound tag) { diff --git a/src/main/java/tokarotik/giftapi/NBT/item/ItemNBT.java b/src/main/java/tokarotik/giftapi/NBT/item/ItemNBT.java index 23c7009..33404bc 100644 --- a/src/main/java/tokarotik/giftapi/NBT/item/ItemNBT.java +++ b/src/main/java/tokarotik/giftapi/NBT/item/ItemNBT.java @@ -3,6 +3,7 @@ package tokarotik.giftapi.NBT.item; import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagList; import net.minecraft.server.v1_6_R3.NBTTagString; + import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; diff --git a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java index 43855c7..aa8c976 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java @@ -1,19 +1,18 @@ package tokarotik.giftapi.NBT.pages; import net.minecraft.server.v1_6_R3.NBTTagList; + import org.bukkit.inventory.ItemStack; public class PagesManager { private NBTTagList tag; private int current_page = 0; - private int count_pages = 0; private final int items_slots; public PagesManager(NBTTagList tag, int items_slots) { this.items_slots = items_slots; this.tag = tag; - setCountPages(); } public PagesManager(int items_slots) @@ -25,13 +24,11 @@ public class PagesManager public synchronized void add(ItemStack item) { PagesUtil.add(item, this.tag); - setCountPages(); } public synchronized void remove(ItemStack item) { this.tag = PagesUtil.remove(item, this.tag); - setCountPages(); } public synchronized NBTTagList getTag() { return this.tag; } @@ -39,8 +36,8 @@ public class PagesManager public synchronized ItemStack[] getList() { return PagesUtil.getRawList(this.tag); } public synchronized int getCurrentPage() { return this.current_page; } - - public synchronized int getCountPages() { return this.count_pages; } + public synchronized void setCurrentPage(int current_page) { this.current_page = current_page; } + public int getCountPages() { return this.tag.size() / (this.items_slots + 1); } public synchronized void nextPage() { if (getCountPages() > getCurrentPage()) @@ -56,12 +53,4 @@ public class PagesManager this.current_page -= 1; } } - - private synchronized void setCountPages() { - int tag_size = this.tag.size(); - if (tag_size == 0) { this.count_pages = 0; } - - 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 4710e66..80b6ccc 100644 --- a/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java +++ b/src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java @@ -2,7 +2,9 @@ package tokarotik.giftapi.NBT.pages; import net.minecraft.server.v1_6_R3.NBTTagCompound; 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; diff --git a/src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java b/src/main/java/tokarotik/giftapi/NBT/savers/BasicNBT.java similarity index 82% rename from src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java rename to src/main/java/tokarotik/giftapi/NBT/savers/BasicNBT.java index f229d62..3e62805 100644 --- a/src/main/java/tokarotik/giftapi/NBT/nbt/BasicNBT.java +++ b/src/main/java/tokarotik/giftapi/NBT/savers/BasicNBT.java @@ -1,8 +1,9 @@ -package tokarotik.giftapi.NBT.nbt; +package tokarotik.giftapi.NBT.savers; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools; import net.minecraft.server.v1_6_R3.NBTTagCompound; + import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -50,11 +51,21 @@ public class BasicNBT { return compound; } - catch(Exception e) + catch(Exception ignored) { - Bukkit.getLogger().warning(e.toString()); + try + { + NBTTagCompound compound = new NBTTagCompound(); + entityPlayer.e(compound); - return null; + return compound; + } + + catch (Exception e) + { + Bukkit.getLogger().warning(e.toString()); + return null; + } } } diff --git a/src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java b/src/main/java/tokarotik/giftapi/NBT/savers/WorldNBTSynchronizer.java similarity index 91% rename from src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java rename to src/main/java/tokarotik/giftapi/NBT/savers/WorldNBTSynchronizer.java index 10b9827..4e5f11a 100644 --- a/src/main/java/tokarotik/giftapi/NBT/nbt/WorldNBTSynchronizer.java +++ b/src/main/java/tokarotik/giftapi/NBT/savers/WorldNBTSynchronizer.java @@ -1,7 +1,8 @@ -package tokarotik.giftapi.NBT.nbt; +package tokarotik.giftapi.NBT.savers; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTTagCompound; + import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; @@ -9,11 +10,6 @@ import org.jetbrains.annotations.Nullable; public class WorldNBTSynchronizer { - public static boolean isPlayerEmpty(EntityPlayer entityPlayer) - { - return getWorldWhatHasPlayer(entityPlayer) == null; - } - @Nullable public static String getWorldWhatHasPlayer(EntityPlayer entityPlayer) { @@ -56,6 +52,8 @@ public class WorldNBTSynchronizer NBTTagCompound tag = basicNBT.readPlayerNBT(entityPlayer); + if (tag == null) { return false; } + if (tag.hasKey("giftapi")) // if exists giftapi tag in player { try diff --git a/src/main/java/tokarotik/giftapi/cache/CacheManager.java b/src/main/java/tokarotik/giftapi/cache/CacheManager.java index 921351a..cefb651 100644 --- a/src/main/java/tokarotik/giftapi/cache/CacheManager.java +++ b/src/main/java/tokarotik/giftapi/cache/CacheManager.java @@ -1,9 +1,11 @@ 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.savers.BasicNBT; +import tokarotik.giftapi.NBT.savers.WorldNBTSynchronizer; import tokarotik.giftapi.NBT.pages.PagesManager; import java.util.Map; @@ -26,20 +28,17 @@ public class CacheManager // Return cached PageManager if already loaded if (worldMap.containsKey(player)) { - System.out.print("Is already loaded"); return worldMap.get(player); } // Attempt to load from current world if (WorldNBTSynchronizer.hasAll(entityPlayer, playerWorld)) { - System.out.print("Load from current world"); return this.cacheUtil.loadAndCachePageManager(player, playerWorld, entityPlayer, worldMap); } // Attempt to load from another world if present String alternateWorld = WorldNBTSynchronizer.getWorldWhatHasPlayer(entityPlayer); if (alternateWorld != null) { - System.out.print("Load from another world"); return this.cacheUtil.loadAndCachePageManager(player, alternateWorld, entityPlayer, worldMap); } @@ -47,18 +46,9 @@ public class CacheManager PagesManager defaultPages = new PagesManager(this.inventory_slots); worldMap.put(player, defaultPages); - System.out.print("New empty PageManager"); - 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() { cacheUtil.saveAllHard(); diff --git a/src/main/java/tokarotik/giftapi/cache/CacheUtil.java b/src/main/java/tokarotik/giftapi/cache/CacheUtil.java index 5205a0e..0a7e389 100644 --- a/src/main/java/tokarotik/giftapi/cache/CacheUtil.java +++ b/src/main/java/tokarotik/giftapi/cache/CacheUtil.java @@ -3,10 +3,12 @@ package tokarotik.giftapi.cache; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTTagCompound; 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.savers.BasicNBT; import tokarotik.giftapi.NBT.pages.PagesManager; import java.util.HashMap; diff --git a/src/main/java/tokarotik/giftapi/dev/AddCommand.java b/src/main/java/tokarotik/giftapi/dev/AddCommand.java index 769f4ff..51aa64a 100644 --- a/src/main/java/tokarotik/giftapi/dev/AddCommand.java +++ b/src/main/java/tokarotik/giftapi/dev/AddCommand.java @@ -7,8 +7,10 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; + import tokarotik.giftapi.Main; +import java.util.Random; import java.util.concurrent.ThreadLocalRandom; @@ -33,11 +35,19 @@ public class AddCommand implements CommandExecutor { player = (Player) sender; } - Material[] values = Material.values(); - int id = values[ThreadLocalRandom.current().nextInt(values.length)].getId(); - ItemStack item = new ItemStack(id); + int count = 1; + if (strings.length > 0) + { + count = Integer.parseInt(strings[0]); + } - this.plugin.add(player, item); + for (int i = 0; i < count; i++) { + Material[] values = Material.values(); + int id = values[ThreadLocalRandom.current().nextInt(values.length)].getId(); + ItemStack item = new ItemStack(id); + + this.plugin.add(player, item); + } return true; } diff --git a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java index 40a914d..8ced699 100644 --- a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java +++ b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java @@ -11,13 +11,11 @@ import tokarotik.giftapi.Main; public class GiftCommand implements CommandExecutor { - private final APIManager apiManager; private final Main plugin; - public GiftCommand(APIManager APIManager, Main plugin) + public GiftCommand(Main plugin) { - this.apiManager = APIManager; this.plugin = plugin; } @@ -29,8 +27,6 @@ public class GiftCommand implements CommandExecutor { { sender.sendMessage("This command can use only player!"); player = Bukkit.getOnlinePlayers()[0]; - - return true; } else @@ -38,8 +34,6 @@ public class GiftCommand implements CommandExecutor { player = (Player) sender; } - System.out.println( plugin.getCacheManager().load(player).getTag() ); - this.plugin.openGUI(player); diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java index b6ba094..00cba5f 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java @@ -7,16 +7,15 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.EventHandler; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; + import tokarotik.giftapi.cache.CacheManager; import tokarotik.giftapi.NBT.pages.PagesManager; 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; @@ -25,9 +24,9 @@ public class InventoryManager implements Listener { 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, this.items_slots); + int items_slots = inventory_slots - 9; + inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit, items_slots); } @EventHandler @@ -50,12 +49,11 @@ public class InventoryManager implements Listener public synchronized void openCustomInventory(Player player) { + this.cacheManager.load(player).setCurrentPage(0); 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 fa064ad..4784f48 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java @@ -6,9 +6,11 @@ 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; +import tokarotik.giftapi.inventory.inventoryitems.InventoryItemsUtil; public class InventoryUtil { @@ -81,33 +83,40 @@ public class InventoryUtil public synchronized void updateInventory(Inventory inventory, Player player) { + inventory.clear(); PagesManager pagesManager = this.cacheManager.load(player); - setUI(inventory, pagesManager); this.inventoryItems.renderPage(pagesManager, inventory); + setUI(inventory, pagesManager); } private synchronized void setUI(Inventory inventory, PagesManager pagesManager) { - int height = (this.inventory_slots / 9) + 1; + int height = (this.inventory_slots / 9); // exit setItem(inventory, Material.REDSTONE, this.nameExit, 4, height); - if (pagesManager.getCountPages() == 0) { return; } - if (pagesManager.getCurrentPage() != pagesManager.getCountPages()) + int count = pagesManager.getCountPages(); + + if (count == 0) { return; } + + if (pagesManager.getCurrentPage() < count) { // arrow right setArrow(inventory, this.nameArrowRight, 8, height); } - if (pagesManager.getCurrentPage() != 0) + if (pagesManager.getCurrentPage() > 0) { // arrow left setArrow(inventory, this.nameArrowLeft, 0, height); } + } - + private synchronized void setArrow(Inventory inventory, String name, int x, int y) + { + setItem(inventory, Material.ARROW, name, x, y); } private synchronized void setItem(Inventory inventory, Material material, String name, int x, int y) @@ -119,19 +128,8 @@ public class InventoryUtil item.setItemMeta(meta_item); inventory.setItem( - getCordinates(x, y), + InventoryItemsUtil.getCordinates(this.inventory_slots, 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); - } } diff --git a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java index 7aec6cd..e5357f7 100644 --- a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItems.java @@ -2,6 +2,7 @@ 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; diff --git a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java index eb45a6a..9db99b6 100644 --- a/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java +++ b/src/main/java/tokarotik/giftapi/inventory/inventoryitems/InventoryItemsUtil.java @@ -2,6 +2,7 @@ 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; @@ -24,9 +25,24 @@ public class InventoryItemsUtil public synchronized static void renderList(List array, Inventory inventory, int items_slots) { + short x = 0; + short y = 0; - for (ItemStack item : array) { - inventory.addItem(item); + for (ItemStack itemStack : array) { + + if (x >= 10) { + x = 0; + y++; + } + int slot = getCordinates(items_slots + 9, x, y); + + if (slot > items_slots - 1) { + return; + } + + inventory.setItem(slot, itemStack); + + x++; } } @@ -37,12 +53,16 @@ public class InventoryItemsUtil private synchronized static int getEndItemIndex(int current_page, int items_slots, int items_count) { + items_slots += 4; 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; } - + if (literly_end_page <= items_count) { return literly_end_page; } return literly_end_page - (literly_end_page - items_count); } + + public static synchronized int getCordinates(int inventory_slots, int x, int y) + { + if (y > 0 && y != inventory_slots / 9) { x += y; } + return ((y * 9) + x) % (inventory_slots + 9); + } }