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    }