From 6731db14e580ddccace186f5a8ac03dad0661e0c Mon Sep 17 00:00:00 2001 From: Gábriel <38207624+gabriel1379@users.noreply.github.com> Date: Sun, 07 Jul 2024 18:53:15 +0200 Subject: [PATCH] Add compressor recipes for nether racks (#644) --- technic/machines/register/recipes.lua | 84 ++++++++++++++++++++++++++++++++++------- 1 files changed, 69 insertions(+), 15 deletions(-) diff --git a/technic/machines/register/recipes.lua b/technic/machines/register/recipes.lua index cff8ca1..ba4a5e1 100644 --- a/technic/machines/register/recipes.lua +++ b/technic/machines/register/recipes.lua @@ -1,18 +1,38 @@ +local have_ui = minetest.get_modpath("unified_inventory") +local have_cg = minetest.get_modpath("craftguide") +local have_i3 = minetest.get_modpath("i3") -technic.recipes = {cooking = {numitems = 1}} -function technic.register_recipe_type(typename, desc, numitems) - numitems = numitems or 1 - if unified_inventory and unified_inventory.register_craft_type then - unified_inventory.register_craft_type(typename, { - description = desc, - height = numitems, - 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] = {numitems = numitems, recipes = {}} + data.recipes = {} + technic.recipes[typename] = data end 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() @@ -26,22 +46,53 @@ for i, stack in ipairs(data.input) do data.input[i] = ItemStack(stack):to_string() end - data.output = ItemStack(data.output):to_string() - + 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 unified_inventory then + if have_ui and technic.recipes[typename].output_size == 1 then unified_inventory.register_craft({ type = typename, output = data.output, 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 @@ -65,12 +116,15 @@ end end 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 - print(stack:get_name()) return nil else new_input[i] = ItemStack(stack) -- Gitblit v1.8.0