]> git.lizzy.rs Git - dragonfireclient.git/blob - builtin/client/register.lua
Added JetPack and AutoHit (-> Credits to Code-Sploit and cora)
[dragonfireclient.git] / builtin / client / register.lua
1
2 core.callback_origins = {}
3
4 local getinfo = debug.getinfo
5 debug.getinfo = nil
6
7 function core.run_callbacks(callbacks, mode, ...)
8         assert(type(callbacks) == "table")
9         local cb_len = #callbacks
10         if cb_len == 0 then
11                 if mode == 2 or mode == 3 then
12                         return true
13                 elseif mode == 4 or mode == 5 then
14                         return false
15                 end
16         end
17         local ret
18         for i = 1, cb_len do
19                 local cb_ret = callbacks[i](...)
20
21                 if mode == 0 and i == 1 or mode == 1 and i == cb_len then
22                         ret = cb_ret
23                 elseif mode == 2 then
24                         if not cb_ret or i == 1 then
25                                 ret = cb_ret
26                         end
27                 elseif mode == 3 then
28                         if cb_ret then
29                                 return cb_ret
30                         end
31                         ret = cb_ret
32                 elseif mode == 4 then
33                         if (cb_ret and not ret) or i == 1 then
34                                 ret = cb_ret
35                         end
36                 elseif mode == 5 and cb_ret then
37                         return cb_ret
38                 end
39         end
40         return ret
41 end
42
43 function core.override_item(name, redefinition)
44         if redefinition.name ~= nil then
45                 error("Attempt to redefine name of "..name.." to "..dump(redefinition.name), 2)
46         end
47         if redefinition.type ~= nil then
48                 error("Attempt to redefine type of "..name.." to "..dump(redefinition.type), 2)
49         end
50         local itemdef = core.get_item_def(name)
51         if not itemdef then
52                 error("Attempt to override non-existent item "..name, 2)
53         end
54         local nodedef = core.get_node_def(name)
55         table.combine(itemdef, nodedef)
56         
57         for k, v in pairs(redefinition) do
58                 rawset(itemdef, k, v)
59         end
60         core.register_item_raw(itemdef)
61 end
62
63 --
64 -- Callback registration
65 --
66
67 local function make_registration()
68         local t = {}
69         local registerfunc = function(func)
70                 t[#t + 1] = func
71                 core.callback_origins[func] = {
72                         mod = core.get_current_modname() or "??",
73                         name = getinfo(1, "n").name or "??"
74                 }
75                 --local origin = core.callback_origins[func]
76                 --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
77         end
78         return t, registerfunc
79 end
80
81 core.registered_globalsteps, core.register_globalstep = make_registration()
82 core.registered_on_mods_loaded, core.register_on_mods_loaded = make_registration()
83 core.registered_on_shutdown, core.register_on_shutdown = make_registration()
84 core.registered_on_receiving_chat_message, core.register_on_receiving_chat_message = make_registration()
85 core.registered_on_sending_chat_message, core.register_on_sending_chat_message = make_registration()
86 core.registered_on_death, core.register_on_death = make_registration()
87 core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
88 core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
89 core.registered_on_formspec_input, core.register_on_formspec_input = make_registration()
90 core.registered_on_dignode, core.register_on_dignode = make_registration()
91 core.registered_on_punchnode, core.register_on_punchnode = make_registration()
92 core.registered_on_placenode, core.register_on_placenode = make_registration()
93 core.registered_on_item_use, core.register_on_item_use = make_registration()
94 core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
95 core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration()
96 core.registered_on_inventory_open, core.register_on_inventory_open = make_registration()
97 core.registered_on_recieve_physics_override, core.register_on_recieve_physics_override = make_registration()