function is_value_in_list (value, list) -- log('value = '..value) for i, v in pairs (list) do if value == v then return true end end return false end local all_ingredients = {item = {}, fluid = {}} local all_results = {item = {}, fluid = {}} for recipe_name, recipe_prot in pairs (data.raw.recipe) do local handlers = {recipe_prot, recipe_prot.normal, recipe_prot} for i, handler in pairs (handlers) do if handler.ingredients then for j, ingredient_prot in pairs (handler.ingredients) do local ingredient_name = ingredient_prot.name or ingredient_prot[1] local ingredient_type = ingredient_prot.type or "item" if not all_ingredients[ingredient_type] then all_ingredients[ingredient_type] = {} end if not (is_value_in_list (ingredient_name, all_ingredients[ingredient_type])) then table.insert(all_ingredients[ingredient_type], ingredient_name) end end end if handler.result then if not (is_value_in_list (handler.result, all_results.item)) then table.insert(all_results.item, handler.result) end end if handler.main_product and not (handler.main_product == "") then if not (is_value_in_list (handler.main_product, all_results.item)) then table.insert(all_results.item, handler.main_product) end end if handler.results then for j, result_prot in pairs (handler.results) do local result_name = result_prot.name -- or result_prot[1] local result_type = result_prot.type or "item" if not all_results[result_type] then all_results[result_type] = {} end if not (is_value_in_list (result_name, all_results[result_type])) then table.insert(all_results[result_type], result_name) end end end end end -- is possible to make it? local bad_list = {} for key, ingredients_list in pairs (all_ingredients) do for i, ingredient_name in pairs (ingredients_list) do if all_results and all_results[key] then if not (is_value_in_list (ingredient_name, all_results[key])) then if not bad_list[key] then bad_list[key] = {} end bad_list[key][#bad_list[key]+1] = ingredient_name end end end end log ('bad_list: ' .. serpent.block (bad_list)) -- log ('all_ingredients: ' .. serpent.block (all_ingredients)) -- log ('all_results: ' .. serpent.block (all_results))