Track items as they are registered for use in building the creative menu without relying on pairs(minetest.registered_items) working correctly

This commit is contained in:
teknomunk 2024-05-28 18:29:21 -05:00
parent 067ad7b78b
commit 3a9ef7a65f
2 changed files with 24 additions and 2 deletions

View File

@ -282,3 +282,19 @@ function mcl_vars.get_node(pos, force, us_timeout)
return node
-- it still can return "ignore", LOL, even if force = true, but only after time out
end
-- Workaround because pairs() doesn't always work as expected
do
local old_minetest_register_item = minetest.register_item
local items_registered = {}
mcl_vars.items_registered = items_registered
minetest.register_item = function(name, itemdef)
if name:sub(1,1) == ":" then
items_registered[#items_registered + 1] = name:sub(2)
else
items_registered[#items_registered + 1] = name
end
return old_minetest_register_item(name, itemdef)
end
end

View File

@ -47,7 +47,13 @@ end
-- Populate all the item tables. We only do this once.
-- Note this code must be executed after loading all the other mods in order to work.
minetest.register_on_mods_loaded(function()
for name, def in pairs(minetest.registered_items) do
-- Workaround because pairs() doesn't always working as expected
local items_registered = mcl_vars.items_registered
mcl_vars.items_registered = nil -- cleanup after ourselves
for i = 1,#items_registered do
local name = items_registered[i]
local def = minetest.registered_items[name]
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and
def.description ~= "" then
---@param def mt.ItemDef|mt.NodeDef
@ -142,7 +148,7 @@ minetest.register_on_mods_loaded(function()
table.insert(inventory_lists["all"], name)
end
end
end -- for i = 1,#items_registered do
for ench, def in pairs(mcl_enchanting.enchantments) do
local str = "mcl_enchanting:book_enchanted " .. ench .. " " .. def.max_level