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