    001    package net.minecraft.item.crafting;
    002
    003    import java.util.ArrayList;
    004    import java.util.Iterator;
    005    import java.util.List;
    006    import net.minecraft.inventory.InventoryCrafting;
    007    import net.minecraft.item.ItemStack;
    008    import net.minecraft.world.World;
    009
    010    public 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    }