@@ -475,6 +475,7 @@ void Client::step(float dtime)
475
475
*/
476
476
{
477
477
int num_processed_meshes = 0 ;
478
+ std::vector<v3s16> blocks_to_ack;
478
479
while (!m_mesh_update_thread.m_queue_out .empty ())
479
480
{
480
481
num_processed_meshes++;
@@ -513,14 +514,18 @@ void Client::step(float dtime)
513
514
m_minimap->addBlock (r.p , minimap_mapblock);
514
515
515
516
if (r.ack_block_to_server ) {
516
- /*
517
- Acknowledge block
518
- [0] u8 count
519
- [1] v3s16 pos_0
520
- */
521
- sendGotBlocks (r.p );
517
+ if (blocks_to_ack. size () == 255 ) {
518
+ sendGotBlocks (blocks_to_ack);
519
+ blocks_to_ack. clear ();
520
+ }
521
+
522
+ blocks_to_ack. emplace_back (r.p );
522
523
}
523
524
}
525
+ if (blocks_to_ack.size () > 0 ) {
526
+ // Acknowledge block(s)
527
+ sendGotBlocks (blocks_to_ack);
528
+ }
524
529
525
530
if (num_processed_meshes > 0 )
526
531
g_profiler->graphAdd (" num_processed_meshes" , num_processed_meshes);
@@ -1069,10 +1074,13 @@ void Client::sendDeletedBlocks(std::vector<v3s16> &blocks)
1069
1074
Send (&pkt);
1070
1075
}
1071
1076
1072
- void Client::sendGotBlocks (v3s16 block )
1077
+ void Client::sendGotBlocks (const std::vector< v3s16> &blocks )
1073
1078
{
1074
- NetworkPacket pkt (TOSERVER_GOTBLOCKS, 1 + 6 );
1075
- pkt << (u8) 1 << block;
1079
+ NetworkPacket pkt (TOSERVER_GOTBLOCKS, 1 + 6 * blocks.size ());
1080
+ pkt << (u8) blocks.size ();
1081
+ for (const v3s16 &block : blocks)
1082
+ pkt << block;
1083
+
1076
1084
Send (&pkt);
1077
1085
}
1078
1086
0 commit comments