    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 var3 = new ArrayList(this.recipeItems);
    035
    036        for (int var4 = 0; var4 < 3; ++var4)
    037        {
    038            for (int var5 = 0; var5 < 3; ++var5)
    039            {
    040                ItemStack var6 = par1InventoryCrafting.getStackInRowAndColumn(var5, var4);
    041
    042                if (var6 != null)
    043                {
    044                    boolean var7 = false;
    045                    Iterator var8 = var3.iterator();
    046
    047                    while (var8.hasNext())
    048                    {
    049                        ItemStack var9 = (ItemStack)var8.next();
    050
    051                        if (var6.itemID == var9.itemID && (var9.getItemDamage() == -1 || var6.getItemDamage() == var9.getItemDamage()))
    052                        {
    053                            var7 = true;
    054                            var3.remove(var9);
    055                            break;
    056                        }
    057                    }
    058
    059                    if (!var7)
    060                    {
    061                        return false;
    062                    }
    063                }
    064            }
    065        }
    066
    067        return var3.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}