diff --git a/src/client.cpp b/src/client.cpp index 8a5a09f2fb..3958fd1b62 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -699,6 +699,7 @@ void Client::step(float dtime) < got_blocks; while(!m_mesh_update_thread.m_queue_out.empty()) { num_processed_meshes++; @@ -722,6 +723,13 @@ void Client::step(float dtime) } if(r.ack_block_to_server) { + got_blocks.push_back(r.p); + if (got_blocks.size() >= 255) + break; + } + } + u32 got_blocks_size = got_blocks.size(); + if (got_blocks_size) { /*infostream<<"Client: ACK block ("< reply(replysize); writeU16(&reply[0], TOSERVER_GOTBLOCKS); - reply[2] = 1; - writeV3S16(&reply[3], r.p); - writeU16(&reply[2+1+(6*reply[2])], (int)m_env.getClientMap().getControl().wanted_range); + reply[2] = got_blocks_size; + u32 i=0; + while (got_blocks.size()) + writeV3S16(&reply[3+(6*i++)], got_blocks.pop_front()); + writeU16(&reply[2+1+(6*got_blocks_size)], (int)m_env.getClientMap().getControl().wanted_range); // Send as reliable m_con.Send(PEER_ID_SERVER, 1, reply, true); - } + } if(num_processed_meshes > 0) g_profiler->graphAdd("num_processed_meshes", num_processed_meshes);