package net.minecraft.village; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.ArrayList; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.packet.Packet; public class MerchantRecipeList extends ArrayList { public MerchantRecipeList() {} public MerchantRecipeList(NBTTagCompound par1NBTTagCompound) { this.readRecipiesFromTags(par1NBTTagCompound); } /** * can par1,par2 be used to in crafting recipe par3 */ public MerchantRecipe canRecipeBeUsed(ItemStack par1ItemStack, ItemStack par2ItemStack, int par3) { if (par3 > 0 && par3 < this.size()) { MerchantRecipe var6 = (MerchantRecipe)this.get(par3); return par1ItemStack.itemID == var6.getItemToBuy().itemID && (par2ItemStack == null && !var6.hasSecondItemToBuy() || var6.hasSecondItemToBuy() && par2ItemStack != null && var6.getSecondItemToBuy().itemID == par2ItemStack.itemID) && par1ItemStack.stackSize >= var6.getItemToBuy().stackSize && (!var6.hasSecondItemToBuy() || par2ItemStack.stackSize >= var6.getSecondItemToBuy().stackSize) ? var6 : null; } else { for (int var4 = 0; var4 < this.size(); ++var4) { MerchantRecipe var5 = (MerchantRecipe)this.get(var4); if (par1ItemStack.itemID == var5.getItemToBuy().itemID && par1ItemStack.stackSize >= var5.getItemToBuy().stackSize && (!var5.hasSecondItemToBuy() && par2ItemStack == null || var5.hasSecondItemToBuy() && par2ItemStack != null && var5.getSecondItemToBuy().itemID == par2ItemStack.itemID && par2ItemStack.stackSize >= var5.getSecondItemToBuy().stackSize)) { return var5; } } return null; } } /** * checks if there is a recipie for the same ingredients already on the list, and replaces it. otherwise, adds it */ public void addToListWithCheck(MerchantRecipe par1MerchantRecipe) { for (int var2 = 0; var2 < this.size(); ++var2) { MerchantRecipe var3 = (MerchantRecipe)this.get(var2); if (par1MerchantRecipe.hasSameIDsAs(var3)) { if (par1MerchantRecipe.hasSameItemsAs(var3)) { this.set(var2, par1MerchantRecipe); } return; } } this.add(par1MerchantRecipe); } public void writeRecipiesToStream(DataOutputStream par1DataOutputStream) throws IOException { par1DataOutputStream.writeByte((byte)(this.size() & 255)); for (int var2 = 0; var2 < this.size(); ++var2) { MerchantRecipe var3 = (MerchantRecipe)this.get(var2); Packet.writeItemStack(var3.getItemToBuy(), par1DataOutputStream); Packet.writeItemStack(var3.getItemToSell(), par1DataOutputStream); ItemStack var4 = var3.getSecondItemToBuy(); par1DataOutputStream.writeBoolean(var4 != null); if (var4 != null) { Packet.writeItemStack(var4, par1DataOutputStream); } par1DataOutputStream.writeBoolean(var3.func_82784_g()); } } @SideOnly(Side.CLIENT) public static MerchantRecipeList readRecipiesFromStream(DataInputStream par0DataInputStream) throws IOException { MerchantRecipeList var1 = new MerchantRecipeList(); int var2 = par0DataInputStream.readByte() & 255; for (int var3 = 0; var3 < var2; ++var3) { ItemStack var4 = Packet.readItemStack(par0DataInputStream); ItemStack var5 = Packet.readItemStack(par0DataInputStream); ItemStack var6 = null; if (par0DataInputStream.readBoolean()) { var6 = Packet.readItemStack(par0DataInputStream); } boolean var7 = par0DataInputStream.readBoolean(); MerchantRecipe var8 = new MerchantRecipe(var4, var6, var5); if (var7) { var8.func_82785_h(); } var1.add(var8); } return var1; } public void readRecipiesFromTags(NBTTagCompound par1NBTTagCompound) { NBTTagList var2 = par1NBTTagCompound.getTagList("Recipes"); for (int var3 = 0; var3 < var2.tagCount(); ++var3) { NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); this.add(new MerchantRecipe(var4)); } } public NBTTagCompound getRecipiesAsTags() { NBTTagCompound var1 = new NBTTagCompound(); NBTTagList var2 = new NBTTagList("Recipes"); for (int var3 = 0; var3 < this.size(); ++var3) { MerchantRecipe var4 = (MerchantRecipe)this.get(var3); var2.appendTag(var4.writeToTags()); } var1.setTag("Recipes", var2); return var1; } }