001 package net.minecraft.src;
002
003 import java.util.Iterator;
004 import java.util.List;
005
006 public class InventoryBasic implements IInventory
007 {
008 private String inventoryTitle;
009 private int slotsCount;
010 private ItemStack[] inventoryContents;
011 private List field_70480_d;
012
013 public InventoryBasic(String par1Str, int par2)
014 {
015 this.inventoryTitle = par1Str;
016 this.slotsCount = par2;
017 this.inventoryContents = new ItemStack[par2];
018 }
019
020 /**
021 * Returns the stack in slot i
022 */
023 public ItemStack getStackInSlot(int par1)
024 {
025 return this.inventoryContents[par1];
026 }
027
028 /**
029 * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
030 * new stack.
031 */
032 public ItemStack decrStackSize(int par1, int par2)
033 {
034 if (this.inventoryContents[par1] != null)
035 {
036 ItemStack var3;
037
038 if (this.inventoryContents[par1].stackSize <= par2)
039 {
040 var3 = this.inventoryContents[par1];
041 this.inventoryContents[par1] = null;
042 this.onInventoryChanged();
043 return var3;
044 }
045 else
046 {
047 var3 = this.inventoryContents[par1].splitStack(par2);
048
049 if (this.inventoryContents[par1].stackSize == 0)
050 {
051 this.inventoryContents[par1] = null;
052 }
053
054 this.onInventoryChanged();
055 return var3;
056 }
057 }
058 else
059 {
060 return null;
061 }
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.inventoryContents[par1] != null)
071 {
072 ItemStack var2 = this.inventoryContents[par1];
073 this.inventoryContents[par1] = null;
074 return var2;
075 }
076 else
077 {
078 return null;
079 }
080 }
081
082 /**
083 * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
084 */
085 public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
086 {
087 this.inventoryContents[par1] = par2ItemStack;
088
089 if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
090 {
091 par2ItemStack.stackSize = this.getInventoryStackLimit();
092 }
093
094 this.onInventoryChanged();
095 }
096
097 /**
098 * Returns the number of slots in the inventory.
099 */
100 public int getSizeInventory()
101 {
102 return this.slotsCount;
103 }
104
105 /**
106 * Returns the name of the inventory.
107 */
108 public String getInvName()
109 {
110 return this.inventoryTitle;
111 }
112
113 /**
114 * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
115 * this more of a set than a get?*
116 */
117 public int getInventoryStackLimit()
118 {
119 return 64;
120 }
121
122 /**
123 * Called when an the contents of an Inventory change, usually
124 */
125 public void onInventoryChanged()
126 {
127 if (this.field_70480_d != null)
128 {
129 Iterator var1 = this.field_70480_d.iterator();
130
131 while (var1.hasNext())
132 {
133 IInvBasic var2 = (IInvBasic)var1.next();
134 var2.onInventoryChanged(this);
135 }
136 }
137 }
138
139 /**
140 * Do not make give this method the name canInteractWith because it clashes with Container
141 */
142 public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
143 {
144 return true;
145 }
146
147 public void openChest() {}
148
149 public void closeChest() {}
150 }