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