001package net.minecraft.item.crafting;
002
003import java.util.ArrayList;
004import java.util.Iterator;
005import java.util.List;
006import net.minecraft.inventory.InventoryCrafting;
007import net.minecraft.item.ItemStack;
008import net.minecraft.world.World;
009
010public class ShapelessRecipes implements IRecipe
011{
012    /** Is the ItemStack that you get when craft the recipe. */
013    private final ItemStack recipeOutput;
014
015    /** Is a List of ItemStack that composes the recipe. */
016    public final List recipeItems;
017
018    public ShapelessRecipes(ItemStack par1ItemStack, List par2List)
019    {
020        this.recipeOutput = par1ItemStack;
021        this.recipeItems = par2List;
022    }
023
024    public ItemStack getRecipeOutput()
025    {
026        return this.recipeOutput;
027    }
028
029    /**
030     * Used to check if a recipe matches current crafting inventory
031     */
032    public boolean matches(InventoryCrafting par1InventoryCrafting, World par2World)
033    {
034        ArrayList arraylist = new ArrayList(this.recipeItems);
035
036        for (int i = 0; i < 3; ++i)
037        {
038            for (int j = 0; j < 3; ++j)
039            {
040                ItemStack itemstack = par1InventoryCrafting.getStackInRowAndColumn(j, i);
041
042                if (itemstack != null)
043                {
044                    boolean flag = false;
045                    Iterator iterator = arraylist.iterator();
046
047                    while (iterator.hasNext())
048                    {
049                        ItemStack itemstack1 = (ItemStack)iterator.next();
050
051                        if (itemstack.itemID == itemstack1.itemID && (itemstack1.getItemDamage() == 32767 || itemstack.getItemDamage() == itemstack1.getItemDamage()))
052                        {
053                            flag = true;
054                            arraylist.remove(itemstack1);
055                            break;
056                        }
057                    }
058
059                    if (!flag)
060                    {
061                        return false;
062                    }
063                }
064            }
065        }
066
067        return arraylist.isEmpty();
068    }
069
070    /**
071     * Returns an Item that is the result of this recipe
072     */
073    public ItemStack getCraftingResult(InventoryCrafting par1InventoryCrafting)
074    {
075        return this.recipeOutput.copy();
076    }
077
078    /**
079     * Returns the size of the recipe area
080     */
081    public int getRecipeSize()
082    {
083        return this.recipeItems.size();
084    }
085}