001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005
006 public class Slot
007 {
008 /** The index of the slot in the inventory. */
009 private final int slotIndex;
010
011 /** The inventory we want to extract a slot from. */
012 public final IInventory inventory;
013
014 /** the id of the slot(also the index in the inventory arraylist) */
015 public int slotNumber;
016
017 /** display position of the inventory slot on the screen x axis */
018 public int xDisplayPosition;
019
020 /** display position of the inventory slot on the screen y axis */
021 public int yDisplayPosition;
022
023 public Slot(IInventory par1IInventory, int par2, int par3, int par4)
024 {
025 this.inventory = par1IInventory;
026 this.slotIndex = par2;
027 this.xDisplayPosition = par3;
028 this.yDisplayPosition = par4;
029 }
030
031 /**
032 * if par2 has more items than par1, onCrafting(item,countIncrease) is called
033 */
034 public void onSlotChange(ItemStack par1ItemStack, ItemStack par2ItemStack)
035 {
036 if (par1ItemStack != null && par2ItemStack != null)
037 {
038 if (par1ItemStack.itemID == par2ItemStack.itemID)
039 {
040 int var3 = par2ItemStack.stackSize - par1ItemStack.stackSize;
041
042 if (var3 > 0)
043 {
044 this.onCrafting(par1ItemStack, var3);
045 }
046 }
047 }
048 }
049
050 /**
051 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
052 * internal count then calls onCrafting(item).
053 */
054 protected void onCrafting(ItemStack par1ItemStack, int par2) {}
055
056 /**
057 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
058 */
059 protected void onCrafting(ItemStack par1ItemStack) {}
060
061 public void func_82870_a(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
062 {
063 this.onSlotChanged();
064 }
065
066 /**
067 * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
068 */
069 public boolean isItemValid(ItemStack par1ItemStack)
070 {
071 return true;
072 }
073
074 /**
075 * Helper fnct to get the stack in the slot.
076 */
077 public ItemStack getStack()
078 {
079 return this.inventory.getStackInSlot(this.slotIndex);
080 }
081
082 /**
083 * Returns if this slot contains a stack.
084 */
085 public boolean getHasStack()
086 {
087 return this.getStack() != null;
088 }
089
090 /**
091 * Helper method to put a stack in the slot.
092 */
093 public void putStack(ItemStack par1ItemStack)
094 {
095 this.inventory.setInventorySlotContents(this.slotIndex, par1ItemStack);
096 this.onSlotChanged();
097 }
098
099 /**
100 * Called when the stack in a Slot changes
101 */
102 public void onSlotChanged()
103 {
104 this.inventory.onInventoryChanged();
105 }
106
107 /**
108 * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the case
109 * of armor slots)
110 */
111 public int getSlotStackLimit()
112 {
113 return this.inventory.getInventoryStackLimit();
114 }
115
116 /**
117 * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
118 * stack.
119 */
120 public ItemStack decrStackSize(int par1)
121 {
122 return this.inventory.decrStackSize(this.slotIndex, par1);
123 }
124
125 /**
126 * returns true if this slot is in par2 of par1
127 */
128 public boolean isSlotInInventory(IInventory par1IInventory, int par2)
129 {
130 return par1IInventory == this.inventory && par2 == this.slotIndex;
131 }
132
133 public boolean func_82869_a(EntityPlayer par1EntityPlayer)
134 {
135 return true;
136 }
137
138 @SideOnly(Side.CLIENT)
139
140 /**
141 * Returns the icon index on items.png that is used as background image of the slot.
142 */
143 public int getBackgroundIconIndex()
144 {
145 return -1;
146 }
147 }