001package net.minecraft.item.crafting; 002 003import java.util.ArrayList; 004import net.minecraft.block.BlockCloth; 005import net.minecraft.entity.passive.EntitySheep; 006import net.minecraft.inventory.InventoryCrafting; 007import net.minecraft.item.EnumArmorMaterial; 008import net.minecraft.item.Item; 009import net.minecraft.item.ItemArmor; 010import net.minecraft.item.ItemStack; 011import net.minecraft.world.World; 012 013public 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 itemstack = null; 021 ArrayList arraylist = new ArrayList(); 022 023 for (int i = 0; i < par1InventoryCrafting.getSizeInventory(); ++i) 024 { 025 ItemStack itemstack1 = par1InventoryCrafting.getStackInSlot(i); 026 027 if (itemstack1 != null) 028 { 029 if (itemstack1.getItem() instanceof ItemArmor) 030 { 031 ItemArmor itemarmor = (ItemArmor)itemstack1.getItem(); 032 033 if (itemarmor.getArmorMaterial() != EnumArmorMaterial.CLOTH || itemstack != null) 034 { 035 return false; 036 } 037 038 itemstack = itemstack1; 039 } 040 else 041 { 042 if (itemstack1.itemID != Item.dyePowder.itemID) 043 { 044 return false; 045 } 046 047 arraylist.add(itemstack1); 048 } 049 } 050 } 051 052 return itemstack != null && !arraylist.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 itemstack = null; 061 int[] aint = new int[3]; 062 int i = 0; 063 int j = 0; 064 ItemArmor itemarmor = null; 065 int k; 066 int l; 067 float f; 068 float f1; 069 int i1; 070 071 for (k = 0; k < par1InventoryCrafting.getSizeInventory(); ++k) 072 { 073 ItemStack itemstack1 = par1InventoryCrafting.getStackInSlot(k); 074 075 if (itemstack1 != null) 076 { 077 if (itemstack1.getItem() instanceof ItemArmor) 078 { 079 itemarmor = (ItemArmor)itemstack1.getItem(); 080 081 if (itemarmor.getArmorMaterial() != EnumArmorMaterial.CLOTH || itemstack != null) 082 { 083 return null; 084 } 085 086 itemstack = itemstack1.copy(); 087 itemstack.stackSize = 1; 088 089 if (itemarmor.hasColor(itemstack1)) 090 { 091 l = itemarmor.getColor(itemstack); 092 f = (float)(l >> 16 & 255) / 255.0F; 093 f1 = (float)(l >> 8 & 255) / 255.0F; 094 float f2 = (float)(l & 255) / 255.0F; 095 i = (int)((float)i + Math.max(f, Math.max(f1, f2)) * 255.0F); 096 aint[0] = (int)((float)aint[0] + f * 255.0F); 097 aint[1] = (int)((float)aint[1] + f1 * 255.0F); 098 aint[2] = (int)((float)aint[2] + f2 * 255.0F); 099 ++j; 100 } 101 } 102 else 103 { 104 if (itemstack1.itemID != Item.dyePowder.itemID) 105 { 106 return null; 107 } 108 109 float[] afloat = EntitySheep.fleeceColorTable[BlockCloth.getBlockFromDye(itemstack1.getItemDamage())]; 110 int j1 = (int)(afloat[0] * 255.0F); 111 int k1 = (int)(afloat[1] * 255.0F); 112 i1 = (int)(afloat[2] * 255.0F); 113 i += Math.max(j1, Math.max(k1, i1)); 114 aint[0] += j1; 115 aint[1] += k1; 116 aint[2] += i1; 117 ++j; 118 } 119 } 120 } 121 122 if (itemarmor == null) 123 { 124 return null; 125 } 126 else 127 { 128 k = aint[0] / j; 129 int l1 = aint[1] / j; 130 l = aint[2] / j; 131 f = (float)i / (float)j; 132 f1 = (float)Math.max(k, Math.max(l1, l)); 133 k = (int)((float)k * f / f1); 134 l1 = (int)((float)l1 * f / f1); 135 l = (int)((float)l * f / f1); 136 i1 = (k << 8) + l1; 137 i1 = (i1 << 8) + l; 138 itemarmor.func_82813_b(itemstack, i1); 139 return itemstack; 140 } 141 } 142 143 /** 144 * Returns the size of the recipe area 145 */ 146 public int getRecipeSize() 147 { 148 return 10; 149 } 150 151 public ItemStack getRecipeOutput() 152 { 153 return null; 154 } 155}