]> git.lizzy.rs Git - dragonfireclient.git/blob - builtin/client/register.lua
Add support for 'seed' in disallow_mapgen_settings (#12023)
[dragonfireclient.git] / builtin / client / register.lua
1
2 core.callback_origins = {}
3
4 local getinfo = debug.getinfo
5 debug.getinfo = nil
6
7 --- Runs given callbacks.
8 --
9 -- Note: this function is also called from C++
10 -- @tparam table  callbacks a table with registered callbacks, like `core.registered_on_*`
11 -- @tparam number mode      a RunCallbacksMode, as defined in src/script/common/c_internal.h
12 -- @param         ...       arguments for the callback
13 -- @return depends on mode
14 function core.run_callbacks(callbacks, mode, ...)
15         assert(type(callbacks) == "table")
16         local cb_len = #callbacks
17         if cb_len == 0 then
18                 if mode == 2 or mode == 3 then
19                         return true
20                 elseif mode == 4 or mode == 5 then
21                         return false
22                 end
23         end
24         local ret
25         for i = 1, cb_len do
26                 local cb_ret = callbacks[i](...)
27
28                 if mode == 0 and i == 1 or mode == 1 and i == cb_len then
29                         ret = cb_ret
30                 elseif mode == 2 then
31                         if not cb_ret or i == 1 then
32                                 ret = cb_ret
33                         end
34                 elseif mode == 3 then
35                         if cb_ret then
36                                 return cb_ret
37                         end
38                         ret = cb_ret
39                 elseif mode == 4 then
40                         if (cb_ret and not ret) or i == 1 then
41                                 ret = cb_ret
42                         end
43                 elseif mode == 5 and cb_ret then
44                         return cb_ret
45                 end
46         end
47         return ret
48 end
49
50 --
51 -- Callback registration
52 --
53
54 local function make_registration()
55         local t = {}
56         local registerfunc = function(func)
57                 t[#t + 1] = func
58                 core.callback_origins[func] = {
59                         mod = core.get_current_modname() or "??",
60                         name = getinfo(1, "n").name or "??"
61                 }
62                 --local origin = core.callback_origins[func]
63                 --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
64         end
65         return t, registerfunc
66 end
67
68 core.registered_globalsteps, core.register_globalstep = make_registration()
69 core.registered_on_mods_loaded, core.register_on_mods_loaded = make_registration()
70 core.registered_on_shutdown, core.register_on_shutdown = make_registration()
71 core.registered_on_receiving_chat_message, core.register_on_receiving_chat_message = make_registration()
72 core.registered_on_sending_chat_message, core.register_on_sending_chat_message = make_registration()
73 core.registered_on_chatcommand, core.register_on_chatcommand = make_registration()
74 core.registered_on_death, core.register_on_death = make_registration()
75 core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
76 core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
77 core.registered_on_formspec_input, core.register_on_formspec_input = make_registration()
78 core.registered_on_dignode, core.register_on_dignode = make_registration()
79 core.registered_on_punchnode, core.register_on_punchnode = make_registration()
80 core.registered_on_placenode, core.register_on_placenode = make_registration()
81 core.registered_on_item_use, core.register_on_item_use = make_registration()
82 core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
83 core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration()
84 core.registered_on_inventory_open, core.register_on_inventory_open = make_registration()