    001    package net.minecraft.src;
    002
    003    import java.util.Iterator;
    004    import java.util.List;
    005
    006    public class InventoryBasic implements IInventory
    007    {
    008        private String inventoryTitle;
    009        private int slotsCount;
    010        private ItemStack[] inventoryContents;
    011        private List field_70480_d;
    012
    013        public InventoryBasic(String par1Str, int par2)
    014        {
    015            this.inventoryTitle = par1Str;
    016            this.slotsCount = par2;
    017            this.inventoryContents = new ItemStack[par2];
    018        }
    019
    020        /**
    021         * Returns the stack in slot i
    022         */
    023        public ItemStack getStackInSlot(int par1)
    024        {
    025            return this.inventoryContents[par1];
    026        }
    027
    028        /**
    029         * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
    030         * new stack.
    031         */
    032        public ItemStack decrStackSize(int par1, int par2)
    033        {
    034            if (this.inventoryContents[par1] != null)
    035            {
    036                ItemStack var3;
    037
    038                if (this.inventoryContents[par1].stackSize <= par2)
    039                {
    040                    var3 = this.inventoryContents[par1];
    041                    this.inventoryContents[par1] = null;
    042                    this.onInventoryChanged();
    043                    return var3;
    044                }
    045                else
    046                {
    047                    var3 = this.inventoryContents[par1].splitStack(par2);
    048
    049                    if (this.inventoryContents[par1].stackSize == 0)
    050                    {
    051                        this.inventoryContents[par1] = null;
    052                    }
    053
    054                    this.onInventoryChanged();
    055                    return var3;
    056                }
    057            }
    058            else
    059            {
    060                return null;
    061            }
    062        }
    063
    064        /**
    065         * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -
    066         * like when you close a workbench GUI.
    067         */
    068        public ItemStack getStackInSlotOnClosing(int par1)
    069        {
    070            if (this.inventoryContents[par1] != null)
    071            {
    072                ItemStack var2 = this.inventoryContents[par1];
    073                this.inventoryContents[par1] = null;
    074                return var2;
    075            }
    076            else
    077            {
    078                return null;
    079            }
    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            this.inventoryContents[par1] = par2ItemStack;
    088
    089            if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
    090            {
    091                par2ItemStack.stackSize = this.getInventoryStackLimit();
    092            }
    093
    094            this.onInventoryChanged();
    095        }
    096
    097        /**
    098         * Returns the number of slots in the inventory.
    099         */
    100        public int getSizeInventory()
    101        {
    102            return this.slotsCount;
    103        }
    104
    105        /**
    106         * Returns the name of the inventory.
    107         */
    108        public String getInvName()
    109        {
    110            return this.inventoryTitle;
    111        }
    112
    113        /**
    114         * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
    115         * this more of a set than a get?*
    116         */
    117        public int getInventoryStackLimit()
    118        {
    119            return 64;
    120        }
    121
    122        /**
    123         * Called when an the contents of an Inventory change, usually
    124         */
    125        public void onInventoryChanged()
    126        {
    127            if (this.field_70480_d != null)
    128            {
    129                Iterator var1 = this.field_70480_d.iterator();
    130
    131                while (var1.hasNext())
    132                {
    133                    IInvBasic var2 = (IInvBasic)var1.next();
    134                    var2.onInventoryChanged(this);
    135                }
    136            }
    137        }
    138
    139        /**
    140         * Do not make give this method the name canInteractWith because it clashes with Container
    141         */
    142        public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    143        {
    144            return true;
    145        }
    146
    147        public void openChest() {}
    148
    149        public void closeChest() {}
    150    }