From aac036a559049fd813d10556b502e4320e57c9bc Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sun, 17 Nov 2013 04:14:00 -0700 Subject: [PATCH] Added Item Cube functions for portability, Item Cube helper functions, and finish Ender Item Cube functionality. --- .../src/me/kaZep/Base/PlayerListener.java | 757 ++++++++---------- 1 file changed, 319 insertions(+), 438 deletions(-) diff --git a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java index 7049780..b232bbf 100644 --- a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java +++ b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java @@ -205,6 +205,8 @@ public class PlayerListener this.plugin = plugin; } + enum Cube { SMALL, LARGE, ENDER } + public void updateTopSPLEEFSigns() { String name[] = {"","",""}; int rating[] = {-9999,-9999,-9999}, wins[] = {0,0,0}, losses[] = {0,0,0}; @@ -9612,355 +9614,20 @@ public ItemStack getGoodie() { //Regardless of the inventory, if we try to put it inside a chest, got to try to insert it in there. if (event.getCurrentItem()!=null) { if (event.getCursor()!=null && event.getCursor().getType()!=Material.AIR && (event.getCurrentItem().getType()==Material.CHEST || event.getCurrentItem().getType()==Material.TRAPPED_CHEST || event.getCurrentItem().getType()==Material.ENDER_CHEST) && event.getClick()==ClickType.LEFT) { - //We have to attempt to insert the item in the Item Cube. - boolean largechest=false; - boolean smallchest=false; - boolean enderchest=false; - int identifier=-1; - if (event.getCurrentItem().getItemMeta().getLore()!=null) { - //Check to see if the Lore contains anything. - for (int i=0;i1) { - ItemStack newitem = event.getCurrentItem().clone(); - newitem.setAmount(event.getCurrentItem().getAmount()-1); - event.getCurrentItem().setAmount(1); - //Drop the rest on the ground. - p.getWorld().dropItemNaturally(p.getLocation(), newitem); - } - ItemMeta meta = event.getCurrentItem().getItemMeta(); - List newlore = meta.getLore(); - newlore.add("ID#"+identifier); - meta.setLore(newlore); - event.getCurrentItem().setItemMeta(meta); - - if (enderchest) { - event.getCurrentItem().setAmount(2); - } - - } - if (smallchest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<9;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("item-0", event.getCursor()); - event.getCursor().setType(Material.AIR); - f.set("created", Boolean.valueOf(true)); - } else { - - //We need to see if we have the inventory opened already...If so we have to add it to THAT one. - Inventory thisinven=Bukkit.createInventory(event.getWhoClicked(), 9, "Item Cube #"+identifier); - boolean changeinven=false; - if (event.getInventory().getTitle().contains("Item Cube") && event.getInventory().getTitle().length()>0) { - if (Integer.valueOf(event.getInventory().getTitle().substring(event.getInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { - thisinven=event.getInventory(); - changeinven=true; - } - } - if (!changeinven) { - for (int i=0;i<9;i++) { - //items.add(f.getItemStack("item-"+i)); - if (f.contains("item-"+i)) { - thisinven.addItem(f.getItemStack("item-"+i)); - } - } - } - int countinven = countSpace(thisinven,event.getCursor()); - if (countinven>=event.getCursor().getAmount()) { - //We can simply add it in no problem. - thisinven.addItem(event.getCursor()); - for (int i=0;i0) { - //We can at least fit a few. - int fit = event.getCursor().getAmount()-countinven; - //Leave behind this many. - ItemStack thisitem = event.getCursor(), thisitem2 = event.getCursor(); - thisitem.setAmount(fit); - event.setCursor(thisitem); - //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); - thisitem2.setAmount(countinven); - thisinven.addItem(thisitem2); - //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); - for (int i=0;i items = new ArrayList(); - //We need to see if we have the inventory opened already...If so we have to add it to THAT one. - Inventory thisinven=Bukkit.createInventory(event.getWhoClicked(), 54, "Item Cube #"+identifier); - boolean changeinven=false; - if (event.getInventory().getTitle().contains("Item Cube") && event.getInventory().getTitle().length()>0) { - if (Integer.valueOf(event.getInventory().getTitle().substring(event.getInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { - thisinven=event.getInventory(); - changeinven=true; - } - } - if (!changeinven) { - for (int i=0;i<54;i++) { - //items.add(f.getItemStack("item-"+i)); - if (f.contains("item-"+i)) { - thisinven.addItem(f.getItemStack("item-"+i)); - } - } - } - int countinven = countSpace(thisinven,event.getCursor()); - if (countinven>=event.getCursor().getAmount()) { - //We can simply add it in no problem. - thisinven.addItem(event.getCursor()); - for (int i=0;i0) { - //We can at least fit a few. - int fit = event.getCursor().getAmount()-countinven; - //Leave behind this many. - ItemStack thisitem = event.getCursor(), thisitem2 = event.getCursor(); - thisitem.setAmount(fit); - event.setCursor(thisitem); - //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); - thisitem2.setAmount(countinven); - thisinven.addItem(thisitem2); - //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); - for (int i=0;i items = new ArrayList(); - //We need to see if we have the inventory opened already...If so we have to add it to THAT one. - Inventory thisinven=Bukkit.createInventory(event.getWhoClicked(), 27, "Item Cube #"+identifier); - boolean changeinven=false; - if (event.getInventory().getTitle().contains("Item Cube") && event.getInventory().getTitle().length()>0) { - if (Integer.valueOf(event.getInventory().getTitle().substring(event.getInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { - thisinven=event.getInventory(); - changeinven=true; - } - } - if (!changeinven) { - for (int i=0;i<27;i++) { - //items.add(f.getItemStack("item-"+i)); - if (f.contains("item-"+i)) { - thisinven.addItem(f.getItemStack("item-"+i)); - } - } - } - int countinven = countSpace(thisinven,event.getCursor()); - if (countinven>=event.getCursor().getAmount()) { - //We can simply add it in no problem. - thisinven.addItem(event.getCursor()); - for (int i=0;i0) { - //We can at least fit a few. - int fit = event.getCursor().getAmount()-countinven; - //Leave behind this many. - ItemStack thisitem = event.getCursor(), thisitem2 = event.getCursor(); - thisitem.setAmount(fit); - event.setCursor(thisitem); - //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); - thisitem2.setAmount(countinven); - thisinven.addItem(thisitem2); - //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); - for (int i=0;i1) { - ItemStack newitem = event.getCurrentItem().clone(); - newitem.setAmount(event.getCurrentItem().getAmount()-1); - event.getCurrentItem().setAmount(1); - //Drop the rest on the ground. - p.getWorld().dropItemNaturally(p.getLocation(), newitem); - } - ItemMeta meta = event.getCurrentItem().getItemMeta(); - List newlore = meta.getLore(); - newlore.add("ID#"+identifier); - meta.setLore(newlore); - event.getCurrentItem().setItemMeta(meta); - - if (enderchest) { - event.getCurrentItem().setAmount(2); - } - } - Inventory screen = null; - if (smallchest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<9;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(event.getWhoClicked(), 9, "Item Cube #"+identifier); - for (int i=0;i<9;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (largechest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<54;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(event.getWhoClicked(), 54, "Large Item Cube #"+identifier); - for (int i=0;i<54;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (enderchest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<27;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(event.getWhoClicked(), 27, "Ender Item Cube #"+identifier); - for (int i=0;i<27;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (screen!=null) { - event.getWhoClicked().closeInventory(); - event.getWhoClicked().openInventory(screen); - event.setCancelled(true); - //return; - } - } + viewItemCube(p, event.getCurrentItem()); + event.setCancelled(true); + return; } } }else @@ -11773,6 +11440,312 @@ public void onEntityExpode(ExplosionPrimeEvent e) { //e.getPlayer().sendMessage(e.getMessage()); } } + + public void viewItemCube(Player p, ItemStack item_cube) { + //This function will figure out what type of Item Cube this item is and then display the correct inventory on-screen, also setting up the identifier. + //Note that this function does not check if the item *is* an item cube. It assumes it is. + Cube cube_type = null; + int identifier=-1; + if (item_cube.getItemMeta().getLore()!=null) { + //Check to see if the Lore contains anything. + for (int i=0;i1) { + ItemStack newitem = item_cube.clone(); + newitem.setAmount(item_cube.getAmount()-1); + item_cube.setAmount(1); + //Drop the rest on the ground. + p.getWorld().dropItemNaturally(p.getLocation(), newitem); + } + ItemMeta meta = item_cube.getItemMeta(); + List newlore = meta.getLore(); + newlore.add("ID#"+identifier); + meta.setLore(newlore); + item_cube.setItemMeta(meta); + + if (cube_type == Cube.ENDER) { + item_cube.setAmount(2); + } + } + Inventory screen = null; + switch (cube_type) { + case SMALL: { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<9;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(p, 9, "Item Cube #"+identifier); + for (int i=0;i<9;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + }break; + case LARGE: { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<54;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(p, 54, "Large Item Cube #"+identifier); + for (int i=0;i<54;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + }break; + case ENDER: { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<27;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(p, 27, "Ender Item Cube #"+identifier); + for (int i=0;i<27;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + }break; + } + if (screen!=null) { + p.closeInventory(); + p.openInventory(screen); + } + } + } + + public boolean isViewingEnderCube(Player p) { + //Returns whether or not this player is viewing an ender cube. + //This is useful for determining if you have to update the ender cube for other viewers. + if (p.getOpenInventory().getTopInventory()!=null && p.getOpenInventory().getTopInventory().getTitle().contains("Ender Item Cube")) { + return true; + } else { + return false; + } + } + + public int getViewingEnderCubeID(Player p) { + //Returns whether or not this player is viewing an ender cube. + //This is useful for determining if you have to update the ender cube for other viewers. + if (p.getOpenInventory().getTopInventory()!=null && p.getOpenInventory().getTopInventory().getTitle().contains("Ender Item Cube")) { + return Integer.valueOf(p.getOpenInventory().getTopInventory().getTitle().substring(p.getOpenInventory().getTopInventory().getTitle().indexOf("#")).replace("#", "")); + } else { + return -1; //Invalid use. + } + } + + public void ItemCube_updateSameEnderCube(int cube_id, Player player) { + //If a player attempts to do something in an Ender Cube, update the Ender Cube for all other viewers that is not player. (The player argument is the player making modifications to the inventory.) + for (int i=0;i0) { + if (Integer.valueOf(Bukkit.getOnlinePlayers()[i].getOpenInventory().getTopInventory().getTitle().substring(Bukkit.getOnlinePlayers()[i].getOpenInventory().getTopInventory().getTitle().indexOf("#")).replace("#", ""))==cube_id) { + //It is! We need to close it out and re-open with the updated properties of the cube. + Inventory new_inven = player.getOpenInventory().getTopInventory(); + Bukkit.getOnlinePlayers()[i].closeInventory(); + Bukkit.getOnlinePlayers()[i].openInventory(new_inven); + } + } + } + } + } + } + + private void ItemCube_addSameEnderCube(ItemStack add_item, int cube_id, Player player) { + //Helper function for ItemCube_add. + //Checks for any players that are viewing the same Ender Item Cube as player, and updating it accordingly so the changes are reflected. + for (int i=0;i0) { + if (Integer.valueOf(Bukkit.getOnlinePlayers()[i].getOpenInventory().getTopInventory().getTitle().substring(Bukkit.getOnlinePlayers()[i].getOpenInventory().getTopInventory().getTitle().indexOf("#")).replace("#", ""))==cube_id) { + //It is! "Add" it to that inventory list too. + player.getOpenInventory().getTopInventory().addItem(add_item); + } + } + } + } + } + } + + private ItemStack ItemCube_add(Player p, int identifier, Cube size, ItemStack insert_item) { + //Helper function for InsertIntoItemCube(). Inserts the item into the correct cube. + //If this is an Ender Item Cube, also attempts to refresh the inventories of any players viewing it. + + int slots = 0; + + String heading = ""; + + switch (size) { + case SMALL: { + slots = 9; + heading = ""; + }break; + case LARGE: { + slots = 54; + heading = "Large"; + }break; + case ENDER: { + slots = 27; + heading = "Ender"; + }break; + } + + if (!heading.equalsIgnoreCase("")) { + heading+=" "; //Add a space to separate the heading from "Item Cube". + } + + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i0) { + if (Integer.valueOf(p.getOpenInventory().getTopInventory().getTitle().substring(p.getOpenInventory().getTopInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { + thisinven=p.getOpenInventory().getTopInventory(); + changeinven=true; + } + } + if (!changeinven) { + for (int i=0;i=insert_item.getAmount()) { + //We can simply add it in no problem. + thisinven.addItem(insert_item); + for (int i=0;i0) { + //We can at least fit a few. + int fit = insert_item.getAmount()-countinven; + //Leave behind this many. + ItemStack thisitem = insert_item, thisitem2 = insert_item; + thisitem.setAmount(fit); + //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); + thisitem2.setAmount(countinven); + thisinven.addItem(thisitem2); + if (size == Cube.ENDER) { + //This is an Ender Item Cube. We have to check if any other players are looking at the correspnding Ender Item Cube inventory. + ItemCube_addSameEnderCube(thisitem2, identifier, p); + } + //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); + for (int i=0;i1) { + ItemStack newitem = item_cube.clone(); + newitem.setAmount(item_cube.getAmount()-1); + item_cube.setAmount(1); + //Drop the rest on the ground. + p.getWorld().dropItemNaturally(p.getLocation(), newitem); + } + ItemMeta meta = item_cube.getItemMeta(); + List newlore = meta.getLore(); + newlore.add("ID#"+identifier); + meta.setLore(newlore); + item_cube.setItemMeta(meta); + if (cube_type == Cube.ENDER) { + item_cube.setAmount(2); + } + } + return ItemCube_add(p, identifier, cube_type, insert_item); + } + return new ItemStack(Material.AIR); //Something went wrong. Just return a blank item. + } @EventHandler public void onPlayerInteract(PlayerInteractEvent e) @@ -11827,101 +11800,9 @@ public void onEntityExpode(ExplosionPrimeEvent e) { return; } if (p.getItemInHand()!=null && (p.getItemInHand().getType()==Material.CHEST || p.getItemInHand().getType()==Material.TRAPPED_CHEST || p.getItemInHand().getType()==Material.ENDER_CHEST)) { - if (p.getItemInHand().getItemMeta().getLore()!=null) { - //Check to see if the Lore contains anything. - for (int i=0;i1) { - ItemStack newitem = p.getItemInHand().clone(); - newitem.setAmount(p.getItemInHand().getAmount()-1); - p.getItemInHand().setAmount(1); - //Drop the rest on the ground. - p.getWorld().dropItemNaturally(p.getLocation(), newitem); - } - ItemMeta meta = p.getItemInHand().getItemMeta(); - List newlore = meta.getLore(); - newlore.add("ID#"+identifier); - meta.setLore(newlore); - p.getItemInHand().setItemMeta(meta); - - if (enderchest) { - p.getItemInHand().setAmount(2); - } - } - Inventory screen = null; - if (smallchest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<9;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(p, 9, "Item Cube #"+identifier); - for (int i=0;i<9;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (largechest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<54;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(p, 54, "Large Item Cube #"+identifier); - for (int i=0;i<54;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (enderchest) { - FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); - if (!f.contains("created")) { - for (int i=0;i<27;i++) { - f.set("item-"+i, new ItemStack(Material.AIR)); - } - f.set("created", Boolean.valueOf(true)); - } - //List items = new ArrayList(); - screen=Bukkit.createInventory(p, 27, "Ender Item Cube #"+identifier); - for (int i=0;i<27;i++) { - //items.add(f.getItemStack("item-"+i)); - screen.setItem(i, f.getItemStack("item-"+i)); - } - this.plugin.saveItemCubeConfig(f, identifier); - } - if (screen!=null) { - p.closeInventory(); - p.openInventory(screen); - e.setCancelled(true); - return; - } - } + viewItemCube(p, p.getItemInHand()); + e.setCancelled(true); + return; } } if (blockAction == Action.RIGHT_CLICK_BLOCK) {