001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import java.io.DataInputStream; 006 import java.io.DataOutputStream; 007 import java.io.IOException; 008 import java.util.ArrayList; 009 010 public class MerchantRecipeList extends ArrayList 011 { 012 public MerchantRecipeList() {} 013 014 public MerchantRecipeList(NBTTagCompound par1NBTTagCompound) 015 { 016 this.readRecipiesFromTags(par1NBTTagCompound); 017 } 018 019 /** 020 * can par1,par2 be used to in crafting recipe par3 021 */ 022 public MerchantRecipe canRecipeBeUsed(ItemStack par1ItemStack, ItemStack par2ItemStack, int par3) 023 { 024 if (par3 > 0 && par3 < this.size()) 025 { 026 MerchantRecipe var4 = (MerchantRecipe)this.get(par3); 027 028 if (par1ItemStack.itemID == var4.getItemToBuy().itemID && (par2ItemStack == null && !var4.hasSecondItemToBuy() || var4.hasSecondItemToBuy() && par2ItemStack != null && var4.getSecondItemToBuy().itemID == par2ItemStack.itemID)) 029 { 030 if (par1ItemStack.stackSize >= var4.getItemToBuy().stackSize && (!var4.hasSecondItemToBuy() || par2ItemStack.stackSize >= var4.getSecondItemToBuy().stackSize)) 031 { 032 return var4; 033 } 034 035 return null; 036 } 037 } 038 039 for (int var6 = 0; var6 < this.size(); ++var6) 040 { 041 MerchantRecipe var5 = (MerchantRecipe)this.get(var6); 042 043 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)) 044 { 045 return var5; 046 } 047 } 048 049 return null; 050 } 051 052 /** 053 * checks if there is a recipie for the same ingredients already on the list, and replaces it. otherwise, adds it 054 */ 055 public void addToListWithCheck(MerchantRecipe par1MerchantRecipe) 056 { 057 for (int var2 = 0; var2 < this.size(); ++var2) 058 { 059 MerchantRecipe var3 = (MerchantRecipe)this.get(var2); 060 061 if (par1MerchantRecipe.hasSameIDsAs(var3)) 062 { 063 if (par1MerchantRecipe.hasSameItemsAs(var3)) 064 { 065 this.set(var2, par1MerchantRecipe); 066 } 067 068 return; 069 } 070 } 071 072 this.add(par1MerchantRecipe); 073 } 074 075 public void writeRecipiesToStream(DataOutputStream par1DataOutputStream) throws IOException 076 { 077 par1DataOutputStream.writeByte((byte)(this.size() & 255)); 078 079 for (int var2 = 0; var2 < this.size(); ++var2) 080 { 081 MerchantRecipe var3 = (MerchantRecipe)this.get(var2); 082 Packet.writeItemStack(var3.getItemToBuy(), par1DataOutputStream); 083 Packet.writeItemStack(var3.getItemToSell(), par1DataOutputStream); 084 ItemStack var4 = var3.getSecondItemToBuy(); 085 par1DataOutputStream.writeBoolean(var4 != null); 086 087 if (var4 != null) 088 { 089 Packet.writeItemStack(var4, par1DataOutputStream); 090 } 091 } 092 } 093 094 @SideOnly(Side.CLIENT) 095 public static MerchantRecipeList readRecipiesFromStream(DataInputStream par0DataInputStream) throws IOException 096 { 097 MerchantRecipeList var1 = new MerchantRecipeList(); 098 int var2 = par0DataInputStream.readByte() & 255; 099 100 for (int var3 = 0; var3 < var2; ++var3) 101 { 102 ItemStack var4 = Packet.readItemStack(par0DataInputStream); 103 ItemStack var5 = Packet.readItemStack(par0DataInputStream); 104 ItemStack var6 = null; 105 106 if (par0DataInputStream.readBoolean()) 107 { 108 var6 = Packet.readItemStack(par0DataInputStream); 109 } 110 111 var1.add(new MerchantRecipe(var4, var6, var5)); 112 } 113 114 return var1; 115 } 116 117 public void readRecipiesFromTags(NBTTagCompound par1NBTTagCompound) 118 { 119 NBTTagList var2 = par1NBTTagCompound.getTagList("Recipes"); 120 121 for (int var3 = 0; var3 < var2.tagCount(); ++var3) 122 { 123 NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); 124 this.add(new MerchantRecipe(var4)); 125 } 126 } 127 128 public NBTTagCompound getRecipiesAsTags() 129 { 130 NBTTagCompound var1 = new NBTTagCompound(); 131 NBTTagList var2 = new NBTTagList("Recipes"); 132 133 for (int var3 = 0; var3 < this.size(); ++var3) 134 { 135 MerchantRecipe var4 = (MerchantRecipe)this.get(var3); 136 var2.appendTag(var4.writeToTags()); 137 } 138 139 var1.setTag("Recipes", var2); 140 return var1; 141 } 142 }