X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=builtin%2Fclient%2Fregister.lua;h=2b5526523f486052a407505cf0d6388ff07afb88;hb=946f3030fc0728de15620896e08ed7e10696c11b;hp=c8a5ddbda6b389a5082661cc9a275a10a7a3776b;hpb=073f5cf03d95ce1cdf04ce8a0adcaf1fc571d95f;p=dragonfireclient.git diff --git a/builtin/client/register.lua b/builtin/client/register.lua index c8a5ddbda..2b5526523 100644 --- a/builtin/client/register.lua +++ b/builtin/client/register.lua @@ -4,6 +4,13 @@ core.callback_origins = {} local getinfo = debug.getinfo debug.getinfo = nil +--- Runs given callbacks. +-- +-- Note: this function is also called from C++ +-- @tparam table callbacks a table with registered callbacks, like `core.registered_on_*` +-- @tparam number mode a RunCallbacksMode, as defined in src/script/common/c_internal.h +-- @param ... arguments for the callback +-- @return depends on mode function core.run_callbacks(callbacks, mode, ...) assert(type(callbacks) == "table") local cb_len = #callbacks @@ -40,6 +47,26 @@ function core.run_callbacks(callbacks, mode, ...) return ret end +function core.override_item(name, redefinition) + if redefinition.name ~= nil then + error("Attempt to redefine name of "..name.." to "..dump(redefinition.name), 2) + end + if redefinition.type ~= nil then + error("Attempt to redefine type of "..name.." to "..dump(redefinition.type), 2) + end + local itemdef = core.get_item_def(name) + if not itemdef then + error("Attempt to override non-existent item "..name, 2) + end + local nodedef = core.get_node_def(name) + table.combine(itemdef, nodedef) + + for k, v in pairs(redefinition) do + rawset(itemdef, k, v) + end + core.register_item_raw(itemdef) +end + -- -- Callback registration -- @@ -59,13 +86,25 @@ local function make_registration() end core.registered_globalsteps, core.register_globalstep = make_registration() +core.registered_on_mods_loaded, core.register_on_mods_loaded = make_registration() core.registered_on_shutdown, core.register_on_shutdown = make_registration() -core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration() -core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration() +core.registered_on_receiving_chat_message, core.register_on_receiving_chat_message = make_registration() +core.registered_on_sending_chat_message, core.register_on_sending_chat_message = make_registration() +core.registered_on_chatcommand, core.register_on_chatcommand = make_registration() core.registered_on_death, core.register_on_death = make_registration() core.registered_on_hp_modification, core.register_on_hp_modification = make_registration() core.registered_on_damage_taken, core.register_on_damage_taken = make_registration() core.registered_on_formspec_input, core.register_on_formspec_input = make_registration() core.registered_on_dignode, core.register_on_dignode = make_registration() +core.registered_on_punchnode, core.register_on_punchnode = make_registration() +core.registered_on_placenode, core.register_on_placenode = make_registration() +core.registered_on_item_use, core.register_on_item_use = make_registration() +core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration() +core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration() +core.registered_on_inventory_open, core.register_on_inventory_open = make_registration() +core.registered_on_recieve_physics_override, core.register_on_recieve_physics_override = make_registration() +core.registered_on_play_sound, core.register_on_play_sound = make_registration() +core.registered_on_spawn_particle, core.register_on_spawn_particle = make_registration() - +core.registered_nodes = {} +core.registered_items = {}