    001    package net.minecraft.src;
    002
    003    public class SlotMerchantResult extends Slot
    004    {
    005        /** Merchant's inventory. */
    006        private final InventoryMerchant theMerchantInventory;
    007
    008        /** The Player whos trying to buy/sell stuff. */
    009        private EntityPlayer thePlayer;
    010        private int field_75231_g;
    011
    012        /** "Instance" of the Merchant. */
    013        private final IMerchant theMerchant;
    014
    015        public SlotMerchantResult(EntityPlayer par1EntityPlayer, IMerchant par2IMerchant, InventoryMerchant par3InventoryMerchant, int par4, int par5, int par6)
    016        {
    017            super(par3InventoryMerchant, par4, par5, par6);
    018            this.thePlayer = par1EntityPlayer;
    019            this.theMerchant = par2IMerchant;
    020            this.theMerchantInventory = par3InventoryMerchant;
    021        }
    022
    023        /**
    024         * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
    025         */
    026        public boolean isItemValid(ItemStack par1ItemStack)
    027        {
    028            return false;
    029        }
    030
    031        /**
    032         * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
    033         * stack.
    034         */
    035        public ItemStack decrStackSize(int par1)
    036        {
    037            if (this.getHasStack())
    038            {
    039                this.field_75231_g += Math.min(par1, this.getStack().stackSize);
    040            }
    041
    042            return super.decrStackSize(par1);
    043        }
    044
    045        /**
    046         * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
    047         * internal count then calls onCrafting(item).
    048         */
    049        protected void onCrafting(ItemStack par1ItemStack, int par2)
    050        {
    051            this.field_75231_g += par2;
    052            this.onCrafting(par1ItemStack);
    053        }
    054
    055        /**
    056         * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
    057         */
    058        protected void onCrafting(ItemStack par1ItemStack)
    059        {
    060            par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75231_g);
    061            this.field_75231_g = 0;
    062        }
    063
    064        /**
    065         * Called when the player picks up an item from an inventory slot
    066         */
    067        public void onPickupFromSlot(ItemStack par1ItemStack)
    068        {
    069            this.onCrafting(par1ItemStack);
    070            MerchantRecipe var2 = this.theMerchantInventory.getCurrentRecipe();
    071
    072            if (var2 != null)
    073            {
    074                ItemStack var3 = this.theMerchantInventory.getStackInSlot(0);
    075                ItemStack var4 = this.theMerchantInventory.getStackInSlot(1);
    076
    077                if (this.func_75230_a(var2, var3, var4) || this.func_75230_a(var2, var4, var3))
    078                {
    079                    if (var3 != null && var3.stackSize <= 0)
    080                    {
    081                        var3 = null;
    082                    }
    083
    084                    if (var4 != null && var4.stackSize <= 0)
    085                    {
    086                        var4 = null;
    087                    }
    088
    089                    this.theMerchantInventory.setInventorySlotContents(0, var3);
    090                    this.theMerchantInventory.setInventorySlotContents(1, var4);
    091                    this.theMerchant.useRecipe(var2);
    092                }
    093            }
    094        }
    095
    096        private boolean func_75230_a(MerchantRecipe par1MerchantRecipe, ItemStack par2ItemStack, ItemStack par3ItemStack)
    097        {
    098            ItemStack var4 = par1MerchantRecipe.getItemToBuy();
    099            ItemStack var5 = par1MerchantRecipe.getSecondItemToBuy();
    100
    101            if (par2ItemStack != null && par2ItemStack.itemID == var4.itemID)
    102            {
    103                if (var5 != null && par3ItemStack != null && var5.itemID == par3ItemStack.itemID)
    104                {
    105                    par2ItemStack.stackSize -= var4.stackSize;
    106                    par3ItemStack.stackSize -= var5.stackSize;
    107                    return true;
    108                }
    109
    110                if (var5 == null && par3ItemStack == null)
    111                {
    112                    par2ItemStack.stackSize -= var4.stackSize;
    113                    return true;
    114                }
    115            }
    116
    117            return false;
    118        }
    119    }