Module:GetRecipes
From Eco - English Wiki
Documentation[edit source]
This module is called by Template:GetRecipes, and is the entry point for modules in the system that displays crafting recipes. It takes the item passed to the template, and uses Module:CraftingRecipes to get every recipe related to the item. The resulting list of recipes is then passed to Module:CraftingParser, and the results from CraftingParser are returned to the template.
If the template is passed, this module creates a table using details from the following Modules:
-- Module:GetRecipes (https://wiki.play.eco/en/Module:GetRecipes) local p = {} local Utils = require('Module:Utils') -- Main entry point for the Module function p.main(frame) local test = '' -- get args from the Template local args = Utils.normaliseArgs(frame) -- assign variables for item, table, and group local item = args.item local tag = args.tag local craftTable = args.table -- Don't override table local group = args.group -- load list of recipes local completeList = require("Module:CraftingRecipes") local recipeList = completeList.recipes local ingredientsList = completeList.ingredients local productsList = completeList.products local tableList = completeList.tables -- initialize a table to store recipes local recipes = {} local products = {} local ingredients = {} -- load CraftingParser local parser = require("Module:CraftingParser") -- priority: item > tag > table > group if item ~= nil then local itemProducts -- HACK Attempt to handle issue with tool recipes if productsList[item] and #productsList[item] == 1 and productsList[item][1] == '' then itemProducts = {item} elseif productsList[item] then itemProducts = productsList[item] end if itemProducts ~= nil then for _, itemProduct in pairs(itemProducts) do -- HACK: Skill books don't show us as a product of research pages, only the skill name. if string.sub(item, string.len(item) - 9) == 'Skill Book' then if (itemProduct ~= '' and recipeList[itemProduct .. ' Skill Book'] ~= nil) then table.insert(products, recipeList[itemProduct .. ' Skill Book']) end elseif (itemProduct ~= '' and recipeList[itemProduct] ~= nil) then table.insert(products, recipeList[itemProduct]) end end end local itemIngredients -- HACK Attempt to handle issue with tool recipes if ingredientsList[item] and #ingredientsList[item] == 1 and ingredientsList[item][1] == '' then itemIngredients = {item} elseif ingredientsList[item] then itemIngredients = ingredientsList[item] end if itemIngredients ~= nil then for _, itemIngredient in pairs(itemIngredients) do if itemIngredient ~= '' then if recipeList[itemIngredient] ~= nil then table.insert(ingredients, recipeList[itemIngredient]) -- HACK: Skill books don't show us as a product of research pages, only the skill name. elseif recipeList[itemIngredient .. ' Skill Book'] ~= nil then table.insert(ingredients, recipeList[itemIngredient .. ' Skill Book']) end end end end return parser.formattedItem(products, ingredients, item) elseif tag ~= nil then itemIngredients = {} -- Tags do not appear in the 'products' list, so have to process manually for recipeName, recipe in pairs(recipeList) do local foundIngredient = false for _, variant in pairs(recipe.variants) do for _, ingredient in pairs(variant.ingredients) do if ingredient[1] == 'TAG' and ingredient[2] == tag then foundIngredient = true end end end if foundIngredient then table.insert(itemIngredients, recipeName) end end if itemIngredients ~= nil then for _, itemIngredient in pairs(itemIngredients) do if itemIngredient ~= '' then if recipeList[itemIngredient] ~= nil then table.insert(ingredients, recipeList[itemIngredient]) end end end end return parser.formattedItem(products, ingredients, tag) elseif craftTable ~= nil then for _, tbl in pairs(tableList[craftTable]) do table.insert(recipes, recipeList[tbl]) end return parser.formattedTable(recipes, craftTable) else return 'Invalid use of parameters, please see [[Template:GetRecipes]].' end end return p