]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/cpp_api/s_client.cpp
code style fix on src/script/cpp_api/s_client.h
[dragonfireclient.git] / src / script / cpp_api / s_client.cpp
index ce88d67e38d874f0641b1473d272bfdd857cf8a0..a8a7d5e262b99ae8101f74812e9d0eecc34b9a86 100644 (file)
@@ -21,6 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "s_client.h"
 #include "s_internal.h"
 #include "client.h"
+#include "common/c_converter.h"
+#include "common/c_content.h"
 
 void ScriptApiClient::on_shutdown()
 {
@@ -33,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
@@ -112,3 +125,71 @@ void ScriptApiClient::environment_step(float dtime)
                                + script_get_backtrace(L));
        }
 }
+
+void ScriptApiClient::on_formspec_input(const std::string &formname,
+       const StringMap &fields)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_chat_messages
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_formspec_input");
+       // Call callbacks
+       // param 1
+       lua_pushstring(L, formname.c_str());
+       // param 2
+       lua_newtable(L);
+       StringMap::const_iterator it;
+       for (it = fields.begin(); it != fields.end(); ++it) {
+               const std::string &name = it->first;
+               const std::string &value = it->second;
+               lua_pushstring(L, name.c_str());
+               lua_pushlstring(L, value.c_str(), value.size());
+               lua_settable(L, -3);
+       }
+       runCallbacks(2, RUN_CALLBACKS_MODE_OR_SC);
+}
+
+bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       INodeDefManager *ndef = getClient()->ndef();
+
+       // Get core.registered_on_dignode
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_dignode");
+
+       // Push data
+       push_v3s16(L, p);
+       pushnode(L, node, ndef);
+
+       // Call functions
+       runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+       return lua_toboolean(L, -1);
+}
+
+bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       INodeDefManager *ndef = getClient()->ndef();
+
+       // Get core.registered_on_punchgnode
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_punchnode");
+
+       // Push data
+       push_v3s16(L, p);
+       pushnode(L, node, ndef);
+
+       // Call functions
+       runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+       bool blocked = lua_toboolean(L, -1);
+       return blocked;
+}
+
+void ScriptApiClient::setEnv(ClientEnvironment *env)
+{
+       ScriptApiBase::setEnv(env);
+}