]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/game.cpp
[CSM] Add `on_dignode` callback (#5140)
[dragonfireclient.git] / src / game.cpp
index c84e08b01d8cc20d64d453774e717975bd9ce41e..66c8859c8298a2ee8876ad4eba4e9b1e6bc186a1 100644 (file)
@@ -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);