001    package net.minecraft.src;
002    
003    public class MerchantRecipe
004    {
005        /** Item the Villager buys. */
006        private ItemStack itemToBuy;
007    
008        /** Second Item the Villager buys. */
009        private ItemStack secondItemToBuy;
010    
011        /** Item the Villager sells. */
012        private ItemStack itemToSell;
013    
014        /**
015         * Saves how much has been tool used when put into to slot to be enchanted.
016         */
017        private int toolUses;
018    
019        public MerchantRecipe(NBTTagCompound par1NBTTagCompound)
020        {
021            this.readFromTags(par1NBTTagCompound);
022        }
023    
024        public MerchantRecipe(ItemStack par1ItemStack, ItemStack par2ItemStack, ItemStack par3ItemStack)
025        {
026            this.itemToBuy = par1ItemStack;
027            this.secondItemToBuy = par2ItemStack;
028            this.itemToSell = par3ItemStack;
029        }
030    
031        public MerchantRecipe(ItemStack par1ItemStack, ItemStack par2ItemStack)
032        {
033            this(par1ItemStack, (ItemStack)null, par2ItemStack);
034        }
035    
036        public MerchantRecipe(ItemStack par1ItemStack, Item par2Item)
037        {
038            this(par1ItemStack, new ItemStack(par2Item));
039        }
040    
041        /**
042         * Gets the itemToBuy.
043         */
044        public ItemStack getItemToBuy()
045        {
046            return this.itemToBuy;
047        }
048    
049        /**
050         * Gets secondItemToBuy.
051         */
052        public ItemStack getSecondItemToBuy()
053        {
054            return this.secondItemToBuy;
055        }
056    
057        /**
058         * Gets if Villager has secondItemToBuy.
059         */
060        public boolean hasSecondItemToBuy()
061        {
062            return this.secondItemToBuy != null;
063        }
064    
065        /**
066         * Gets itemToSell.
067         */
068        public ItemStack getItemToSell()
069        {
070            return this.itemToSell;
071        }
072    
073        /**
074         * checks if both the first and second ItemToBuy IDs are the same
075         */
076        public boolean hasSameIDsAs(MerchantRecipe par1MerchantRecipe)
077        {
078            return this.itemToBuy.itemID == par1MerchantRecipe.itemToBuy.itemID && this.itemToSell.itemID == par1MerchantRecipe.itemToSell.itemID ? this.secondItemToBuy == null && par1MerchantRecipe.secondItemToBuy == null || this.secondItemToBuy != null && par1MerchantRecipe.secondItemToBuy != null && this.secondItemToBuy.itemID == par1MerchantRecipe.secondItemToBuy.itemID : false;
079        }
080    
081        /**
082         * checks first and second ItemToBuy ID's and count. Calls hasSameIDs
083         */
084        public boolean hasSameItemsAs(MerchantRecipe par1MerchantRecipe)
085        {
086            return this.hasSameIDsAs(par1MerchantRecipe) && (this.itemToBuy.stackSize < par1MerchantRecipe.itemToBuy.stackSize || this.secondItemToBuy != null && this.secondItemToBuy.stackSize < par1MerchantRecipe.secondItemToBuy.stackSize);
087        }
088    
089        public int getToolUses()
090        {
091            return this.toolUses;
092        }
093    
094        public void incrementToolUses()
095        {
096            ++this.toolUses;
097        }
098    
099        public void readFromTags(NBTTagCompound par1NBTTagCompound)
100        {
101            NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("buy");
102            this.itemToBuy = ItemStack.loadItemStackFromNBT(var2);
103            NBTTagCompound var3 = par1NBTTagCompound.getCompoundTag("sell");
104            this.itemToSell = ItemStack.loadItemStackFromNBT(var3);
105    
106            if (par1NBTTagCompound.hasKey("buyB"))
107            {
108                this.secondItemToBuy = ItemStack.loadItemStackFromNBT(par1NBTTagCompound.getCompoundTag("buyB"));
109            }
110    
111            if (par1NBTTagCompound.hasKey("uses"))
112            {
113                this.toolUses = par1NBTTagCompound.getInteger("uses");
114            }
115        }
116    
117        public NBTTagCompound writeToTags()
118        {
119            NBTTagCompound var1 = new NBTTagCompound();
120            var1.setCompoundTag("buy", this.itemToBuy.writeToNBT(new NBTTagCompound("buy")));
121            var1.setCompoundTag("sell", this.itemToSell.writeToNBT(new NBTTagCompound("sell")));
122    
123            if (this.secondItemToBuy != null)
124            {
125                var1.setCompoundTag("buyB", this.secondItemToBuy.writeToNBT(new NBTTagCompound("buyB")));
126            }
127    
128            var1.setInteger("uses", this.toolUses);
129            return var1;
130        }
131    }