From 5b3fbf9cf75f9f637c666d34e2489fef0cc035d9 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 11 Sep 2017 14:50:06 +0200 Subject: Implement client node dig prediction Dig prediction allows clients to remove dug nodes without waiting for server acknowledgement. This patch allows mods to override dig prediction, it can either be turned off or a different "prediction node" can be selected. --- src/game.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/game.cpp') diff --git a/src/game.cpp b/src/game.cpp index 04688e476..d85e34d35 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4104,7 +4104,17 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, client->getScript()->on_dignode(nodepos, wasnode)) { return; } - client->removeNode(nodepos); + + const ContentFeatures &f = client->ndef()->get(wasnode); + if (f.node_dig_prediction == "air") { + client->removeNode(nodepos); + } else if (!f.node_dig_prediction.empty()) { + content_t id; + bool found = client->ndef()->getId(f.node_dig_prediction, id); + if (found) + client->addNode(nodepos, id, true); + } + // implicit else: no prediction } client->interact(2, pointed); -- cgit v1.2.3