Module:RequiredCraftingStations

local p = {} function p.neededstations( f ) local args = f:getParent.args local stations = {["Campfire"] = false, ["Mortar and Pestle"] = false, ["Refining Forge"] = false, ["Preserving Bin"] = false, ["Smithy"] = false, ["Fabricator"] = false, ["Industrial Cooker"] = false} local dependencies = { ["Campfire"] = { "Charcoal", "Cooked Meat", "Cooked Prime Meat", "Gunpowder" },   ["Mortar and Pestle"] = { "Sparkpowder", "Narcotic", "Gunpowder", "Stimulant", "Cementing Paste", "Bug Repellant", "Polymer", "Clay (Scorched Earth)", "Propellant" },   ["Refining Forge"] = { "Metal Ingot", "Gasoline", "Electronics", "Brick", "Glass", "Iron Ingot", "Steel Ingot", "Metal Ingot or Scrap Metal Ingot" },   ["Preserving Bin"] = { "Cooked Meat Jerky", "Prime Meat Jerky" },   ["Smithy"] = { "Tranquilizer Dart" },   ["Fabricator"] = { "Electronics", "Polymer" },   ["Chemistry Bench"] = { "Absorbent Substrate" },   ["Industrial Cooker"] = { "Geopolymer Cement (Mobile)" }, --Primitive Plus ["Apiary"] = { "Honey", "Beeswax" },   ["Cauldron"] = { "Natural Yeast", "Cashew Milk" },   ["Cement Mixer"] = { "Fresh Cement" },   ["Cooking Table"] = { "Fresh Dough" },   ["Handmill"] = { "Clay (Primitive+)", "Sack of Flour", "Salt" },   ["Lumber Station"] = { "Wood Plank" },   ["Preserving Campfire"] = { "Dried Barley", "Dried Tea Bags", "Dried Wheat" },   ["Sugar Press"] = { "Fresh Sugar Juice Bucket" },   ["Tanning Rack"] = { "Leather" } }

-- check if item itself needs a station to be crafted in. if yes, set to true if args.craftedin ~= nil and stations[args.craftedin] ~= nil then stations[args.craftedin] = true end -- get iconsize local iconsize = '20px' if args.iconsize ~= nil then iconsize = args.iconsize end

-- test all given resources and set station to true if needed and station is not already on true for _,res in ipairs(args) do   if res ~= '' then for station,_ in pairs(dependencies) do       if not stations[station] and p.inTable(dependencies[station], res) then stations[station] = true end end end end

local returnTable = {} for station, needed in pairs(stations) do   if needed then table.insert(returnTable,' '..station..'') end end

return table.concat(returnTable,' ') end

function p.inTable(tbl, item) for _, value in pairs(tbl) do   if string.lower(value) == string.lower(item) then return true end end return false end

return p