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