    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    }