diff options
author | Lars Müller <34514239+appgurueu@users.noreply.github.com> | 2022-05-09 20:42:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-09 20:42:43 +0200 |
commit | 089797dbe68679b744304ba016e08d30df15ab28 (patch) | |
tree | fb0d755c98145dc60fca79bb361552735b8112cf /builtin/game | |
parent | 53c70b5f27f2978029cb40845a82b681c844ec42 (diff) | |
download | minetest-089797dbe68679b744304ba016e08d30df15ab28.tar.gz minetest-089797dbe68679b744304ba016e08d30df15ab28.tar.bz2 minetest-089797dbe68679b744304ba016e08d30df15ab28.zip |
Fix Minetest blaming the wrong mod for errors (#12241)
Covers the case where mods insert their callbacks manually into "minetest.registered_<callbacks>" (often to achieve a particular order of execution).
Diffstat (limited to 'builtin/game')
-rw-r--r-- | builtin/game/item.lua | 4 | ||||
-rw-r--r-- | builtin/game/register.lua | 14 |
2 files changed, 10 insertions, 8 deletions
diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 439a71679..5543e9a3f 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -529,9 +529,7 @@ function core.node_dig(pos, node, digger) -- Run script hook for _, callback in ipairs(core.registered_on_dignodes) do local origin = core.callback_origins[callback] - if origin then - core.set_last_run_mod(origin.mod) - end + core.set_last_run_mod(origin.mod) -- Copy pos and node because callback can modify them local pos_copy = vector.new(pos) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 56e40c75c..0be107c36 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -403,8 +403,14 @@ function core.override_item(name, redefinition) register_item_raw(item) end - -core.callback_origins = {} +do + local default = {mod = "??", name = "??"} + core.callback_origins = setmetatable({}, { + __index = function() + return default + end + }) +end function core.run_callbacks(callbacks, mode, ...) assert(type(callbacks) == "table") @@ -419,9 +425,7 @@ function core.run_callbacks(callbacks, mode, ...) local ret = nil for i = 1, cb_len do local origin = core.callback_origins[callbacks[i]] - if origin then - core.set_last_run_mod(origin.mod) - end + core.set_last_run_mod(origin.mod) local cb_ret = callbacks[i](...) if mode == 0 and i == 1 then |