Sneak + Right-click with an Item Cube in hand will empty the items
inside into the chest. Great for storing away your items!
This commit is contained in:
parent
43237b7a04
commit
e670b07554
Binary file not shown.
@ -22,6 +22,7 @@ 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;
|
||||||
|
import org.bukkit.block.DoubleChest;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -1507,13 +1508,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} 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.
|
//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() &&
|
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 &&
|
||||||
ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().get(3).contains(ChatColor.DARK_PURPLE+"ID#")) {
|
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 itemcube_id=Integer.parseInt(ev.getPlayer().getInventory().getItemInMainHand().getItemMeta().getLore().get(3).split("#")[1]);
|
||||||
int size=0;
|
int size=0;
|
||||||
if (ev.getPlayer().getInventory().getItemInMainHand().getType()==Material.CHEST) {
|
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.
|
//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.
|
//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 ||
|
if (b!=null && (b.getType() == Material.SIGN ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user