From 358074b2960b369dfd248bd31e08db93e114a4aa Mon Sep 17 00:00:00 2001 From: you Date: Sat, 20 May 2017 20:43:13 +0200 Subject: [PATCH] Fix instant digging (#5785) Use runData.dig_time_complete instead of params.time to find out whether it's instant digging. runData.dig_time_complete is set to something very big if the node can't be dug, whereas param.time is 0 when digging is impossible or it's instant digging. So not using param.time fixes #5728. --- src/game.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index f967e349c..5d4edb3d0 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3903,16 +3903,6 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, params = getDigParams(nodedef_manager->get(n).groups, tp); } - if (!runData.digging) { - infostream << "Started digging" << std::endl; - runData.dig_instantly = params.time == 0; - if (client->moddingEnabled() && client->getScript()->on_punchnode(nodepos, n)) - return; - client->interact(0, pointed); - runData.digging = true; - runData.ldown_for_dig = true; - } - if (!params.diggable) { // I guess nobody will wait for this long runData.dig_time_complete = 10000000.0; @@ -3927,6 +3917,16 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, } } + if (!runData.digging) { + infostream << "Started digging" << std::endl; + runData.dig_instantly = runData.dig_time_complete == 0; + if (client->moddingEnabled() && client->getScript()->on_punchnode(nodepos, n)) + return; + client->interact(0, pointed); + runData.digging = true; + runData.ldown_for_dig = true; + } + if (!runData.dig_instantly) { runData.dig_index = (float)crack_animation_length * runData.dig_time