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