From 7cdd988f88ae3fc5b1ca342c3c5e176eec0ba8f9 Mon Sep 17 00:00:00 2001
From: Ciaran Gultnieks <ciaran@ciarang.com>
Date: Mon, 16 May 2011 11:34:06 +0100
Subject: [PATCH] Better synchronisation of build/mine attempts when the player
 isn't allowed to

---
 src/server.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/server.cpp b/src/server.cpp
index f77b4f3c6..338b528e7 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2174,8 +2174,6 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
 	{
 		if(datasize < 17)
 			return;
-		if((player->privs & PRIV_BUILD) == 0)
-			return;
 		/*
 			length: 17
 			[0] u16 command
@@ -2281,6 +2279,10 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
 				cannot_remove_node = true;
 			}
 
+			// Make sure the player is allowed to do it
+			if((player->privs & PRIV_BUILD) == 0)
+				cannot_remove_node = true;
+
 			/*
 				If node can't be removed, set block to be re-sent to
 				client and quit.
@@ -2427,7 +2429,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
 				try{
 					// Don't add a node if this is not a free space
 					MapNode n2 = m_env.getMap().getNode(p_over);
-					if(content_buildable_to(n2.d) == false)
+					if(content_buildable_to(n2.d) == false
+						|| (player->privs & PRIV_BUILD) ==0)
 					{
 						// Client probably has wrong data.
 						// Set block not sent, so that client will get
-- 
GitLab