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 }