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