From 7df98f7b353b789ce81d4572bf1ee4c9ea5f459e Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 29 Jan 2024 01:37:40 +0300 Subject: [PATCH] lua: on_block_interact prevent default feature --- src/logic/PlayerController.cpp | 4 ++-- src/logic/scripting/scripting.cpp | 7 +++++-- src/logic/scripting/scripting.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 1b0ba530..8e7284fb 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -286,8 +286,8 @@ void PlayerController::updateInteraction(){ } if (def && rclick){ if (!input.shift && target->rt.funcsset.oninteract) { - scripting::on_block_interact(player, target, x, y, z); - return; + if (!scripting::on_block_interact(player, target, x, y, z)) + return; } if (!target->replaceable){ x = (iend.x)+(norm.x); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 3c62426f..81827c4d 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -181,12 +181,15 @@ void scripting::on_block_broken(Player* player, const Block* block, int x, int y call_func(L, 4, name); } -void scripting::on_block_interact(Player* player, const Block* block, int x, int y, int z) { +bool scripting::on_block_interact(Player* player, const Block* block, int x, int y, int z) { std::string name = block->name+".oninteract"; lua_getglobal(L, name.c_str()); lua_pushivec3(L, x, y, z); lua_pushinteger(L, 1); - call_func(L, 4, name); + if (call_func(L, 4, name)) { + return lua_toboolean(L, -1); + } + return false; } bool scripting::on_item_use_on_block(Player* player, const ItemDef* item, int x, int y, int z) { diff --git a/src/logic/scripting/scripting.h b/src/logic/scripting/scripting.h index fa0c1498..5698921c 100644 --- a/src/logic/scripting/scripting.h +++ b/src/logic/scripting/scripting.h @@ -28,7 +28,7 @@ namespace scripting { void random_update_block(const Block* block, int x, int y, int z); void on_block_placed(Player* player, const Block* block, int x, int y, int z); void on_block_broken(Player* player, const Block* block, int x, int y, int z); - void on_block_interact(Player* player, const Block* block, int x, int y, int z); + bool on_block_interact(Player* player, const Block* block, int x, int y, int z); bool on_item_use_on_block(Player* player, const ItemDef* item, int x, int y, int z); bool on_item_break_block(Player* player, const ItemDef* item, int x, int y, int z); void load_block_script(std::string prefix, fs::path file, block_funcs_set* funcsset);