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 /** 062 * Called when the player picks up an item from an inventory slot 063 */ 064 public void onPickupFromSlot(ItemStack par1ItemStack) 065 { 066 this.onSlotChanged(); 067 } 068 069 /** 070 * Check if the stack is a valid item for this slot. Always true beside for the armor slots. 071 */ 072 public boolean isItemValid(ItemStack par1ItemStack) 073 { 074 return true; 075 } 076 077 /** 078 * Helper fnct to get the stack in the slot. 079 */ 080 public ItemStack getStack() 081 { 082 return this.inventory.getStackInSlot(this.slotIndex); 083 } 084 085 /** 086 * Returns if this slot contains a stack. 087 */ 088 public boolean getHasStack() 089 { 090 return this.getStack() != null; 091 } 092 093 /** 094 * Helper method to put a stack in the slot. 095 */ 096 public void putStack(ItemStack par1ItemStack) 097 { 098 this.inventory.setInventorySlotContents(this.slotIndex, par1ItemStack); 099 this.onSlotChanged(); 100 } 101 102 /** 103 * Called when the stack in a Slot changes 104 */ 105 public void onSlotChanged() 106 { 107 this.inventory.onInventoryChanged(); 108 } 109 110 /** 111 * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the case 112 * of armor slots) 113 */ 114 public int getSlotStackLimit() 115 { 116 return this.inventory.getInventoryStackLimit(); 117 } 118 119 /** 120 * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new 121 * stack. 122 */ 123 public ItemStack decrStackSize(int par1) 124 { 125 return this.inventory.decrStackSize(this.slotIndex, par1); 126 } 127 128 /** 129 * returns true if this slot is in par2 of par1 130 */ 131 public boolean isSlotInInventory(IInventory par1IInventory, int par2) 132 { 133 return par1IInventory == this.inventory && par2 == this.slotIndex; 134 } 135 136 @SideOnly(Side.CLIENT) 137 138 /** 139 * Returns the icon index on items.png that is used as background image of the slot. 140 */ 141 public int getBackgroundIconIndex() 142 { 143 return -1; 144 } 145 }