diff --git a/src/main/java/tokarotik/giftapi/APIManager.java b/src/main/java/tokarotik/giftapi/APIManager.java index 8b47616..09f4fbe 100644 --- a/src/main/java/tokarotik/giftapi/APIManager.java +++ b/src/main/java/tokarotik/giftapi/APIManager.java @@ -21,7 +21,8 @@ public class APIManager { this.inventoryManager = new InventoryManager( this.config.getString(ConfigPaths.GUINAME, "GiftAPI Menu"), this.config.getString(ConfigPaths.GUIRIGHT, "<>") + this.config.getString(ConfigPaths.GUILEFT, "left>>"), + this.config.getString(ConfigPaths.GUIEXIT, "quit") ); Bukkit.getPluginManager().registerEvents(this.inventoryManager, this.plugin); diff --git a/src/main/java/tokarotik/giftapi/ConfigPaths.java b/src/main/java/tokarotik/giftapi/ConfigPaths.java index cc47832..106c3fe 100644 --- a/src/main/java/tokarotik/giftapi/ConfigPaths.java +++ b/src/main/java/tokarotik/giftapi/ConfigPaths.java @@ -3,6 +3,7 @@ package tokarotik.giftapi; public class ConfigPaths { public static final String DEVTEST = "dev-test"; public static final String GUINAME = "gui.title-menu"; - public static final String GUIRIGHT = "gui.arrow.right-name"; - public static final String GUILEFT = "gui.arrow.left-name"; + public static final String GUIRIGHT = "gui.buttons.right-name"; + public static final String GUILEFT = "gui.buttons.left-name"; + public static final String GUIEXIT = "gui.buttons.exit-name"; } diff --git a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java index 5674237..1c3ed63 100644 --- a/src/main/java/tokarotik/giftapi/dev/GiftCommand.java +++ b/src/main/java/tokarotik/giftapi/dev/GiftCommand.java @@ -6,9 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import tokarotik.giftapi.APIManager; -import tokarotik.giftapi.savemanager.BasicNBT; import tokarotik.giftapi.savemanager.NBTManager; -import tokarotik.giftapi.savemanager.item.ItemLoad; public class GiftCommand implements CommandExecutor { @@ -29,11 +27,11 @@ public class GiftCommand implements CommandExecutor { new NBTManager("world").write((Player) sender); - BasicNBT nbt = new BasicNBT("world"); + //BasicNBT nbt = new BasicNBT("world"); - System.out.println(nbt.readPlayerNBT(nbt.getPlayer((Player) sender)).getCompound("giftapi")); + //System.out.println(nbt.readPlayerNBT(nbt.getPlayer((Player) sender)).getCompound("giftapi")); - ((Player) sender).getInventory().addItem(new ItemLoad(nbt.readPlayerNBT(nbt.getPlayer((Player) sender)).getCompound("giftapi")).getItem()); + //((Player) sender).getInventory().addItem(new ItemLoad(nbt.readPlayerNBT(nbt.getPlayer((Player) sender)).getCompound("giftapi")).getItem()); this.apiManager.openInventory((Player) sender); diff --git a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java index 4155dbf..146591b 100644 --- a/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java +++ b/src/main/java/tokarotik/giftapi/inventory/InventoryManager.java @@ -18,12 +18,14 @@ public class InventoryManager implements Listener { private String nameGUI; private String nameArrowRight; private String nameArrowLeft; + private String nameExit; - public InventoryManager(String nameGUI, String nameArrowRight, String nameArrowLeft) + public InventoryManager(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) { this.nameGUI = nameGUI; this.nameArrowRight = nameArrowRight; this.nameArrowLeft = nameArrowLeft; + this.nameExit = nameExit; } public void openCustomInventory(Player player) { @@ -35,22 +37,29 @@ public class InventoryManager implements Listener { } @EventHandler public void onInventoryClick(InventoryClickEvent event) { - if (event.getInventory().getTitle().equals(this.nameGUI)) { + Inventory inventory = event.getInventory(); + + if (inventory.getTitle().equals(this.nameGUI)) { event.setCancelled(true); ItemStack currectItem = event.getCurrentItem(); String nameCurrentItem = currectItem.getItemMeta().getDisplayName(); Player player = (Player) event.getWhoClicked(); - if (nameCurrentItem == this.nameArrowRight) + if (nameCurrentItem.equals(this.nameArrowRight)) { player.sendMessage("Right!"); } - if (nameCurrentItem == this.nameArrowLeft) + if (nameCurrentItem.equals(this.nameArrowLeft)) { player.sendMessage("Left!"); } + + if (nameCurrentItem.equals(this.nameExit)) + { + player.closeInventory(); + } } } @@ -62,29 +71,35 @@ public class InventoryManager implements Listener { private void setUI(Inventory inventory) { // arrow right - setArrow(inventory, this.nameArrowRight, 0, 6); + setArrow(inventory, this.nameArrowRight, 8, 6); // arrow left - setArrow(inventory, this.nameArrowLeft, 8, 6); + setArrow(inventory, this.nameArrowLeft, 0, 6); // exit + setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); //setSkull(inventory, "exit", ChatColor.ITALIC + "" + ChatColor.DARK_RED + "Выйти", 4, 6); } - private void setArrow(Inventory inventory, String name, int x, int y) + private void setItem(Inventory inventory, Material material, String name, int x, int y) { - ItemStack arrow = new ItemStack(Material.ARROW, 1); - ItemMeta meta_arrow = arrow.getItemMeta(); + ItemStack item = new ItemStack(material, 1); + ItemMeta meta_item = item.getItemMeta(); - meta_arrow.setDisplayName(name); - arrow.setItemMeta(meta_arrow); + meta_item.setDisplayName(name); + item.setItemMeta(meta_item); inventory.setItem( getCordinates(x, y), - arrow + 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++;} diff --git a/src/main/java/tokarotik/giftapi/savemanager/page/Page.java b/src/main/java/tokarotik/giftapi/savemanager/page/Page.java index 93c92a3..5ac255d 100644 --- a/src/main/java/tokarotik/giftapi/savemanager/page/Page.java +++ b/src/main/java/tokarotik/giftapi/savemanager/page/Page.java @@ -3,90 +3,69 @@ package tokarotik.giftapi.savemanager.page; import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagList; import org.bukkit.inventory.ItemStack; -import tokarotik.giftapi.savemanager.item.ItemLoad; import tokarotik.giftapi.savemanager.item.ItemNBT; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; public class Page { + public int max_stack; public NBTTagList tag; - public void add(ItemStack item) + public Page(int max_stack) { - NBTTagCompound nbt = new ItemNBT(item).getTag(); - - this.tag.add(nbt); + this.max_stack = max_stack; } - public void remove(ItemStack item) - { - ItemStack[] new_list = addAllExtraOne(item); + public boolean add(ItemStack item) { + if (!isOverStacked()) { - this.tag = itemStackListToNBTList(new_list); + NBTTagCompound nbt = new ItemNBT(item).getTag(); + + this.tag.add(nbt); + + return true; + } + + return false; + } + + public boolean remove(ItemStack item) + { + ItemStack[] new_list = PageUtil.addAllExtraOne(this.tag, item); + NBTTagList list = PageUtil.itemStackListToNBTList(new_list); + + if (!list.equals(this.tag)) + { + this.tag = list; + return true; + } + + return false; } public ItemStack[] getList() { - return reverse(getList()); + return PageUtil.reverse(PageUtil.getRawList(this.tag)); } - private ItemStack[] getRawList() + public boolean isOverStacked() { - ItemStack[] list = new ItemStack[this.tag.size()]; + return this.tag.size() < this.max_stack; + } - for (int i = 0; i < this.tag.size(); i++) + public ItemStack[] getOverStacked() + { + if (isOverStacked()) { - NBTTagCompound compound = (NBTTagCompound) this.tag.get(i); + List list = new ArrayList<>(Arrays.asList(getList())); - list[i] = new ItemLoad(compound).getItem(); + this.tag = PageUtil.itemStackListToNBTList( list.subList(0, this.max_stack + 1) ); + return (ItemStack[]) list.subList(this.max_stack + 1, this.tag.size()).toArray(); } - return list; + return new ItemStack[]{}; } - - private ItemStack[] reverse(ItemStack[] list) - { - List array = Arrays.asList(list); - Collections.reverse(array); - - return (ItemStack[]) array.toArray(); - } - - private ItemStack[] addAllExtraOne(ItemStack item) - { - ItemStack[] new_list = new ItemStack[tag.size()]; - ItemStack[] old_list = getRawList(); - - for (int i = 0;i < tag.size();i++) - { - if (!old_list[i].equals(item)) - { - new_list[i] = old_list[i]; - } - } - - return new_list; - } - - private NBTTagList itemStackListToNBTList(ItemStack[] items) - { - NBTTagList list = new NBTTagList(); - - for (int i = 0; i < items.length; i++) { - if (items[i] != null) - { - ItemNBT tag = new ItemNBT(items[i]); - NBTTagCompound compound = tag.getTag(); - - list.add(compound); - } - } - - return list; - } - - } diff --git a/src/main/java/tokarotik/giftapi/savemanager/page/PageUtil.java b/src/main/java/tokarotik/giftapi/savemanager/page/PageUtil.java new file mode 100644 index 0000000..48a282b --- /dev/null +++ b/src/main/java/tokarotik/giftapi/savemanager/page/PageUtil.java @@ -0,0 +1,74 @@ +package tokarotik.giftapi.savemanager.page; + +import net.minecraft.server.v1_6_R3.NBTTagCompound; +import net.minecraft.server.v1_6_R3.NBTTagList; +import org.bukkit.inventory.ItemStack; +import tokarotik.giftapi.savemanager.item.ItemLoad; +import tokarotik.giftapi.savemanager.item.ItemNBT; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class PageUtil +{ + public static ItemStack[] getRawList(NBTTagList tag) + { + ItemStack[] list = new ItemStack[tag.size()]; + + for (int i = 0; i < tag.size(); i++) + { + NBTTagCompound compound = (NBTTagCompound) tag.get(i); + + list[i] = new ItemLoad(compound).getItem(); + } + + return list; + } + + public static ItemStack[] reverse(ItemStack[] list) + { + List array = Arrays.asList(list); + Collections.reverse(array); + + return (ItemStack[]) array.toArray(); + } + + public static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item) + { + ItemStack[] new_list = new ItemStack[tag.size()]; + ItemStack[] old_list = getRawList(tag); + + for (int i = 0;i < tag.size();i++) + { + if (!old_list[i].equals(item)) + { + new_list[i] = old_list[i]; + } + } + + return new_list; + } + + public static NBTTagList itemStackListToNBTList(ItemStack[] items) + { + NBTTagList list = new NBTTagList(); + + for (int i = 0; i < items.length; i++) { + if (items[i] != null) + { + ItemNBT tag = new ItemNBT(items[i]); + NBTTagCompound compound = tag.getTag(); + + list.add(compound); + } + } + + return list; + } + + public static NBTTagList itemStackListToNBTList(List items) + { + return itemStackListToNBTList((ItemStack[]) items.toArray()); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 105885b..9936b48 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -8,6 +8,7 @@ gui: # Max title length is 32 letters title-menu: "Set Your Title In Config" - arrow: - right-name: "<" - left-name: ">" \ No newline at end of file + buttons: + right-name: ">" + left-name: "<" + exit-name: "Exit" \ No newline at end of file