Look for recipes under an item's aliases

get_all_craft_recipes() returns the recipes that were registered under the
specified name, so asking about an item's canonical name won't see recipes
registered under an alias, and vice versa.  Several mods register recipes
under aliases, so the craft guide was missing that handful of recipes.
To work around it, invert the aliases table and ask explicitly about
each alias.
This commit is contained in:
Zefram 2014-04-22 20:12:49 +01:00 committed by ShadowNinja
parent 34a52a4c0f
commit fa0142c2c0

17
api.lua

@ -1,20 +1,31 @@
-- Create detached creative inventory after loading all mods -- Create detached creative inventory after loading all mods
minetest.after(0.01, function() minetest.after(0.01, function()
local rev_aliases = {}
for source, target in pairs(minetest.registered_aliases) do
if not rev_aliases[target] then rev_aliases[target] = {} end
table.insert(rev_aliases[target], source)
end
unified_inventory.items_list = {} unified_inventory.items_list = {}
for name, def in pairs(minetest.registered_items) do for name, def in pairs(minetest.registered_items) do
if (not def.groups.not_in_creative_inventory or if (not def.groups.not_in_creative_inventory or
def.groups.not_in_creative_inventory == 0) and def.groups.not_in_creative_inventory == 0) and
def.description and def.description ~= "" then def.description and def.description ~= "" then
table.insert(unified_inventory.items_list, name) table.insert(unified_inventory.items_list, name)
local all_names = rev_aliases[name] or {}
table.insert(all_names, name)
local all_recipes = {}
for _, name in ipairs(all_names) do
local recipes = minetest.get_all_craft_recipes(name) local recipes = minetest.get_all_craft_recipes(name)
if recipes then if recipes then
unified_inventory.crafts_table[name] = recipes for _, recipe in ipairs(recipes) do
else table.insert(all_recipes, recipe)
unified_inventory.crafts_table[name] = {}
end end
end end
end end
unified_inventory.crafts_table[name] = all_recipes
end
end
table.sort(unified_inventory.items_list) table.sort(unified_inventory.items_list)
unified_inventory.items_list_size = #unified_inventory.items_list unified_inventory.items_list_size = #unified_inventory.items_list
print("Unified Inventory. inventory size: "..unified_inventory.items_list_size) print("Unified Inventory. inventory size: "..unified_inventory.items_list_size)