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