summaryrefslogtreecommitdiff
path: root/src/game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.cpp')
-rw-r--r--src/game.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/game.cpp b/src/game.cpp
index c84e08b01..66c8859c8 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -3967,20 +3967,8 @@ void Game::handleDigging(GameRunData *runData,
client->setCrack(runData->dig_index, nodepos);
} else {
infostream << "Digging completed" << std::endl;
- client->interact(2, pointed);
client->setCrack(-1, v3s16(0, 0, 0));
- bool is_valid_position;
- MapNode wasnode = map.getNodeNoEx(nodepos, &is_valid_position);
- if (is_valid_position)
- client->removeNode(nodepos);
-
- if (m_cache_enable_particles) {
- const ContentFeatures &features =
- client->getNodeDefManager()->get(wasnode);
- client->getParticleManager()->addDiggingParticles(client, smgr,
- player, nodepos, wasnode, features);
- }
-
+
runData->dig_time = 0;
runData->digging = false;
@@ -3999,6 +3987,26 @@ void Game::handleDigging(GameRunData *runData,
if (runData->nodig_delay_timer < mindelay)
runData->nodig_delay_timer = mindelay;
+ bool is_valid_position;
+ MapNode wasnode = map.getNodeNoEx(nodepos, &is_valid_position);
+ if (is_valid_position) {
+ bool block = client->getScript()->on_dignode(nodepos, wasnode);
+ if (block) {
+ return;
+ }
+ client->removeNode(nodepos);
+ }
+
+ client->interact(2, pointed);
+
+ if (m_cache_enable_particles) {
+ const ContentFeatures &features =
+ client->getNodeDefManager()->get(wasnode);
+ client->getParticleManager()->addDiggingParticles(client, smgr,
+ player, nodepos, wasnode, features);
+ }
+
+
// Send event to trigger sound
MtEvent *e = new NodeDugEvent(nodepos, wasnode);
client->event()->put(e);