]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/cpp_api/s_client.cpp
Merge branch 'master' of https://github.com/minetest/minetest
[dragonfireclient.git] / src / script / cpp_api / s_client.cpp
index b02a0c7beae294a0407c338d2bacc826e9b3b141..e54a1361d190cbe727d4fc28f7d727eb4b916b8f 100644 (file)
@@ -18,11 +18,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
+#include "nodedef.h"
+#include "itemdef.h"
 #include "s_client.h"
 #include "s_internal.h"
 #include "client/client.h"
 #include "common/c_converter.h"
 #include "common/c_content.h"
+#include "lua_api/l_clientobject.h"
 #include "s_item.h"
 
 void ScriptApiClient::on_mods_loaded()
@@ -212,7 +215,7 @@ bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node)
 
        const NodeDefManager *ndef = getClient()->ndef();
 
-       // Get core.registered_on_punchgnode
+       // Get core.registered_on_punchnode
        lua_getglobal(L, "core");
        lua_getfield(L, -1, "registered_on_punchnode");
 
@@ -274,6 +277,121 @@ bool ScriptApiClient::on_item_use(const ItemStack &item, const PointedThing &poi
        return readParam<bool>(L, -1);
 }
 
+bool ScriptApiClient::on_recieve_physics_override(float speed, float jump, float gravity, bool sneak, bool sneak_glitch, bool new_move)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_recieve_physics_override
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_recieve_physics_override");
+
+       // Push data
+       push_physics_override(L, speed, jump, gravity, sneak, sneak_glitch, new_move);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+       return readParam<bool>(L, -1);
+}
+
+bool ScriptApiClient::on_play_sound(SimpleSoundSpec spec)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_play_sound
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_play_sound");
+
+       // Push data
+       push_soundspec(L, spec);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+       return readParam<bool>(L, -1);
+}
+
+bool ScriptApiClient::on_spawn_particle(struct ParticleParameters param)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_play_sound
+
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_spawn_particle");
+
+       // Push data
+       lua_newtable(L);
+       push_v3f(L, param.pos);
+       lua_setfield(L, -2, "pos");
+       push_v3f(L, param.vel);
+       lua_setfield(L, -2, "velocity");
+       push_v3f(L, param.acc);
+       lua_setfield(L, -2, "acceleration");
+       setfloatfield(L, -1, "expirationtime", param.expirationtime);
+       setboolfield(L, -1, "collisiondetection", param.collisiondetection);
+       setboolfield(L, -1, "collision_removal", param.collision_removal);
+       setboolfield(L, -1, "object_collision", param.object_collision);
+       setboolfield(L, -1, "vertical", param.vertical);
+       push_animation_definition(L, param.animation);
+       lua_setfield(L, -2, "animation");
+       setstringfield(L, -1, "texture", param.texture);
+       setintfield(L, -1, "glow", param.glow);
+       if (param.node.getContent() != CONTENT_IGNORE) {
+               pushnode(L, param.node, getGameDef()->ndef());
+               lua_setfield(L, -2, "node");
+       }
+       setintfield(L, -1, "node_tile", param.node_tile);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+       return readParam<bool>(L, -1);
+}
+
+void ScriptApiClient::on_object_properties_change(s16 id)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_object_properties_change
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_object_properties_change");
+
+       // Push data
+       push_objectRef(L, id);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
+}
+
+void ScriptApiClient::on_object_hp_change(s16 id)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_object_hp_change
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_object_hp_change");
+
+       // Push data
+       push_objectRef(L, id);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
+}
+
+bool ScriptApiClient::on_object_add(s16 id)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       // Get core.registered_on_object_add
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_on_object_add");
+
+       // Push data
+       push_objectRef(L, id);
+
+       // Call functions
+       runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+       return readParam<bool>(L, -1);
+}
+
 bool ScriptApiClient::on_inventory_open(Inventory *inventory)
 {
        SCRIPTAPI_PRECHECKHEADER
@@ -292,6 +410,63 @@ bool ScriptApiClient::on_inventory_open(Inventory *inventory)
        return readParam<bool>(L, -1);
 }
 
+void ScriptApiClient::open_enderchest()
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       PUSH_ERROR_HANDLER(L);
+       int error_handler = lua_gettop(L) - 1;
+       lua_insert(L, error_handler);
+
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "open_enderchest");
+       if (lua_isfunction(L, -1))
+               lua_pcall(L, 0, 0, error_handler);
+}
+
+v3f ScriptApiClient::get_send_speed(v3f speed)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       PUSH_ERROR_HANDLER(L);
+       int error_handler = lua_gettop(L) - 1;
+       lua_insert(L, error_handler);
+
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "get_send_speed");
+       if (lua_isfunction(L, -1)) {
+               speed /= BS;
+               push_v3f(L, speed);
+               lua_pcall(L, 1, 1, error_handler);
+               speed = read_v3f(L, -1);
+               speed *= BS;
+       }
+
+       return speed;
+}
+
+void ScriptApiClient::set_node_def(const ContentFeatures &f)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_nodes");
+
+       push_content_features(L, f);
+       lua_setfield(L, -2, f.name.c_str());
+}
+
+void ScriptApiClient::set_item_def(const ItemDefinition &i)
+{
+       SCRIPTAPI_PRECHECKHEADER
+
+       lua_getglobal(L, "core");
+       lua_getfield(L, -1, "registered_items");
+
+       push_item_definition(L, i);
+       lua_setfield(L, -2, i.name.c_str());
+}
+
 void ScriptApiClient::setEnv(ClientEnvironment *env)
 {
        ScriptApiBase::setEnv(env);