CSM/SSM: Add on_mods_loaded callback (#7411)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Wed, 6 Jun 2018 10:53:59 +0000 (12:53 +0200)
committerGitHub <noreply@github.com>
Wed, 6 Jun 2018 10:53:59 +0000 (12:53 +0200)
* CSM/SSM: Add on_mods_loaded callback

12 files changed:
builtin/client/register.lua
builtin/game/register.lua
clientmods/preview/init.lua
doc/client_lua_api.txt
doc/lua_api.txt
games/minimal/mods/experimental/init.lua
src/client.cpp
src/script/cpp_api/s_client.cpp
src/script/cpp_api/s_client.h
src/script/cpp_api/s_server.cpp
src/script/cpp_api/s_server.h
src/server/mods.cpp

index 95565523636bad5b5176508edecfed1a2e7f69b9..c1b4965c142c6ba0b3e4fd2ce9a54267fb42042e 100644 (file)
@@ -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()
index 15c08b045ba4d5089865b87049ff05d8049e4d50..6a7c4747f9b9e0dbc2ab973ae49990615f4a3d43 100644 (file)
@@ -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()
index 223577876bea404022f33346c502c74724a7715f..bb8d1d600c5d8595d341fe482dc1899d9b1ef7ba 100644 (file)
@@ -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)
index bdefa3af5a617bf48095d154c5151dab6b890a53..46b47d892b3f953c91f0be02d4399cd1cebf1412 100644 (file)
@@ -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
index b89ba47c60bbe65a3d670d990db9faae9f7eee28..d9cf96800beb858de846f8e9817304e98fc4fa6c 100644 (file)
@@ -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
index f4dc78b2126471b316a983c8b3da33dcb6245f2b..4d5c61488137acf51c2ddbe7bbe0bbf17e7533e7 100644 (file)
@@ -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
index d2f585de7a11b60699c19466980f190bfb81959e..18e43b1b6c651c648f74dcb69147e43744dde1ce 100644 (file)
@@ -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;
 }
 
index a8d8c2de4bf5a8d2c22235be90f29be5d56eeadd..7be4fc6a93fa14ed1fe32de3c21d8ab00f255d51 100644 (file)
@@ -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
index 402b44e337d8355fb9ddec907f1b59f96cdbb46f..93fe96791c577ddca1b4b7a6fe3f342137c7be98 100644 (file)
@@ -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();
 
index 38bd41f87ca13b89afdd2d1f42696efb7ea91f56..b0459fbfa0b77879785eb5922c2d5aa6d877fc2e 100644 (file)
@@ -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
index 74de19bee560e8e5fed209f3e7e325e9613c4ec5..769939d3fa2eb4e454b7e9aed9ac27819927251e 100644 (file)
@@ -30,6 +30,9 @@ public:
        // 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();
 
index c246e6446b5b869ea64d1ae9926b3dd989405ae8..c5616dcd6a3c32f08b7b0f151f052ed7eddc2961 100644 (file)
@@ -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