aboutsummaryrefslogtreecommitdiff
path: root/builtin/game
diff options
context:
space:
mode:
authorLars Müller <34514239+appgurueu@users.noreply.github.com>2022-05-09 20:42:43 +0200
committerGitHub <noreply@github.com>2022-05-09 20:42:43 +0200
commit089797dbe68679b744304ba016e08d30df15ab28 (patch)
treefb0d755c98145dc60fca79bb361552735b8112cf /builtin/game
parent53c70b5f27f2978029cb40845a82b681c844ec42 (diff)
downloadminetest-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.lua4
-rw-r--r--builtin/game/register.lua14
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