Added item cube syncing back in, with improved usability. Uses a shared

inventory instead of a hack'ish click-based system.
This commit is contained in:
sigonasr2 2016-07-02 23:16:44 -05:00
parent a42ab99a9d
commit 43237b7a04
5 changed files with 292 additions and 318 deletions

Binary file not shown.

View File

@ -1,6 +1,6 @@
name: TwosideKeeper name: TwosideKeeper
main: sig.plugin.TwosideKeeper.TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper
version: 3.4.4r1 version: 3.4.4r2
commands: commands:
money: money:
description: Tells the player the amount of money they are holding. description: Tells the player the amount of money they are holding.
@ -67,3 +67,8 @@ commands:
usage: /fix usage: /fix
permission: TwosideKeeper.fix permission: TwosideKeeper.fix
permission-message: No permissions! permission-message: No permissions!
tp_world:
description: Teleports to a location in a specified world.
usage: /tp_world <world> <x> <y> <z>
permission: TwosideKeeper.tp_world
permission-message: No permissions!

View File

@ -16,6 +16,7 @@ import org.bukkit.entity.Monster;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton; import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.PotionMeta;
@ -1383,4 +1384,71 @@ public class GenericFunctions {
return true; return true;
} }
} }
public static boolean isDumpableContainer(Material mat) {
if (mat==Material.CHEST ||
mat==Material.TRAPPED_CHEST) {
return true;
}
return false;
}
public static ItemStack moveItemStack(ItemStack item, Inventory target) {
//First see if there are any incomplete stacks in the target inventory.
if (item!=null &&
item.getType()!=Material.AIR) {
for (int i=0;i<target.getSize();i++) {
ItemStack targetitem = target.getItem(i);
if (targetitem!=null &&
targetitem.getType()!=Material.AIR &&
item.isSimilar(targetitem) &&
targetitem.getAmount()<targetitem.getMaxStackSize()) {
//We have some room!
int space = targetitem.getMaxStackSize()-targetitem.getAmount();
if (item.getAmount()<space) {
targetitem.setAmount(targetitem.getAmount()+item.getAmount());
//That means we are done!
return new ItemStack(Material.AIR);
} else {
//Insert what we can. Handle the rest elsewhere.
targetitem.setAmount(targetitem.getMaxStackSize());
item.setAmount(item.getAmount()-space);
}
} else
if (targetitem==null) {
//This is an empty spot. Insert the item here.
int space = item.getMaxStackSize();
if (item.getAmount()<space) {
ItemStack newslot = item.clone();
target.setItem(i, newslot);
return new ItemStack(Material.AIR);
} else {
//Insert what we can. Handle the rest elsewhere.
ItemStack newslot = item.clone();
newslot.setAmount(item.getMaxStackSize());
target.setItem(i, newslot);
item.setAmount(item.getAmount()-space);
}
} else if (targetitem.getType()==Material.AIR)
{
//This is an empty spot. Insert the item here.
int space = item.getMaxStackSize();
if (item.getAmount()<space) {
ItemStack newslot = item.clone();
target.setItem(i, newslot);
return new ItemStack(Material.AIR);
} else {
//Insert what we can. Handle the rest elsewhere.
ItemStack newslot = item.clone();
newslot.setAmount(item.getMaxStackSize());
target.setItem(i, newslot);
item.setAmount(item.getAmount()-space);
}
}
}
return item;
} else {
return new ItemStack(Material.AIR);
}
}
} }

View File

