diff options
-rw-r--r-- | builtin/client/register.lua | 1 | ||||
-rw-r--r-- | clientmods/preview/init.lua | 4 | ||||
-rw-r--r-- | doc/client_lua_api.md | 2 | ||||
-rw-r--r-- | src/client.cpp | 4 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.cpp | 11 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.h | 2 |
6 files changed, 24 insertions, 0 deletions
diff --git a/builtin/client/register.lua b/builtin/client/register.lua index 1c3966eda..e6ce25654 100644 --- a/builtin/client/register.lua +++ b/builtin/client/register.lua @@ -60,6 +60,7 @@ end core.registered_globalsteps, core.register_globalstep = make_registration() core.registered_on_shutdown, core.register_on_shutdown = make_registration() +core.registered_on_connect, core.register_on_connect = 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_death, core.register_on_death = make_registration() diff --git a/clientmods/preview/init.lua b/clientmods/preview/init.lua index 3c96fae55..5c0628bfe 100644 --- a/clientmods/preview/init.lua +++ b/clientmods/preview/init.lua @@ -6,6 +6,10 @@ core.register_on_shutdown(function() print("[PREVIEW] shutdown client") end) +core.register_on_connect(function() + print("[PREVIEW] Player connection completed") +end) + -- This is an example function to ensure it's working properly, should be removed before merge core.register_on_receiving_chat_messages(function(message) print("[PREVIEW] Received message " .. message) diff --git a/doc/client_lua_api.md b/doc/client_lua_api.md index 6d62de8a2..d68f90dec 100644 --- a/doc/client_lua_api.md +++ b/doc/client_lua_api.md @@ -639,6 +639,8 @@ Call these functions only at load time! * **Warning**: If the client terminates abnormally (i.e. crashes), the registered callbacks **will likely not be run**. Data should be saved at semi-frequent intervals as well as on server shutdown. +* `minetest.register_on_connect(func())` + * Called at the end of client connection (when player is loaded onto map) * `minetest.register_on_receiving_chat_message(func(name, message))` * Called always when a client receive a message * Return `true` to mark the message as handled, which means that it will not be shown to chat diff --git a/src/client.cpp b/src/client.cpp index e710624d5..3a3e33cfd 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1864,6 +1864,10 @@ void Client::afterContentReceived(IrrlichtDevice *device) m_state = LC_Ready; sendReady(); + + if (g_settings->getBool("enable_client_modding")) + m_script->on_connect(); + text = wgettext("Done!"); draw_load_screen(text, device, guienv, 0, 100); infostream<<"Client::afterContentReceived() done"<<std::endl; diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index 666fd693d..a8a7d5e26 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -35,6 +35,17 @@ void ScriptApiClient::on_shutdown() runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } +void ScriptApiClient::on_connect() +{ + SCRIPTAPI_PRECHECKHEADER + + // get registered connect hooks + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_connect"); + // Call callback + runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); +} + bool ScriptApiClient::on_sending_message(const std::string &message) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h index 9afc66d61..50e5e0d8a 100644 --- a/src/script/cpp_api/s_client.h +++ b/src/script/cpp_api/s_client.h @@ -36,6 +36,8 @@ class ScriptApiClient : virtual public ScriptApiBase public: // Calls on_shutdown handlers void on_shutdown(); + + void on_connect(); // Chat message handlers bool on_sending_message(const std::string &message); |