summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client.cpp2
-rw-r--r--src/script/cpp_api/s_client.cpp11
-rw-r--r--src/script/cpp_api/s_client.h3
-rw-r--r--src/script/cpp_api/s_server.cpp11
-rw-r--r--src/script/cpp_api/s_server.h3
-rw-r--r--src/server/mods.cpp3
6 files changed, 33 insertions, 0 deletions
diff --git a/src/client.cpp b/src/client.cpp
index d2f585de7..18e43b1b6 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -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;
}
diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp
index a8d8c2de4..7be4fc6a9 100644
--- a/src/script/cpp_api/s_client.cpp
+++ b/src/script/cpp_api/s_client.cpp
@@ -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
diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h
index 402b44e33..93fe96791 100644
--- a/src/script/cpp_api/s_client.h
+++ b/src/script/cpp_api/s_client.h
@@ -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();
diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp
index 38bd41f87..b0459fbfa 100644
--- a/src/script/cpp_api/s_server.cpp
+++ b/src/script/cpp_api/s_server.cpp
@@ -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
diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h
index 74de19bee..769939d3f 100644
--- a/src/script/cpp_api/s_server.h
+++ b/src/script/cpp_api/s_server.h
@@ -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();
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index c246e6446..c5616dcd6 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -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