diff --git a/builtin/async/game.lua b/builtin/async/game.lua index f7c9892c46..b6a8cc8871 100644 --- a/builtin/async/game.lua +++ b/builtin/async/game.lua @@ -32,8 +32,8 @@ do all.registered_craftitems = {} all.registered_tools = {} for k, v in pairs(all.registered_items) do - -- Disable further modification - setmetatable(v, {__newindex = {}}) + -- Ignore new keys + setmetatable(v, {__newindex = function() end}) -- Reassemble the other tables if v.type == "node" then getmetatable(v).__index = all.nodedef_default diff --git a/builtin/emerge/register.lua b/builtin/emerge/register.lua index 308fe4d7e4..2200a00873 100644 --- a/builtin/emerge/register.lua +++ b/builtin/emerge/register.lua @@ -9,8 +9,8 @@ do all.registered_craftitems = {} all.registered_tools = {} for k, v in pairs(all.registered_items) do - -- Disable further modification - setmetatable(v, {__newindex = {}}) + -- Ignore new keys + setmetatable(v, {__newindex = function() end}) -- Reassemble the other tables if v.type == "node" then getmetatable(v).__index = all.nodedef_default diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 3e4b9be968..e0d0018245 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -139,6 +139,12 @@ function core.register_item(name, itemdef) end itemdef.name = name + local mt = getmetatable(itemdef) + if mt ~= nil and next(mt) ~= nil then + core.log("warning", "Item definition has a metatable, this is ".. + "unsupported and it will be overwritten: " .. name) + end + -- Apply defaults and add to registered_* table if itemdef.type == "node" then -- Use the nodebox as selection box if it's not set manually @@ -194,8 +200,8 @@ function core.register_item(name, itemdef) itemdef.mod_origin = core.get_current_modname() or "??" - -- Disable all further modifications - getmetatable(itemdef).__newindex = {} + -- Ignore new keys as a failsafe to prevent mistakes + getmetatable(itemdef).__newindex = function() end --core.log("Registering item: " .. itemdef.name) core.registered_items[itemdef.name] = itemdef