Sneak + Right-click with an Item Cube in hand will empty the items

inside into the chest. Great for storing away your items!
dev
sigonasr2 9 years ago
parent 43237b7a04
commit e670b07554
  1. BIN
      TwosideKeeper.jar
  2. 64
      src/sig/plugin/TwosideKeeper/TwosideKeeper.java

Binary file not shown.

@ -22,6 +22,7 @@ import org.bukkit.WorldCreator;
import org.bukkit.attribute.Attribute;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.block.DoubleChest;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -1507,13 +1508,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
} else
if (ev.getPlayer().isSneaking() && ev.getAction()==Action.RIGHT_CLICK_BLOCK && !GenericFunctions.isDumpableContainer(ev.getClickedBlock().getType())) {
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#")) {
ev.setCancelled(true);
ev.getPlayer().updateInventory();
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) {
@ -1524,7 +1527,62 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
//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();
Chest c = (Chest)ev.getClickedBlock().getState();
Inventory chest_inventory = c.getBlockInventory();
if (c.getInventory().getHolder() instanceof DoubleChest) {
chest_inventory = ((DoubleChest)c.getInventory().getHolder()).getInventory();
log("This is a double chest",5);
}
//Get the inventory we are dumping out.
Inventory virtualinventory = ItemCube.getViewingItemCubeInventory(itemcube_id, ev.getPlayer());
if (virtualinventory==null) {
//Then we will make one.
virtualinventory = Bukkit.createInventory(ev.getPlayer(), size);
//Load up this inventory.
List<ItemStack> items = itemCube_loadConfig(itemcube_id);
for (int i=0;i<virtualinventory.getSize();i++) {
if (items.get(i)!=null) {
virtualinventory.setItem(i, items.get(i));
log("Load up with "+items.get(i).toString(),5);
}
}
}
List<ItemStack> save_items = new ArrayList<ItemStack>();
for (int i=0;i<size;i++) {
save_items.add(new ItemStack(Material.AIR));
}
boolean fit=true;
int count=0;
//Now that we have our items. Dump what we can into the chest inventory.
for (int i=0;i<virtualinventory.getSize();i++) {
if (virtualinventory.getItem(i)!=null &&
virtualinventory.getItem(i).getType()!=Material.AIR) {
HashMap result = chest_inventory.addItem(virtualinventory.getItem(i));
if (result.size()>0) {
save_items.set(i,(ItemStack)result.get(0));
fit=false;
log("This item "+(ItemStack)result.get(0)+" (slot "+i+") could not fit!",4);
} else {
count++;
}
}
}
//The rest of the hashmap goes back in the original inventory.
if (!fit) {
ev.getPlayer().sendMessage(ChatColor.RED+"Attempted to store your items, not all of them could fit!"+ChatColor.WHITE+" Stored "+ChatColor.AQUA+count+ChatColor.WHITE+" items.");
} else {
ev.getPlayer().sendMessage("Stored "+ChatColor.AQUA+count+ChatColor.WHITE+" items inside the chest.");
}
virtualinventory.clear();
//Save the Item Cube.
itemCube_saveConfig(itemcube_id,save_items);
}
}
if (b!=null && (b.getType() == Material.SIGN ||

Loading…
Cancel
Save