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 }