X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fscript%2Fcpp_api%2Fs_client.cpp;h=200a449eedda2a7568a0ab0dde531583b01ae96f;hb=8b3eaf5b05379f995bf8d55532c107b190848a69;hp=b2dcc60c4c1b86c509c2083efe93bd644505ec94;hpb=44495ea719b98aca341b9082521d0d4ee51405c8;p=dragonfireclient.git diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index b2dcc60c4..200a449ee 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -20,30 +20,30 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "s_client.h" #include "s_internal.h" -#include "client.h" +#include "client/client.h" #include "common/c_converter.h" #include "common/c_content.h" #include "s_item.h" -void ScriptApiClient::on_shutdown() +void ScriptApiClient::on_mods_loaded() { SCRIPTAPI_PRECHECKHEADER // Get registered shutdown hooks lua_getglobal(L, "core"); - lua_getfield(L, -1, "registered_on_shutdown"); + lua_getfield(L, -1, "registered_on_mods_loaded"); // Call callbacks runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } -void ScriptApiClient::on_connect() +void ScriptApiClient::on_shutdown() { SCRIPTAPI_PRECHECKHEADER - // get registered connect hooks + // Get registered shutdown hooks lua_getglobal(L, "core"); - lua_getfield(L, -1, "registered_on_connect"); - // Call callback + lua_getfield(L, -1, "registered_on_shutdown"); + // Call callbacks runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } @@ -57,8 +57,7 @@ bool ScriptApiClient::on_sending_message(const std::string &message) // Call callbacks lua_pushstring(L, message.c_str()); runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC); - bool ate = lua_toboolean(L, -1); - return ate; + return readParam(L, -1); } bool ScriptApiClient::on_receiving_message(const std::string &message) @@ -71,8 +70,7 @@ bool ScriptApiClient::on_receiving_message(const std::string &message) // Call callbacks lua_pushstring(L, message.c_str()); runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC); - bool ate = lua_toboolean(L, -1); - return ate; + return readParam(L, -1); } void ScriptApiClient::on_damage_taken(int32_t damage_amount) @@ -155,7 +153,7 @@ bool ScriptApiClient::on_dignode(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER - INodeDefManager *ndef = getClient()->ndef(); + const NodeDefManager *ndef = getClient()->ndef(); // Get core.registered_on_dignode lua_getglobal(L, "core"); @@ -174,7 +172,7 @@ bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER - INodeDefManager *ndef = getClient()->ndef(); + const NodeDefManager *ndef = getClient()->ndef(); // Get core.registered_on_punchgnode lua_getglobal(L, "core"); @@ -186,8 +184,7 @@ bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node) // Call functions runCallbacks(2, RUN_CALLBACKS_MODE_OR); - bool blocked = lua_toboolean(L, -1); - return blocked; + return readParam(L, -1); } bool ScriptApiClient::on_placenode(const PointedThing &pointed, const ItemDefinition &item) @@ -204,7 +201,7 @@ bool ScriptApiClient::on_placenode(const PointedThing &pointed, const ItemDefini // Call functions runCallbacks(2, RUN_CALLBACKS_MODE_OR); - return lua_toboolean(L, -1); + return readParam(L, -1); } bool ScriptApiClient::on_item_use(const ItemStack &item, const PointedThing &pointed) @@ -221,7 +218,103 @@ bool ScriptApiClient::on_item_use(const ItemStack &item, const PointedThing &poi // Call functions runCallbacks(2, RUN_CALLBACKS_MODE_OR); - return lua_toboolean(L, -1); + return readParam(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(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(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(L, -1); +} + +bool ScriptApiClient::on_inventory_open(Inventory *inventory) +{ + SCRIPTAPI_PRECHECKHEADER + + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_inventory_open"); + + push_inventory(L, inventory); + + runCallbacks(1, RUN_CALLBACKS_MODE_OR); + return readParam(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); } void ScriptApiClient::setEnv(ClientEnvironment *env)