diff options
-rw-r--r-- | builtin/client/register.lua | 1 | ||||
-rw-r--r-- | doc/client_lua_api.txt | 4 | ||||
-rw-r--r-- | src/network/clientpackethandler.cpp | 7 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.cpp | 16 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.h | 1 |
5 files changed, 28 insertions, 1 deletions
diff --git a/builtin/client/register.lua b/builtin/client/register.lua index c6374ab41..ef48f2ee6 100644 --- a/builtin/client/register.lua +++ b/builtin/client/register.lua @@ -95,3 +95,4 @@ core.registered_on_modchannel_message, core.register_on_modchannel_message = mak core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration() core.registered_on_inventory_open, core.register_on_inventory_open = make_registration() core.registered_on_recieve_physics_override, core.register_on_recieve_physics_override = make_registration() +core.registered_on_play_sound, core.register_on_play_sound = make_registration() diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt index dd7bb3808..ea6f4e13f 100644 --- a/doc/client_lua_api.txt +++ b/doc/client_lua_api.txt @@ -750,6 +750,10 @@ Call these functions only at load time! * Called when recieving physics_override from server * Newest functions are called first * If any function returns true, the physics override does not change +* `minetest.register_on_sound_play(function(SimpleSoundSpec))` + * Called when recieving a play sound command from server + * Newest functions are called first + * If any function returns true, the sound does not play ### Setting-related * `minetest.settings`: Settings object containing all of the settings from the diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index f0fb09fad..a3f1e668d 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -833,7 +833,12 @@ void Client::handleCommand_PlaySound(NetworkPacket* pkt) *pkt >> pitch; *pkt >> ephemeral; } catch (PacketError &e) {}; - + + SimpleSoundSpec sound_spec(name, gain, fade, pitch); + + if (m_mods_loaded && m_script->on_play_sound(sound_spec)) + return; + // Start playing int client_id = -1; switch(type) { diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index 981b08537..cf7df5b5d 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -237,6 +237,22 @@ bool ScriptApiClient::on_recieve_physics_override(float speed, float jump, float 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_inventory_open(Inventory *inventory) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h index 2ad3bcfad..8db253d56 100644 --- a/src/script/cpp_api/s_client.h +++ b/src/script/cpp_api/s_client.h @@ -58,6 +58,7 @@ public: bool on_placenode(const PointedThing &pointed, const ItemDefinition &item); bool on_item_use(const ItemStack &item, const PointedThing &pointed); bool on_recieve_physics_override(float override_speed, float override_jump, float override_gravity, bool sneak, bool sneak_glitch, bool new_move); + bool on_play_sound(SimpleSoundSpec spec); bool on_inventory_open(Inventory *inventory); void open_enderchest(); |