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