diff --git a/doc/en/scripting/events.md b/doc/en/scripting/events.md index 76a69105..cbcc9f7a 100644 --- a/doc/en/scripting/events.md +++ b/doc/en/scripting/events.md @@ -51,7 +51,7 @@ function on_use(playerid: int) Called on RMB click out of a block. ```lua -function on_use_on_block(x: int, y: int, z: int, playerid: int) +function on_use_on_block(x: int, y: int, z: int, playerid: int, normal: vec3) ``` Called on block RMB click. Prevents block **placing-block** placing if returns **true** diff --git a/doc/ru/scripting/events.md b/doc/ru/scripting/events.md index ecfd2db9..082cef39 100644 --- a/doc/ru/scripting/events.md +++ b/doc/ru/scripting/events.md @@ -51,9 +51,7 @@ function on_use(playerid: int) Вызывается при нажатии ПКМ не на блок. ```lua - -function on_use_on_block(x: int, y: int, z: int, playerid: int) - +function on_use_on_block(x: int, y: int, z: int, playerid: int, normal: vec3) ``` Вызывается при нажатии ПКМ на блок. Предотвращает установку блока, прописанного в `placing-block` если возвращает `true` diff --git a/src/engine.cpp b/src/engine.cpp index 81f85f64..cd88298f 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -50,12 +50,12 @@ static debug::Logger logger("engine"); namespace fs = std::filesystem; -void addWorldGenerators() { +static void add_world_generators() { WorldGenerators::addGenerator("core:default"); WorldGenerators::addGenerator("core:flat"); } -inline void create_channel(Engine* engine, std::string name, NumberSetting& setting) { +static void create_channel(Engine* engine, std::string name, NumberSetting& setting) { if (name != "master") { audio::create_channel(name); } @@ -114,7 +114,7 @@ Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, Engin keepAlive(settings.ui.language.observe([=](auto lang) { setLanguage(lang); }, true)); - addWorldGenerators(); + add_world_generators(); scripting::initialize(this); basePacks = files::read_list(resdir/fs::path("config/builtins.list")); diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 3afd98a6..ba1f1069 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -503,7 +503,7 @@ void PlayerController::updateInteraction() { bool preventDefault = false; if (item->rt.funcsset.on_use_on_block) { preventDefault = scripting::on_item_use_on_block( - player.get(), item, iend.x, iend.y, iend.z + player.get(), item, iend, selection.normal ); } else if (item->rt.funcsset.on_use) { preventDefault = scripting::on_item_use(player.get(), item); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 7e4d2187..6e9de016 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -277,12 +277,13 @@ bool scripting::on_item_use(Player* player, const ItemDef* item) { }); } -bool scripting::on_item_use_on_block(Player* player, const ItemDef* item, int x, int y, int z) { +bool scripting::on_item_use_on_block(Player* player, const ItemDef* item, glm::ivec3 ipos, glm::ivec3 normal) { std::string name = item->name + ".useon"; - return lua::emit_event(lua::get_main_thread(), name, [x, y, z, player] (auto L) { - lua::pushivec3_stack(L, x, y, z); + return lua::emit_event(lua::get_main_thread(), name, [ipos, normal, player] (auto L) { + lua::pushivec3_stack(L, ipos.x, ipos.y, ipos.z); lua::pushinteger(L, player->getId()); - return 4; + lua::pushivec(L, normal); + return 5; }); } diff --git a/src/logic/scripting/scripting.hpp b/src/logic/scripting/scripting.hpp index a2778c76..d4cd4090 100644 --- a/src/logic/scripting/scripting.hpp +++ b/src/logic/scripting/scripting.hpp @@ -71,7 +71,7 @@ namespace scripting { /// @brief Called on RMB click on block with the item selected /// @return true if prevents default action - bool on_item_use_on_block(Player* player, const ItemDef* item, int x, int y, int z); + bool on_item_use_on_block(Player* player, const ItemDef* item, glm::ivec3 ipos, glm::ivec3 normal); /// @brief Called on LMB click on block with the item selected /// @return true if prevents default action