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
1 changed files with 16 additions and 5 deletions

21
api.lua
View File

@ -1,18 +1,29 @@
-- Create detached creative inventory after loading all mods
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 = {}
for name, def in pairs(minetest.registered_items) do
if (not def.groups.not_in_creative_inventory or
def.groups.not_in_creative_inventory == 0) and
def.description and def.description ~= "" then
table.insert(unified_inventory.items_list, name)
local recipes = minetest.get_all_craft_recipes(name)
if recipes then
unified_inventory.crafts_table[name] = recipes
else
unified_inventory.crafts_table[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)
if recipes then
for _, recipe in ipairs(recipes) do
table.insert(all_recipes, recipe)
end
end
end
unified_inventory.crafts_table[name] = all_recipes
end
end
table.sort(unified_inventory.items_list)