001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.registry.GameRegistry;
004
005 public class SlotFurnace extends Slot
006 {
007 /** The player that is using the GUI where this slot resides. */
008 private EntityPlayer thePlayer;
009 private int field_75228_b;
010
011 public SlotFurnace(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5)
012 {
013 super(par2IInventory, par3, par4, par5);
014 this.thePlayer = par1EntityPlayer;
015 }
016
017 /**
018 * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
019 */
020 public boolean isItemValid(ItemStack par1ItemStack)
021 {
022 return false;
023 }
024
025 /**
026 * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
027 * stack.
028 */
029 public ItemStack decrStackSize(int par1)
030 {
031 if (this.getHasStack())
032 {
033 this.field_75228_b += Math.min(par1, this.getStack().stackSize);
034 }
035
036 return super.decrStackSize(par1);
037 }
038
039 /**
040 * Called when the player picks up an item from an inventory slot
041 */
042 public void onPickupFromSlot(ItemStack par1ItemStack)
043 {
044 this.onCrafting(par1ItemStack);
045 super.onPickupFromSlot(par1ItemStack);
046 }
047
048 /**
049 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
050 * internal count then calls onCrafting(item).
051 */
052 protected void onCrafting(ItemStack par1ItemStack, int par2)
053 {
054 this.field_75228_b += par2;
055 this.onCrafting(par1ItemStack);
056 }
057
058 /**
059 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
060 */
061 protected void onCrafting(ItemStack par1ItemStack)
062 {
063 par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b);
064
065 if (!this.thePlayer.worldObj.isRemote)
066 {
067 int var2 = this.field_75228_b;
068 float var3 = FurnaceRecipes.smelting().getExperience(par1ItemStack.itemID);
069 int var4;
070
071 if (var3 == 0.0F)
072 {
073 var2 = 0;
074 }
075 else if (var3 < 1.0F)
076 {
077 var4 = MathHelper.floor_float((float)var2 * var3);
078
079 if (var4 < MathHelper.ceiling_float_int((float)var2 * var3) && (float)Math.random() < (float)var2 * var3 - (float)var4)
080 {
081 ++var4;
082 }
083
084 var2 = var4;
085 }
086
087 while (var2 > 0)
088 {
089 var4 = EntityXPOrb.getXPSplit(var2);
090 var2 -= var4;
091 this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, var4));
092 }
093 }
094
095
096 this.field_75228_b = 0;
097
098 GameRegistry.onItemSmelted(thePlayer, par1ItemStack);
099
100 if (par1ItemStack.itemID == Item.ingotIron.shiftedIndex)
101 {
102 this.thePlayer.addStat(AchievementList.acquireIron, 1);
103 }
104
105 if (par1ItemStack.itemID == Item.fishCooked.shiftedIndex)
106 {
107 this.thePlayer.addStat(AchievementList.cookFish, 1);
108 }
109 }
110 }