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    }