diff --git a/src/caches.lua b/src/caches.lua index 078dacd..5fb9a90 100644 --- a/src/caches.lua +++ b/src/caches.lua @@ -2,7 +2,7 @@ local replacements = {fuel = {}} local http = ... IMPORT("maxn", "copy", "insert", "sort", "match", "sub") -IMPORT("true_str", "is_table", "valid_item", "table_merge", "table_replace", "rcp_eq") +IMPORT("true_str", "is_table", "valid_item", "table_merge", "table_replace", "table_eq") IMPORT("fmt", "reg_items", "reg_aliases", "reg_nodes", "is_cube", "get_cube", "ItemStack") IMPORT("is_group", "extract_groups", "item_has_groups", "groups_to_items", "get_group_stereotype") @@ -248,11 +248,7 @@ local old_clear_craft = core.clear_craft core.clear_craft = function(def) old_clear_craft(def) - if true_str(def) then - return -- TODO - elseif is_table(def) then - return -- TODO - end + -- TODO: hide in crafting guide end local function resolve_aliases(hash) @@ -274,7 +270,7 @@ local function resolve_aliases(hash) local rcp_new = copy(i3.recipes_cache[newname][j]) rcp_new.output = oldname - if rcp_eq(rcp_old, rcp_new) then + if table_eq(rcp_old, rcp_new) then similar = true break end diff --git a/src/common.lua b/src/common.lua index 628b9b6..834d2cc 100644 --- a/src/common.lua +++ b/src/common.lua @@ -216,18 +216,22 @@ local function array_diff(t1, t2) return diff end -local function rcp_eq(rcp, rcp2) - if rcp.type ~= rcp2.type then return end - if rcp.width ~= rcp2.width then return end - if #rcp.items ~= #rcp2.items then return end - if rcp.output ~= rcp2.output then return end +local function table_eq(t1, t2) + local ty1, ty2 = type(t1), type(t2) + if ty1 ~= ty2 then return end - for i, item in pairs(rcp.items) do - if item ~= rcp2.items[i] then return end + if ty1 ~= "table" and ty2 ~= "table" then + return t1 == t2 end - for i, item in pairs(rcp2.items) do - if item ~= rcp.items[i] then return end + for k, v in pairs(t1) do + local v2 = t2[k] + if v2 == nil or not table_eq(v, v2) then return end + end + + for k, v in pairs(t2) do + local v1 = t1[k] + if v1 == nil or not table_eq(v1, v) then return end end return true @@ -764,7 +768,7 @@ local _ = { is_table = is_table, table_merge = table_merge, table_replace = table_replace, - rcp_eq = rcp_eq, + table_eq = table_eq, array_diff = array_diff, -- Math diff --git a/tests/test_custom_recipes.lua b/tests/test_custom_recipes.lua index 0bcabcf..acac746 100644 --- a/tests/test_custom_recipes.lua +++ b/tests/test_custom_recipes.lua @@ -11,32 +11,39 @@ mt3:get_meta():set_string("description", "Worn Pick") mt3:get_meta():set_string("color", "yellow") mt3:set_wear(10000) -minetest.register_craft({ +minetest.register_craft { output = mt:to_string(), type = "shapeless", recipe = { "default:wood", mt2:to_string(), }, -}) +} -minetest.register_craft({ +minetest.register_craft { output = mt3:to_string(), type = "shapeless", recipe = { "default:pick_mese", "default:diamond", }, -}) +} + +minetest.clear_craft { + recipe = { + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, + }, +} i3.register_craft { url = "https://raw.githubusercontent.com/minetest-mods/i3/main/tests/test_online_recipe.json" } -i3.register_craft({ +i3.register_craft { result = "default:ladder_wood 2", items = {"default:copper_ingot 7, default:tin_ingot, default:steel_ingot 2"}, -}) +} i3.register_craft { result = "default:tree", @@ -56,7 +63,7 @@ i3.register_craft { } } -i3.register_craft({ +i3.register_craft { grid = { "X", "#", @@ -68,9 +75,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X", "#X", @@ -82,9 +89,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X", }, @@ -93,10 +100,10 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X#", }, @@ -105,9 +112,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X#X", }, @@ -116,9 +123,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X#XX", }, @@ -127,9 +134,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X#XX", "X#X", @@ -139,9 +146,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X#XX", "X#X", @@ -152,9 +159,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X##XX", }, @@ -163,9 +170,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X##X#X", }, @@ -174,9 +181,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X##X#X", "", @@ -187,9 +194,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -201,9 +208,9 @@ i3.register_craft({ ['X'] = "default:glass 2", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -215,9 +222,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -230,9 +237,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -245,10 +252,10 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -262,9 +269,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -278,9 +285,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -294,9 +301,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -310,9 +317,9 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +} -i3.register_craft({ +i3.register_craft { grid = { "X #", " ## ", @@ -328,4 +335,4 @@ i3.register_craft({ ['X'] = "default:glass", }, result = "default:mese 3", -}) +}