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