diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-06-10 12:46:48 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-06-10 12:46:48 +0300 |
commit | 6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e (patch) | |
tree | d5c31cd32d0a1c73d8eaf9065a7b01235b0fff57 /src/server.cpp | |
parent | 7ba72f27630112286456aa5dd4e1738fde58ae6f (diff) | |
download | minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.tar.gz minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.tar.bz2 minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.zip |
Node placement client-side prediction
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/server.cpp b/src/server.cpp index a7bd5e953..98072e854 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2971,8 +2971,16 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) <<std::endl; // Re-send block to revert change on client-side RemoteClient *client = getClient(peer_id); - v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); - client->SetBlockNotSent(blockpos); + // Digging completed -> under + if(action == 2){ + v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); + client->SetBlockNotSent(blockpos); + } + // Placement -> above + if(action == 3){ + v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_above, BS)); + client->SetBlockNotSent(blockpos); + } return; } @@ -3104,7 +3112,14 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) if(g_settings->getBool("creative_mode") == false) playersao->setWieldedItem(item); } - + + // If item has node placement prediction, always send the above + // node to make sure the client knows what exactly happened + if(item.getDefinition(m_itemdef).node_placement_prediction != ""){ + RemoteClient *client = getClient(peer_id); + v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_above, BS)); + client->SetBlockNotSent(blockpos); + } } // action == 3 /* |