Skip to content

Commit

Permalink
CSM/SSM: Add on_mods_loaded callback (#7411)
Browse files Browse the repository at this point in the history
* CSM/SSM: Add on_mods_loaded callback
  • Loading branch information
nerzhul committed Jun 6, 2018
1 parent a2de439 commit ccc3af1
Show file tree
Hide file tree
Showing 12 changed files with 50 additions and 0 deletions.
1 change: 1 addition & 0 deletions builtin/client/register.lua
Expand Up @@ -59,6 +59,7 @@ 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_message, core.register_on_receiving_chat_message = make_registration()
core.registered_on_sending_chat_message, core.register_on_sending_chat_message = make_registration()
Expand Down
1 change: 1 addition & 0 deletions builtin/game/register.lua
Expand Up @@ -569,6 +569,7 @@ core.unregister_biome = make_wrap_deregistration(core.register_biome, core.clear
core.registered_on_chat_messages, core.register_on_chat_message = make_registration()
core.registered_globalsteps, core.register_globalstep = make_registration()
core.registered_playerevents, core.register_playerevent = 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_punchnodes, core.register_on_punchnode = make_registration()
core.registered_on_placenodes, core.register_on_placenode = make_registration()
Expand Down
5 changes: 5 additions & 0 deletions clientmods/preview/init.lua
Expand Up @@ -200,3 +200,8 @@ core.register_chatcommand("text", {
return core.localplayer:hud_change(id, "text", param)
end,
})
core.register_on_mods_loaded(function()
core.log("Yeah preview mod is loaded with other CSM mods.")
end)
2 changes: 2 additions & 0 deletions doc/client_lua_api.txt
Expand Up @@ -648,6 +648,8 @@ Call these functions only at load time!

* `minetest.register_globalstep(func(dtime))`
* Called every client environment step, usually interval of 0.1s
* `minetest.register_on_mods_loaded(func())`
* Called just after mods have finished loading.
* `minetest.register_on_shutdown(func())`
* Called before client shutdown
* **Warning**: If the client terminates abnormally (i.e. crashes), the registered
Expand Down
3 changes: 3 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -2793,6 +2793,9 @@ Call these functions only at load time!

* `minetest.register_globalstep(func(dtime))`
* Called every server step, usually interval of 0.1s
* `minetest.register_on_mods_loaded(func())`
* Called after mods have finished loading and before the media is cached or the
aliases handled.
* `minetest.register_on_shutdown(func())`
* Called before server shutdown
* **Warning**: If the server terminates abnormally (i.e. crashes), the
Expand Down
5 changes: 5 additions & 0 deletions games/minimal/mods/experimental/init.lua
Expand Up @@ -765,4 +765,9 @@ minetest.log("experimental modname="..dump(minetest.get_current_modname()))
minetest.log("experimental modpath="..dump(minetest.get_modpath("experimental")))
minetest.log("experimental worldpath="..dump(minetest.get_worldpath()))


core.register_on_mods_loaded(function()
core.log("Yeah experimental loaded mods.")
end)

-- END
2 changes: 2 additions & 0 deletions src/client.cpp
Expand Up @@ -172,6 +172,8 @@ void Client::loadMods()
for (const ModSpec &mod : m_mods)
m_script->loadModFromMemory(mod.name);

// Run a callback when mods are loaded
m_script->on_mods_loaded();
m_mods_loaded = true;
}

Expand Down
11 changes: 11 additions & 0 deletions src/script/cpp_api/s_client.cpp
Expand Up @@ -25,6 +25,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "s_item.h"

void ScriptApiClient::on_mods_loaded()
{
SCRIPTAPI_PRECHECKHEADER

// Get registered shutdown hooks
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_mods_loaded");
// Call callbacks
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
}

void ScriptApiClient::on_shutdown()
{
SCRIPTAPI_PRECHECKHEADER
Expand Down
3 changes: 3 additions & 0 deletions src/script/cpp_api/s_client.h
Expand Up @@ -37,6 +37,9 @@ class ClientEnvironment;
class ScriptApiClient : virtual public ScriptApiBase
{
public:
// Calls when mods are loaded
void on_mods_loaded();

// Calls on_shutdown handlers
void on_shutdown();

Expand Down
11 changes: 11 additions & 0 deletions src/script/cpp_api/s_server.cpp
Expand Up @@ -147,6 +147,17 @@ bool ScriptApiServer::on_chat_message(const std::string &name,
return ate;
}

void ScriptApiServer::on_mods_loaded()
{
SCRIPTAPI_PRECHECKHEADER

// Get registered shutdown hooks
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_mods_loaded");
// Call callbacks
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
}

void ScriptApiServer::on_shutdown()
{
SCRIPTAPI_PRECHECKHEADER
Expand Down
3 changes: 3 additions & 0 deletions src/script/cpp_api/s_server.h
Expand Up @@ -30,6 +30,9 @@ class ScriptApiServer
// Returns true if script handled message
bool on_chat_message(const std::string &name, const std::string &message);

// Calls when mods are loaded
void on_mods_loaded();

// Calls on_shutdown handlers
void on_shutdown();

Expand Down
3 changes: 3 additions & 0 deletions src/server/mods.cpp
Expand Up @@ -75,6 +75,9 @@ void ServerModManager::loadMods(ServerScripting *script)
std::chrono::steady_clock::now() - t).count() * 0.001f
<< " seconds" << std::endl;
}

// Run a callback when mods are loaded
script->on_mods_loaded();
}

// clang-format on
Expand Down

0 comments on commit ccc3af1

Please sign in to comment.