From d623715d94152e38e817555f43c7c6ab2372045c Mon Sep 17 00:00:00 2001 From: Bryce w <55167737+blockhead100@users.noreply.github.com> Date: Thu, 20 Oct 2022 18:28:45 +0200 Subject: [PATCH] Add LV led and lamp --- technic/machines/register/recipes.lua | 149 ++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 114 insertions(+), 35 deletions(-) diff --git a/technic/machines/register/recipes.lua b/technic/machines/register/recipes.lua index fb5c09e..ba4a5e1 100644 --- a/technic/machines/register/recipes.lua +++ b/technic/machines/register/recipes.lua @@ -1,63 +1,142 @@ +local have_ui = minetest.get_modpath("unified_inventory") +local have_cg = minetest.get_modpath("craftguide") +local have_i3 = minetest.get_modpath("i3") -technic.recipes = {} -function technic.register_recipe_type(typename, desc) - if unified_inventory and unified_inventory.register_craft_type then - unified_inventory.register_craft_type(typename, { - description = desc, - height = 1, - width = 1, - }) +technic.recipes = { cooking = { input_size = 1, output_size = 1 } } +function technic.register_recipe_type(typename, origdata) + local data = {} + for k, v in pairs(origdata) do data[k] = v end + data.input_size = data.input_size or 1 + data.output_size = data.output_size or 1 + if data.output_size == 1 then + if have_ui and unified_inventory.register_craft_type then + unified_inventory.register_craft_type(typename, { + description = data.description, + width = data.input_size, + height = 1, + }) + end + if have_cg and craftguide.register_craft_type then + craftguide.register_craft_type(typename, { + description = data.description, + }) + end + if have_i3 then + i3.register_craft_type(typename, { + description = data.description, + }) + end end - technic.recipes[typename] = {} + data.recipes = {} + technic.recipes[typename] = data end -function technic.register_recipe(typename, data) - local src = ItemStack(data.input):get_name() - technic.recipes[typename][src] = data - if unified_inventory then +local function get_recipe_index(items) + if not items or type(items) ~= "table" then return false end + local l = {} + for i, stack in ipairs(items) do + l[i] = ItemStack(stack):get_name() + end + table.sort(l) + return table.concat(l, "/") +end + +local function register_recipe(typename, data) + -- Handle aliases + for i, stack in ipairs(data.input) do + data.input[i] = ItemStack(stack):to_string() + end + if type(data.output) == "table" then + for i, v in ipairs(data.output) do + data.output[i] = ItemStack(data.output[i]):to_string() + end + else + data.output = ItemStack(data.output):to_string() + end + + local recipe = {time = data.time, input = {}, output = data.output} + local index = get_recipe_index(data.input) + if not index then + print("[Technic] ignored registration of garbage recipe!") + return + end + for _, stack in ipairs(data.input) do + recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count() + end + + technic.recipes[typename].recipes[index] = recipe + if have_ui and technic.recipes[typename].output_size == 1 then unified_inventory.register_craft({ type = typename, output = data.output, - items = {data.input}, + items = data.input, width = 0, }) end + if (have_cg or have_i3) and technic.recipes[typename].output_size == 1 then + local result = data.output + if (type(result)=="table") then + result = result[1] + end + local items = table.concat(data.input, ", ") + if have_cg and craftguide.register_craft then + craftguide.register_craft({ + type = typename, + result = result, + items = {items}, + }) + end + if have_i3 then + i3.register_craft({ + type = typename, + result = result, + items = {items}, + }) + end + end end -function technic.get_recipe(typename, item) +function technic.register_recipe(typename, data) + minetest.after(0.01, register_recipe, typename, data) -- Handle aliases +end + +function technic.get_recipe(typename, items) if typename == "cooking" then -- Already builtin in Minetest, so use that - local result = minetest.get_craft_result({ + local result, new_input = minetest.get_craft_result({ method = "cooking", width = 1, - items = {item}}) + items = items}) -- Compatibility layer if not result or result.time == 0 then return nil else return {time = result.time, - input = item:get_name(), - output = result.item:to_string()} + new_input = new_input.items, + output = result.item} end end - local recipe = technic.recipes[typename][item:get_name()] - if recipe and item:get_count() >= ItemStack(recipe.input):get_count() then - return recipe + local index = get_recipe_index(items) + if not index then + print("[Technic] ignored registration of garbage recipe!") + return + end + local recipe = technic.recipes[typename].recipes[index] + if recipe then + local new_input = {} + for i, stack in ipairs(items) do + if stack:get_count() < recipe.input[stack:get_name()] then + return nil + else + new_input[i] = ItemStack(stack) + new_input[i]:take_item(recipe.input[stack:get_name()]) + end + end + return {time = recipe.time, + new_input = new_input, + output = recipe.output} else return nil end end - --- Handle aliases -minetest.after(0.01, function () - for _, recipes_list in pairs(technic.recipes) do - for ingredient, recipe in pairs(recipes_list) do - ingredient = minetest.registered_aliases[ingredient] - while ingredient do - recipes_list[ingredient] = recipe - ingredient = minetest.registered_aliases[ingredient] - end - end - end -end) -- Gitblit v1.8.0