001 package net.minecraft.item.crafting;
002
003 import java.util.ArrayList;
004 import net.minecraft.block.BlockCloth;
005 import net.minecraft.entity.passive.EntitySheep;
006 import net.minecraft.inventory.InventoryCrafting;
007 import net.minecraft.item.EnumArmorMaterial;
008 import net.minecraft.item.Item;
009 import net.minecraft.item.ItemArmor;
010 import net.minecraft.item.ItemStack;
011 import net.minecraft.world.World;
012
013 public class RecipesArmorDyes implements IRecipe
014 {
015 /**
016 * Used to check if a recipe matches current crafting inventory
017 */
018 public boolean matches(InventoryCrafting par1InventoryCrafting, World par2World)
019 {
020 ItemStack var3 = null;
021 ArrayList var4 = new ArrayList();
022
023 for (int var5 = 0; var5 < par1InventoryCrafting.getSizeInventory(); ++var5)
024 {
025 ItemStack var6 = par1InventoryCrafting.getStackInSlot(var5);
026
027 if (var6 != null)
028 {
029 if (var6.getItem() instanceof ItemArmor)
030 {
031 ItemArmor var7 = (ItemArmor)var6.getItem();
032
033 if (var7.getArmorMaterial() != EnumArmorMaterial.CLOTH || var3 != null)
034 {
035 return false;
036 }
037
038 var3 = var6;
039 }
040 else
041 {
042 if (var6.itemID != Item.dyePowder.itemID)
043 {
044 return false;
045 }
046
047 var4.add(var6);
048 }
049 }
050 }
051
052 return var3 != null && !var4.isEmpty();
053 }
054
055 /**
056 * Returns an Item that is the result of this recipe
057 */
058 public ItemStack getCraftingResult(InventoryCrafting par1InventoryCrafting)
059 {
060 ItemStack var2 = null;
061 int[] var3 = new int[3];
062 int var4 = 0;
063 int var5 = 0;
064 ItemArmor var6 = null;
065 int var7;
066 int var9;
067 float var10;
068 float var11;
069 int var17;
070
071 for (var7 = 0; var7 < par1InventoryCrafting.getSizeInventory(); ++var7)
072 {
073 ItemStack var8 = par1InventoryCrafting.getStackInSlot(var7);
074
075 if (var8 != null)
076 {
077 if (var8.getItem() instanceof ItemArmor)
078 {
079 var6 = (ItemArmor)var8.getItem();
080
081 if (var6.getArmorMaterial() != EnumArmorMaterial.CLOTH || var2 != null)
082 {
083 return null;
084 }
085
086 var2 = var8.copy();
087
088 if (var6.hasColor(var8))
089 {
090 var9 = var6.getColor(var2);
091 var10 = (float)(var9 >> 16 & 255) / 255.0F;
092 var11 = (float)(var9 >> 8 & 255) / 255.0F;
093 float var12 = (float)(var9 & 255) / 255.0F;
094 var4 = (int)((float)var4 + Math.max(var10, Math.max(var11, var12)) * 255.0F);
095 var3[0] = (int)((float)var3[0] + var10 * 255.0F);
096 var3[1] = (int)((float)var3[1] + var11 * 255.0F);
097 var3[2] = (int)((float)var3[2] + var12 * 255.0F);
098 ++var5;
099 }
100 }
101 else
102 {
103 if (var8.itemID != Item.dyePowder.itemID)
104 {
105 return null;
106 }
107
108 float[] var14 = EntitySheep.fleeceColorTable[BlockCloth.getBlockFromDye(var8.getItemDamage())];
109 int var16 = (int)(var14[0] * 255.0F);
110 int var15 = (int)(var14[1] * 255.0F);
111 var17 = (int)(var14[2] * 255.0F);
112 var4 += Math.max(var16, Math.max(var15, var17));
113 var3[0] += var16;
114 var3[1] += var15;
115 var3[2] += var17;
116 ++var5;
117 }
118 }
119 }
120
121 if (var6 == null)
122 {
123 return null;
124 }
125 else
126 {
127 var7 = var3[0] / var5;
128 int var13 = var3[1] / var5;
129 var9 = var3[2] / var5;
130 var10 = (float)var4 / (float)var5;
131 var11 = (float)Math.max(var7, Math.max(var13, var9));
132 var7 = (int)((float)var7 * var10 / var11);
133 var13 = (int)((float)var13 * var10 / var11);
134 var9 = (int)((float)var9 * var10 / var11);
135 var17 = (var7 << 8) + var13;
136 var17 = (var17 << 8) + var9;
137 var6.func_82813_b(var2, var17);
138 return var2;
139 }
140 }
141
142 /**
143 * Returns the size of the recipe area
144 */
145 public int getRecipeSize()
146 {
147 return 10;
148 }
149
150 public ItemStack getRecipeOutput()
151 {
152 return null;
153 }
154 }