    001    package net.minecraft.inventory;
    002
    003    import net.minecraft.entity.player.EntityPlayer;
    004    import net.minecraft.item.ItemStack;
    005
    006    public class InventoryLargeChest implements IInventory
    007    {
    008        /** Name of the chest. */
    009        private String name;
    010
    011        /** Inventory object corresponding to double chest upper part */
    012        private IInventory upperChest;
    013
    014        /** Inventory object corresponding to double chest lower part */
    015        private IInventory lowerChest;
    016
    017        public InventoryLargeChest(String par1Str, IInventory par2IInventory, IInventory par3IInventory)
    018        {
    019            this.name = par1Str;
    020
    021            if (par2IInventory == null)
    022            {
    023                par2IInventory = par3IInventory;
    024            }
    025
    026            if (par3IInventory == null)
    027            {
    028                par3IInventory = par2IInventory;
    029            }
    030
    031            this.upperChest = par2IInventory;
    032            this.lowerChest = par3IInventory;
    033        }
    034
    035        /**
    036         * Returns the number of slots in the inventory.
    037         */
    038        public int getSizeInventory()
    039        {
    040            return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory();
    041        }
    042
    043        public boolean func_90010_a(IInventory par1IInventory)
    044        {
    045            return this.upperChest == par1IInventory || this.lowerChest == par1IInventory;
    046        }
    047
    048        /**
    049         * Returns the name of the inventory.
    050         */
    051        public String getInvName()
    052        {
    053            return this.name;
    054        }
    055
    056        /**
    057         * Returns the stack in slot i
    058         */
    059        public ItemStack getStackInSlot(int par1)
    060        {
    061            return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(par1);
    062        }
    063
    064        /**
    065         * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
    066         * new stack.
    067         */
    068        public ItemStack decrStackSize(int par1, int par2)
    069        {
    070            return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(par1 - this.upperChest.getSizeInventory(), par2) : this.upperChest.decrStackSize(par1, par2);
    071        }
    072
    073        /**
    074         * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -
    075         * like when you close a workbench GUI.
    076         */
    077        public ItemStack getStackInSlotOnClosing(int par1)
    078        {
    079            return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlotOnClosing(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlotOnClosing(par1);
    080        }
    081
    082        /**
    083         * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
    084         */
    085        public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
    086        {
    087            if (par1 >= this.upperChest.getSizeInventory())
    088            {
    089                this.lowerChest.setInventorySlotContents(par1 - this.upperChest.getSizeInventory(), par2ItemStack);
    090            }
    091            else
    092            {
    093                this.upperChest.setInventorySlotContents(par1, par2ItemStack);
    094            }
    095        }
    096
    097        /**
    098         * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
    099         * this more of a set than a get?*
    100         */
    101        public int getInventoryStackLimit()
    102        {
    103            return this.upperChest.getInventoryStackLimit();
    104        }
    105
    106        /**
    107         * Called when an the contents of an Inventory change, usually
    108         */
    109        public void onInventoryChanged()
    110        {
    111            this.upperChest.onInventoryChanged();
    112            this.lowerChest.onInventoryChanged();
    113        }
    114
    115        /**
    116         * Do not make give this method the name canInteractWith because it clashes with Container
    117         */
    118        public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    119        {
    120            return this.upperChest.isUseableByPlayer(par1EntityPlayer) && this.lowerChest.isUseableByPlayer(par1EntityPlayer);
    121        }
    122
    123        public void openChest()
    124        {
    125            this.upperChest.openChest();
    126            this.lowerChest.openChest();
    127        }
    128
    129        public void closeChest()
    130        {
    131            this.upperChest.closeChest();
    132            this.lowerChest.closeChest();
    133        }
    134    }