From 43c9c38a281f1aa88c3fc37c826176f5a716be1a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 24 Jun 2023 17:58:43 +0200 Subject: [PATCH] Fix itemdef defaults not being applied in async env --- builtin/async/game.lua | 5 +++++ builtin/game/misc.lua | 5 +++++ games/devtest/mods/unittests/inside_async_env.lua | 2 ++ 3 files changed, 12 insertions(+) diff --git a/builtin/async/game.lua b/builtin/async/game.lua index 28887d1e4..f7c9892c4 100644 --- a/builtin/async/game.lua +++ b/builtin/async/game.lua @@ -36,11 +36,16 @@ do setmetatable(v, {__newindex = {}}) -- Reassemble the other tables if v.type == "node" then + getmetatable(v).__index = all.nodedef_default all.registered_nodes[k] = v elseif v.type == "craft" then + getmetatable(v).__index = all.craftitemdef_default all.registered_craftitems[k] = v elseif v.type == "tool" then + getmetatable(v).__index = all.tooldef_default all.registered_tools[k] = v + else + getmetatable(v).__index = all.noneitemdef_default end end diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index fd0cacc8f..a30c42fa0 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -261,6 +261,11 @@ function core.get_globals_to_transfer() local all = { registered_items = copy_filtering(core.registered_items), registered_aliases = core.registered_aliases, + + nodedef_default = copy_filtering(core.nodedef_default), + craftitemdef_default = copy_filtering(core.craftitemdef_default), + tooldef_default = copy_filtering(core.tooldef_default), + noneitemdef_default = copy_filtering(core.noneitemdef_default), } return all end diff --git a/games/devtest/mods/unittests/inside_async_env.lua b/games/devtest/mods/unittests/inside_async_env.lua index f5a90eb2c..7228d383d 100644 --- a/games/devtest/mods/unittests/inside_async_env.lua +++ b/games/devtest/mods/unittests/inside_async_env.lua @@ -19,6 +19,8 @@ local function do_tests() -- alias handling assert(core.registered_items["unittests:steel_ingot_alias"].name == "unittests:steel_ingot") + -- fallback to item defaults + assert(core.registered_items["unittests:description_test"].on_place == true) end function unittests.async_test()