@ -3,6 +3,9 @@ package sig.plugin.TwosideKeeper.HelperStructures;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@ -22,8 +25,27 @@ public class ItemCube {
} }
return false; //Didn't find anyone, oh well.. return false; //Didn't find anyone, oh well..
} }
public static Inventory getViewingItemCubeInventory(int id, Player checker) {
for (int i=0;i<Bukkit.getOnlinePlayers().size();i++) {
Player p = Iterables.get(Bukkit.getOnlinePlayers(), i);
if (!p.equals(checker)) {
if (p.getOpenInventory()!=null && p.getOpenInventory().getTitle().contains("Item Cube #"+id)) {
//This is an item cube. Check if it's the same number.
return p.getOpenInventory().getTopInventory();
}
}
}
return null; //Didn't find anything.
}
public static void displayErrorMessage(Player p) { public static void displayErrorMessage(Player p) {
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_PLING, 0.6f, 4.0f); p.playSound(p.getLocation(), Sound.BLOCK_NOTE_PLING, 0.6f, 4.0f);
p.sendMessage("Someone is currently using this Item Cube! Please wait for them to finish."); p.sendMessage("Someone is currently using this Item Cube! Please wait for them to finish.");
} }
public static void addToViewersOfItemCube(int idnumb, ItemStack cursor, Player check) {
Inventory inv = getViewingItemCubeInventory(idnumb, check);
if (inv!=null) {
inv.addItem(cursor);
}
}
} }

View File

