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 }