]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Forcefully place items when minetest.place_node is used
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 18 Feb 2021 19:19:17 +0000 (20:19 +0100)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 18 Feb 2021 19:19:17 +0000 (20:19 +0100)
src/client/game.cpp
src/client/game.h
src/script/lua_api/l_client.cpp

index 10c3a7ceb30317d8b4f64c281c340b941d9f1c28..4862d3ed987c71bc2f6b28259b48757b64eb0878 100644 (file)
@@ -2563,7 +2563,7 @@ void Game::handlePointingAtNode(const PointedThing &pointed,
 
 bool Game::nodePlacement(const ItemDefinition &selected_def,
        const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos,
-       const PointedThing &pointed, const NodeMetadata *meta)
+       const PointedThing &pointed, const NodeMetadata *meta, bool force)
 {
        std::string prediction = selected_def.node_placement_prediction;
        const NodeDefManager *nodedef = client->ndef();
@@ -2579,7 +2579,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
 
        // formspec in meta
        if (meta && !meta->getString("formspec").empty() && !input->isRandom()
-                       && !isKeyDown(KeyType::SNEAK)) {
+                       && !isKeyDown(KeyType::SNEAK) && !force) {
                // on_rightclick callbacks are called anyway
                if (nodedef_manager->get(map.getNode(nodepos)).rightclickable)
                        client->interact(INTERACT_PLACE, pointed);
@@ -2603,7 +2603,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
 
        // on_rightclick callback
        if (prediction.empty() || (nodedef->get(node).rightclickable &&
-                       !isKeyDown(KeyType::SNEAK))) {
+                       !isKeyDown(KeyType::SNEAK) && !force)) {
                // Report to server
                client->interact(INTERACT_PLACE, pointed);
                return false;
index af0b7ef543a23311218ef55e5237cb90b1cf2ba4..50a734be6b8136575c9d7c93a5369496f50ee102 100644 (file)
@@ -822,7 +822,7 @@ class Game {
 
        bool nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item,
                const v3s16 &nodepos, const v3s16 &neighbourpos, const PointedThing &pointed,
-               const NodeMetadata *meta);
+               const NodeMetadata *meta, bool force = false);
        static const ClientEventHandler clientEventHandler[CLIENTEVENT_MAX];
 
        InputHandler *input = nullptr;
index dac2febaed7bb1eef5b177daecb0a5c2e6cde8f2..abd27f7dc185af9322750dfb710544840ece1735 100644 (file)
@@ -440,7 +440,7 @@ int ModApiClient::l_place_node(lua_State *L)
        pointed.node_abovesurface = pos;
        pointed.node_undersurface = pos;
        NodeMetadata *meta = map.getNodeMetadata(pos);
-       g_game->nodePlacement(selected_def, selected_item, pos, pos, pointed, meta);
+       g_game->nodePlacement(selected_def, selected_item, pos, pos, pointed, meta, true);
        return 0;
 }