]> git.lizzy.rs Git - dragonfireclient.git/blob - builtin/client/register.lua
[CSM] implement client side mod loading (#5123)
[dragonfireclient.git] / builtin / client / register.lua
1
2 core.callback_origins = {}
3
4 function core.run_callbacks(callbacks, mode, ...)
5         assert(type(callbacks) == "table")
6         local cb_len = #callbacks
7         if cb_len == 0 then
8                 if mode == 2 or mode == 3 then
9                         return true
10                 elseif mode == 4 or mode == 5 then
11                         return false
12                 end
13         end
14         local ret
15         for i = 1, cb_len do
16                 local cb_ret = callbacks[i](...)
17
18                 if mode == 0 and i == 1 or mode == 1 and i == cb_len then
19                         ret = cb_ret
20                 elseif mode == 2 then
21                         if not cb_ret or i == 1 then
22                                 ret = cb_ret
23                         end
24                 elseif mode == 3 then
25                         if cb_ret then
26                                 return cb_ret
27                         end
28                         ret = cb_ret
29                 elseif mode == 4 then
30                         if (cb_ret and not ret) or i == 1 then
31                                 ret = cb_ret
32                         end
33                 elseif mode == 5 and cb_ret then
34                         return cb_ret
35                 end
36         end
37         return ret
38 end
39
40 --
41 -- Callback registration
42 --
43
44 local function make_registration()
45         local t = {}
46         local registerfunc = function(func)
47                 t[#t + 1] = func
48                 core.callback_origins[func] = {
49                         mod = core.get_current_modname() or "??",
50                         name = debug.getinfo(1, "n").name or "??"
51                 }
52                 --local origin = core.callback_origins[func]
53                 --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
54         end
55         return t, registerfunc
56 end
57
58 core.registered_globalsteps, core.register_globalstep = make_registration()
59 core.registered_on_shutdown, core.register_on_shutdown = make_registration()
60 core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration()
61 core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration()
62 core.registered_on_death, core.register_on_death = make_registration()
63 core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
64 core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
65 core.registered_on_formspec_input, core.register_on_formspec_input = make_registration()
66
67