From 3a9ef7a65f2440aaa8d58d83f90f8f591f4c023c Mon Sep 17 00:00:00 2001 From: teknomunk Date: Tue, 28 May 2024 18:29:21 -0500 Subject: [PATCH] Track items as they are registered for use in building the creative menu without relying on pairs(minetest.registered_items) working correctly --- mods/CORE/mcl_init/init.lua | 16 ++++++++++++++++ mods/HUD/mcl_inventory/creative.lua | 10 ++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/mods/CORE/mcl_init/init.lua b/mods/CORE/mcl_init/init.lua index 3a0f1c4e5..a099f2136 100644 --- a/mods/CORE/mcl_init/init.lua +++ b/mods/CORE/mcl_init/init.lua @@ -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 + diff --git a/mods/HUD/mcl_inventory/creative.lua b/mods/HUD/mcl_inventory/creative.lua index 4898423b0..fde4aeafc 100644 --- a/mods/HUD/mcl_inventory/creative.lua +++ b/mods/HUD/mcl_inventory/creative.lua @@ -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