package net.minecraft.inventory; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public class Slot { /** The index of the slot in the inventory. */ private final int slotIndex; /** The inventory we want to extract a slot from. */ public final IInventory inventory; /** the id of the slot(also the index in the inventory arraylist) */ public int slotNumber; /** display position of the inventory slot on the screen x axis */ public int xDisplayPosition; /** display position of the inventory slot on the screen y axis */ public int yDisplayPosition; /** Position within background texture file, normally -1 which causes no background to be drawn. */ protected int backgroundIconIndex = -1; /** Background texture file assigned to this slot, if any. Vanilla "/gui/items.png" is used if this is null. */ protected String texture = "/gui/items.png"; public Slot(IInventory par1IInventory, int par2, int par3, int par4) { this.inventory = par1IInventory; this.slotIndex = par2; this.xDisplayPosition = par3; this.yDisplayPosition = par4; } /** * if par2 has more items than par1, onCrafting(item,countIncrease) is called */ public void onSlotChange(ItemStack par1ItemStack, ItemStack par2ItemStack) { if (par1ItemStack != null && par2ItemStack != null) { if (par1ItemStack.itemID == par2ItemStack.itemID) { int var3 = par2ItemStack.stackSize - par1ItemStack.stackSize; if (var3 > 0) { this.onCrafting(par1ItemStack, var3); } } } } /** * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an * internal count then calls onCrafting(item). */ protected void onCrafting(ItemStack par1ItemStack, int par2) {} /** * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. */ protected void onCrafting(ItemStack par1ItemStack) {} public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack) { this.onSlotChanged(); } /** * Check if the stack is a valid item for this slot. Always true beside for the armor slots. */ public boolean isItemValid(ItemStack par1ItemStack) { return true; } /** * Helper fnct to get the stack in the slot. */ public ItemStack getStack() { return this.inventory.getStackInSlot(this.slotIndex); } /** * Returns if this slot contains a stack. */ public boolean getHasStack() { return this.getStack() != null; } /** * Helper method to put a stack in the slot. */ public void putStack(ItemStack par1ItemStack) { this.inventory.setInventorySlotContents(this.slotIndex, par1ItemStack); this.onSlotChanged(); } /** * Called when the stack in a Slot changes */ public void onSlotChanged() { this.inventory.onInventoryChanged(); } /** * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the case * of armor slots) */ public int getSlotStackLimit() { return this.inventory.getInventoryStackLimit(); } /** * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new * stack. */ public ItemStack decrStackSize(int par1) { return this.inventory.decrStackSize(this.slotIndex, par1); } /** * returns true if this slot is in par2 of par1 */ public boolean isSlotInInventory(IInventory par1IInventory, int par2) { return par1IInventory == this.inventory && par2 == this.slotIndex; } /** * Return whether this slot's stack can be taken from this slot. */ public boolean canTakeStack(EntityPlayer par1EntityPlayer) { return true; } @SideOnly(Side.CLIENT) /** * Returns the icon index on items.png that is used as background image of the slot. */ public int getBackgroundIconIndex() { return backgroundIconIndex; } /** * Gets the path of the texture file to use for the background image of this slot when drawing the GUI. * @return String: The texture file that will be used in GuiContainer.drawSlotInventory for the slot background. */ public String getBackgroundIconTexture() { return (texture == null ? "/gui/items.png" : texture); } /** * Sets which icon index to use as the background image of the slot when it's empty. * @param iconIndex int: The index into the texture file, 0-255, or -1 for no background. */ public void setBackgroundIconIndex(int iconIndex) { backgroundIconIndex = iconIndex; } /** * Sets the texture file to use for the background image of the slot when it's empty. * @param textureFilename String: Path of texture file to use, or null to use "/gui/items.png" */ public void setBackgroundIconTexture(String textureFilename) { texture = textureFilename; } /** * Retrieves the index in the inventory for this slot, this value should typically not * be used, but can be useful for some occasions. * * @return Index in associated inventory for this slot. */ public int getSlotIndex() { return slotIndex; } }