yl_canned_food_mtg/feature_recipes.lua
2024-07-16 01:55:04 +02:00

89 lines
2.2 KiB
Lua

-- recipes integration
if (yl_canned_food_mtg.settings.enable_recipes ~= true) then return false end
local amount = 0
local function group_has_member(group)
for itemname, _ in pairs(minetest.registered_items) do
if minetest.get_item_group(itemname, group) ~= 0 then return true end
end
return false
end
local itemcache = {}
local vessel = "vessels:glass_bottle"
itemcache[vessel] = true
for _, recipe in ipairs(yl_canned_food_mtg.data) do
itemcache[recipe.out] = true
local ingredient = recipe.base_mod .. ":" .. recipe.base_item
itemcache[ingredient] = true
for _, additive in ipairs(recipe.additives) do itemcache[additive] = true end
end
local item_good = {}
for item, _ in pairs(itemcache) do
local groupname = item:match("^group:(.*)")
if (groupname == nil) then
item_good[item] = (minetest.registered_items[item] ~= nil)
else
item_good[item] = group_has_member(groupname)
end
end
for _, recipe in ipairs(yl_canned_food_mtg.data) do
local crafting = {}
local success = true
-- vessel
table.insert(crafting, vessel)
if (item_good[vessel] ~= false) then
success = success and true
else
success = false
end
-- additive
for _, additive in ipairs(recipe.additives) do
table.insert(crafting, additive)
if (item_good[additive] ~= false) then
success = success and true
else
success = false
end
end
-- ingredient
local ingredient = recipe.base_mod .. ":" .. recipe.base_item
for i = recipe.base_amount, 1, -1 do
table.insert(crafting, ingredient)
if (item_good[ingredient] ~= false) then
success = success and true
else
success = false
end
end
if (success == true) then
-- register the craft
minetest.register_craft({
output = recipe.out,
type = "shapeless",
recipe = crafting
})
amount = amount + 1
else
minetest.log("warning",
yl_canned_food_mtg.t("recipe_not_good", recipe.out))
end
end
yl_canned_food_mtg.log("recipes integration: " .. dump(amount))