mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-28 22:25:20 +01:00 
			
		
		
		
	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).
This commit is contained in:
		| @@ -1,4 +1,3 @@ | ||||
|  | ||||
| core.callback_origins = {} | ||||
|  | ||||
| local getinfo = debug.getinfo | ||||
|   | ||||
| @@ -676,9 +676,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) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user