@ -18,6 +18,7 @@ import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.WorldCreator;
import org.bukkit.attribute.Attribute; import org.bukkit.attribute.Attribute;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Chest; import org.bukkit.block.Chest;
@ -237,6 +238,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
sig.plugin.TwosideKeeper.Recipes.Initialize_SlabReconstruction_Recipes(); sig.plugin.TwosideKeeper.Recipes.Initialize_SlabReconstruction_Recipes();
sig.plugin.TwosideKeeper.Recipes.Initialize_Artifact_Recipes(); sig.plugin.TwosideKeeper.Recipes.Initialize_Artifact_Recipes();
Bukkit.createWorld(new WorldCreator("ItemCube"));
filesave=getDataFolder(); //Store the location of where our data folder is. filesave=getDataFolder(); //Store the location of where our data folder is.
log("Data folder at "+filesave+".",3); log("Data folder at "+filesave+".",3);
@ -724,8 +727,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
p.sendMessage(EssenceLogger.GenerateReport()); p.sendMessage(EssenceLogger.GenerateReport());
return true; return true;
} else } else
if (cmd.getName().equalsIgnoreCase("")) { if (cmd.getName().equalsIgnoreCase("tp_world")) {
if (args.length==4) {
Player p = (Player)sender;
p.teleport(new Location(Bukkit.getWorld(args[0]),Double.parseDouble(args[1]),Double.parseDouble(args[2]),Double.parseDouble(args[3])));
return true;
} else {
sender.sendMessage("Wrong arguments!");
}
return true;
} }
} else { } else {
//Implement console/admin version later (Let's you check any name's money.) //Implement console/admin version later (Let's you check any name's money.)
@ -1453,10 +1463,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
Location oldBedPos = ev.getPlayer().getBedSpawnLocation(); Location oldBedPos = ev.getPlayer().getBedSpawnLocation();
log(ev.getPlayer()+" Right-clicked bed. Set bed spawn to "+BedPos.toString(),3); log(ev.getPlayer()+" Right-clicked bed. Set bed spawn to "+BedPos.toString(),3);
ev.getPlayer().setBedSpawnLocation(BedPos); ev.getPlayer().setBedSpawnLocation(BedPos);
if (!oldBedPos.equals(BedPos)) { log(oldBedPos.toString()+"::"+ev.getPlayer().getBedSpawnLocation().toString(),5);
if (oldBedPos.getBlockX()!=ev.getPlayer().getBedSpawnLocation().getBlockX() ||
oldBedPos.getBlockY()!=ev.getPlayer().getBedSpawnLocation().getBlockY() ||
oldBedPos.getBlockZ()!=ev.getPlayer().getBedSpawnLocation().getBlockZ())
ev.getPlayer().sendMessage(ChatColor.BLUE+""+ChatColor.ITALIC+"New bed respawn location set."); ev.getPlayer().sendMessage(ChatColor.BLUE+""+ChatColor.ITALIC+"New bed respawn location set.");
} }
}
if (ev.getAction()==Action.RIGHT_CLICK_BLOCK && if (ev.getAction()==Action.RIGHT_CLICK_BLOCK &&
ev.getClickedBlock().getType().toString().contains("RAIL") && ev.getClickedBlock().getType().toString().contains("RAIL") &&
ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() && ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() &&
@ -1466,7 +1478,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev.setCancelled(true); //Do not place minecarts on rails -.- ev.setCancelled(true); //Do not place minecarts on rails -.-
ev.getPlayer().updateInventory(); ev.getPlayer().updateInventory();
} }
if (ev.getAction()==Action.RIGHT_CLICK_AIR || (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_AIR) || (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK)) { if (ev.getAction()==Action.RIGHT_CLICK_AIR || (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_AIR) || (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK && !GenericFunctions.isDumpableContainer(ev.getClickedBlock().getType()))) {
if (ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() && if (ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() &&
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasLore() && ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasLore() &&
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().size()==4 && ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().size()==4 &&
@ -1487,9 +1499,33 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
openItemCubeInventory(newinv.getTopInventory(),newinv); openItemCubeInventory(newinv.getTopInventory(),newinv);
ev.getPlayer().playSound(ev.getPlayer().getLocation(), Sound.BLOCK_CHEST_OPEN, 1.0f, 1.0f); ev.getPlayer().playSound(ev.getPlayer().getLocation(), Sound.BLOCK_CHEST_OPEN, 1.0f, 1.0f);
} else { } else {
ItemCube.displayErrorMessage(ev.getPlayer()); //ItemCube.displayErrorMessage(ev.getPlayer());
ev.getPlayer().openInventory(ItemCube.getViewingItemCubeInventory(itemcube_id, ev.getPlayer()));
PlayerStructure pd = (PlayerStructure) playerdata.get(ev.getPlayer().getUniqueId());
pd.isViewingItemCube=true;
ev.getPlayer().playSound(ev.getPlayer().getLocation(), Sound.BLOCK_CHEST_OPEN, 1.0f, 1.0f);
} }
} }
} else
if (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK && !GenericFunctions.isDumpableContainer(ev.getClickedBlock().getType())) {
//This is an attempt to insert an item cube into a container. See what item cube we're holding.
ev.setCancelled(true);
if (ev.getPlayer().getInventory().getItemInMainHand().hasItemMeta() &&
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasLore() &&
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().size()==4 &&
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().get(3).contains(ChatColor.DARK_PURPLE+"ID#")) {
int itemcube_id=Integer.parseInt(ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().get(3).split("#")[1]);
int size=0;
if (ev.getPlayer().getInventory().getItemInMainHand().getType()==Material.CHEST) {
size=9;
} else {
size=27;
}
//Now that we have the item cube. Dump whatever contents we can into the container.
//Get the inventory of the chest we are inserting into.
//Chest c = (Chest)ev.getClickedBlock().getState();
}
} }
if (b!=null && (b.getType() == Material.SIGN || if (b!=null && (b.getType() == Material.SIGN ||
b.getType() == Material.SIGN_POST || b.getType() == Material.SIGN_POST ||
@ -1501,6 +1537,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (b.getType()==Material.WALL_SIGN && if (b.getType()==Material.WALL_SIGN &&
!TwosideShops.IsPlayerUsingTerminal(player)) { //Shop signs can only be wall signs. !TwosideShops.IsPlayerUsingTerminal(player)) { //Shop signs can only be wall signs.
log("This is a wall sign.",5); log("This is a wall sign.",5);
//Make sure it is on a chest. Or trapped chest.
org.bukkit.material.Sign s1 = (org.bukkit.material.Sign)(b.getState().getData());
Block chest = b.getRelative(s1.getAttachedFace());
if (chest.getType()==Material.CHEST ||
chest.getType()==Material.TRAPPED_CHEST) {
if (s.getLine(0).equalsIgnoreCase("shop")) { if (s.getLine(0).equalsIgnoreCase("shop")) {
log("This is a shop sign.",5); log("This is a shop sign.",5);
//Create a new shop. //Create a new shop.
@ -1586,6 +1627,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
} }
} }
}
//Determine if this is a bank sign. //Determine if this is a bank sign.
if (s.getLine(0).equalsIgnoreCase(ChatColor.AQUA+"-- BANK --")) { if (s.getLine(0).equalsIgnoreCase(ChatColor.AQUA+"-- BANK --")) {
//This is indeed a bank sign. Now figure out which one. //This is indeed a bank sign. Now figure out which one.
@ -1834,6 +1876,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
public void onInventoryClose(InventoryCloseEvent ev) { public void onInventoryClose(InventoryCloseEvent ev) {
if (ev.getPlayer() instanceof Player) { if (ev.getPlayer() instanceof Player) {
Player p = (Player)ev.getPlayer(); Player p = (Player)ev.getPlayer();
//log("Location of inventory: "+ev.getInventory().getLocation().toString(),2);
if (DeathManager.deathStructureExists(p) && ev.getInventory().getTitle().contains("Death Loot")) { if (DeathManager.deathStructureExists(p) && ev.getInventory().getTitle().contains("Death Loot")) {
Location deathloc = DeathManager.getDeathStructure(p).deathloc; Location deathloc = DeathManager.getDeathStructure(p).deathloc;
//Whatever is left drops at the death location. //Whatever is left drops at the death location.
@ -2199,7 +2242,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
CubeType cubetype = CubeType.NORMAL; CubeType cubetype = CubeType.NORMAL;
//This is an Item Cube. //This is an Item Cube.
ev.setCancelled(true); ev.setCancelled(true);
ev.setResult(Result.DENY); //ev.setResult(Result.DENY);
int size; int size;
if (ev.getCurrentItem().getType()==Material.CHEST) { if (ev.getCurrentItem().getType()==Material.CHEST) {
@ -2214,6 +2257,20 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
} }
int clicked_size;
if (ev.getCurrentItem().getType()==Material.CHEST) {
clicked_size=9;
cubetype=CubeType.NORMAL;
} else {
clicked_size=27;
if (ev.getCurrentItem().getType()==Material.STORAGE_MINECART) {
cubetype=CubeType.LARGE;
} else {
cubetype=CubeType.ENDER;
}
}
//See if we're looking at an Item Cube inventory already. //See if we're looking at an Item Cube inventory already.
if (((PlayerStructure)playerdata.get(ev.getWhoClicked().getUniqueId())).isViewingItemCube && ev.getInventory().getTitle().contains("Item Cube")) { if (((PlayerStructure)playerdata.get(ev.getWhoClicked().getUniqueId())).isViewingItemCube && ev.getInventory().getTitle().contains("Item Cube")) {
//Check to see what the Item Cube ID is. //Check to see what the Item Cube ID is.
@ -2253,234 +2310,54 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
else else
//Make sure we are not already inside the cube we're placing into. //Make sure we are not already inside the cube we're placing into.
if (!ItemCube.isSomeoneViewingItemCube(idnumb,(Player)ev.getWhoClicked())) {
if (idnumb!=itemcubeid) { if (idnumb!=itemcubeid) {
log(idnumb+" does not match "+itemcubeid,5); //See if someone has this inventory opened already.
//Try to insert item inside this item cube. Inventory virtualinventory = null;
List<ItemStack> virtual_inventory = itemCube_loadConfig(idnumb); virtualinventory = ItemCube.getViewingItemCubeInventory(idnumb, (Player)ev.getWhoClicked());
boolean stack_available=false; if (virtualinventory==null) {
//Now we will see if there are any places to stack blocks on. virtualinventory = Bukkit.createInventory((Player)ev.getWhoClicked(), clicked_size);
int quantity=ev.getCursor().getAmount(); log("Inventory size is "+clicked_size,5);
log("Amount held: "+quantity,5); List<ItemStack> items = itemCube_loadConfig(idnumb);
for (int i=0;i<size;i++) { for (int i=0;i<virtualinventory.getSize();i++) {
if (virtual_inventory.get(i).isSimilar(ev.getCursor()) && if (items.get(i)!=null) {
virtual_inventory.get(i).getMaxStackSize()>virtual_inventory.get(i).getAmount()) { virtualinventory.setItem(i, items.get(i));
log("Entered Loop",5); log("Load up with "+items.get(i).toString(),5);
//This is the same, and we have room to throw some in.
int space=virtual_inventory.get(i).getMaxStackSize()-virtual_inventory.get(i).getAmount(); //How much space is here.
log("There is space for "+space+" blocks.",5);
if (space>=quantity) {
//We are done, because we can store everything.
virtual_inventory.get(i).setAmount(virtual_inventory.get(i).getAmount()+quantity);
quantity=0;
final int ider = idnumb;
final List<ItemStack> items = virtual_inventory;
final CubeType type = cubetype;
/*//OLD ENDER ITEM CUBE CODE.
if (itemCube_getCubeType(idnumb)==CubeType.ENDER) {
log("This is an Ender Item Cube transfer click.",5);
//We are going to look at all players and see if they have this inventory open.
final int id = idnumb;
for (int j=0;j<Bukkit.getServer().getOnlinePlayers().toArray().length;j++) {
//Make sure the player we are checking is not ourself.
final Player p = (Player)Bukkit.getServer().getOnlinePlayers().toArray()[j];
if (p.getOpenInventory()!=null &&
!p.getName().equalsIgnoreCase(ev.getWhoClicked().getName()) &&
p.getOpenInventory().getTitle().contentEquals("Item Cube #"+idnumb)) {
p.closeInventory();
} }
} }
ItemCube.addToViewersOfItemCube(idnumb,ev.getCursor(),(Player)ev.getWhoClicked());
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
itemCube_saveConfig(ider,items,type);
} }
},2); HashMap result = virtualinventory.addItem(ev.getCursor());
} else {*/ log("Clicked ID number "+idnumb,5);
itemCube_saveConfig(ider,items,type); //Set whatever's left back to the cursor.
//} if (result.size()>0) {
ev.setCursor(new ItemStack(Material.AIR)); ev.setCursor((ItemStack)result.get(0));
break;
} else { } else {
//We still have more. Store what we can.
quantity-=space;
log("Still have "+quantity+" blocks left.",5);
virtual_inventory.get(i).setAmount(virtual_inventory.get(i).getMaxStackSize());
itemCube_saveConfig(idnumb,virtual_inventory,cubetype);
}
}
}
if (quantity>0) {
//We can't fit this anywhere else. So we put the rest back to the cursor.
ev.getCursor().setAmount(quantity);
} else {
stack_available=true;
}
if (stack_available) {
ev.setCursor(new ItemStack(Material.AIR)); ev.setCursor(new ItemStack(Material.AIR));
itemCube_saveConfig(idnumb,virtual_inventory,cubetype); log("Cursor should be air.",5);
} else {
//Look for an empty space.
for (int i=0;i<size;i++) {
if (virtual_inventory.get(i).getType()==Material.AIR) {
//WE have found an empty space. Throw it in there.
virtual_inventory.set(i, ev.getCursor());
log("Set item slot "+i+" to "+ev.getCursor().toString(),5);
ev.setCursor(new ItemStack(Material.AIR));
final int ider = idnumb;
final List<ItemStack> items = virtual_inventory;
final CubeType type = cubetype;
/*//OLD ENDER ITEM CUBE CODE
* if (itemCube_getCubeType(idnumb)==CubeType.ENDER) {
log("This is an Ender Item Cube transfer click.",5);
//We are going to look at all players and see if they have this inventory open.
final int id = idnumb;
for (int j=0;j<Bukkit.getServer().getOnlinePlayers().toArray().length;j++) {
//Make sure the player we are checking is not ourself.
final Player p = (Player)Bukkit.getServer().getOnlinePlayers().toArray()[j];
if (p.getOpenInventory()!=null &&
!p.getName().equalsIgnoreCase(ev.getWhoClicked().getName()) &&
p.getOpenInventory().getTitle().contentEquals("Item Cube #"+idnumb)) {
p.closeInventory();
}
}
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
itemCube_saveConfig(ider,items,type);
}
},2);
break;
} else {*/
itemCube_saveConfig(ider,items,type);
//}
}
} }
List<ItemStack> itemslist = new ArrayList<ItemStack>();
for (int i=0;i<virtualinventory.getSize();i++) {
itemslist.add(virtualinventory.getItem(i));
} }
itemCube_saveConfig(idnumb,itemslist);
} else { } else {
//Well, we're already in here, I don't know why they didn't just use the //Well, we're already in here, I don't know why they didn't just use the
//minecraft inventory management system. Now I have to do math... //minecraft inventory management system. Now I have to do math...
//Add it to the inventory being viewed.
HashMap result = ev.getWhoClicked().getOpenInventory().getTopInventory().addItem(ev.getCursor());
//Add it to everyone viewing the cube.
//ItemCube.addToViewersOfItemCube(idnumb, ev.getCursor(), (Player)ev.getWhoClicked());
boolean stack_available=false; if (result.size()>0) {
ev.setCursor((ItemStack)result.get(0));
//Now we will see if there are any places to stack blocks on.
int quantity=ev.getCursor().getAmount();
log("Amount held: "+quantity,5);
for (int i=0;i<size;i++) {
if (ev.getView().getTopInventory().getItem(i)!=null &&
ev.getView().getTopInventory().getItem(i).isSimilar(ev.getCursor()) &&
ev.getView().getTopInventory().getItem(i).getMaxStackSize()>ev.getView().getTopInventory().getItem(i).getAmount()) {
log("Entered Loop",5);
//This is the same, and we have room to throw some in.
int space=ev.getView().getTopInventory().getItem(i).getMaxStackSize()-ev.getView().getTopInventory().getItem(i).getAmount(); //How much space is here.
log("There is space for "+space+" blocks.",5);
if (space>=quantity) {
//We are done, because we can store everything.
ev.getView().getTopInventory().getItem(i).setAmount(ev.getView().getTopInventory().getItem(i).getAmount()+quantity);
quantity=0;
List<ItemStack> itemlist = new ArrayList<ItemStack>();
for (int j=0;j<ev.getView().getTopInventory().getSize();j++) {
itemlist.add(ev.getView().getTopInventory().getItem(j));
}
final int ider = idnumb;
final List<ItemStack> items = itemlist;
final CubeType type = cubetype;
/* OLD ENDER ITEM CUBE CODE.
if (itemCube_getCubeType(idnumb)==CubeType.ENDER) {
log("This is an Ender Item Cube transfer click.",5);
//We are going to look at all players and see if they have this inventory open.
final int id = idnumb;
for (int j=0;j<Bukkit.getServer().getOnlinePlayers().toArray().length;j++) {
//Make sure the player we are checking is not ourself.
final Player p = (Player)Bukkit.getServer().getOnlinePlayers().toArray()[j];
if (p.getOpenInventory()!=null &&
!p.getName().equalsIgnoreCase(ev.getWhoClicked().getName()) &&
p.getOpenInventory().getTitle().contentEquals("Item Cube #"+idnumb)) {
p.closeInventory();
}
}
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
itemCube_saveConfig(ider,items,type);
}
},2);
} else { } else {
itemCube_saveConfig(ider,items,type);
}*/
ev.setCursor(new ItemStack(Material.AIR)); ev.setCursor(new ItemStack(Material.AIR));
break;
} else {
//We still have more. Store what we can.
quantity-=space;
log("Still have "+quantity+" blocks left.",5);
ev.getView().getTopInventory().getItem(i).setAmount(ev.getView().getTopInventory().getItem(i).getMaxStackSize());
List<ItemStack> itemlist = new ArrayList<ItemStack>();
for (int j=0;j<ev.getView().getTopInventory().getSize();j++) {
itemlist.add(ev.getView().getTopInventory().getItem(j));
} }
/* OLD ENDER ITEM CUBE CODE List<ItemStack> itemslist = new ArrayList<ItemStack>();
if (itemCube_getCubeType(idnumb)==CubeType.ENDER) { for (int i=0;i<ev.getWhoClicked().getOpenInventory().getTopInventory().getSize();i++) {
log("This is an Ender Item Cube transfer click.",5); itemslist.add(ev.getWhoClicked().getOpenInventory().getTopInventory().getItem(i));
//We are going to look at all players and see if they have this inventory open.
final int id = idnumb;
for (int j=0;j<Bukkit.getServer().getOnlinePlayers().toArray().length;j++) {
//Make sure the player we are checking is not ourself.
final Player p = (Player)Bukkit.getServer().getOnlinePlayers().toArray()[j];
if (p.getOpenInventory()!=null &&
!p.getName().equalsIgnoreCase(ev.getWhoClicked().getName()) &&
p.getOpenInventory().getTitle().contentEquals("Item Cube #"+idnumb)) {
p.closeInventory();
} }
} itemCube_saveConfig(idnumb,itemslist);
final int ider = idnumb;
final List<ItemStack> items = itemlist;
final CubeType type = cubetype;
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
itemCube_saveConfig(ider,items,type);
}
},2);
}*/
}
}
}
if (quantity>0) {
//We can't fit this anywhere else. So we put the rest back to the cursor.
ev.getCursor().setAmount(quantity);
} else {
stack_available=true;
}
if (stack_available) {
ev.setCursor(new ItemStack(Material.AIR));
} else {
for (int i=0;i<size;i++) {
if (ev.getView().getTopInventory().getItem(i)==null || ev.getView().getTopInventory().getItem(i).getType()==Material.AIR) {
//WE have found an empty space. Throw it in there.
ev.getView().getTopInventory().setItem(i, ev.getCursor());
ev.setCursor(new ItemStack(Material.AIR));
break;
}
}
}
}
} else {
ev.setCancelled(true);
ev.setCursor(ev.getCursor());
ItemCube.displayErrorMessage((Player)ev.getWhoClicked());
} }
} }
} }
@ -2523,13 +2400,16 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev.setCancelled(true); ev.setCancelled(true);
ev.setResult(Result.DENY); ev.setResult(Result.DENY);
InventoryView newinv = p.openInventory(Bukkit.getServer().createInventory(p, inventory_size, "Item Cube #"+idnumb)); InventoryView newinv = p.openInventory(Bukkit.getServer().createInventory(p, inventory_size, "Item Cube #"+idnumb));
openItemCubeInventory(newinv.getTopInventory(),newinv); openItemCubeInventory(p.getOpenInventory().getTopInventory(),newinv);
pd.isViewingItemCube=true; pd.isViewingItemCube=true;
p.playSound(p.getLocation(),Sound.BLOCK_CHEST_OPEN,1.0f,1.0f); p.playSound(p.getLocation(),Sound.BLOCK_CHEST_OPEN,1.0f,1.0f);
} else { } else {
ev.setCancelled(true); ev.setCancelled(true);
ev.setResult(Result.DENY); ev.setResult(Result.DENY);
ItemCube.displayErrorMessage(p); //ItemCube.displayErrorMessage(p);
p.openInventory(ItemCube.getViewingItemCubeInventory(idnumb, p));
pd.isViewingItemCube=true;
p.playSound(p.getLocation(), Sound.BLOCK_CHEST_OPEN, 1.0f, 1.0f);
} }
//} //}
} }
@ -4293,7 +4173,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} else { } else {
double money = workable.getDouble("money"); double money = workable.getDouble("money");
money+=amt; money+=amt;
workable.set("money", money); workable.set("money", money);