From 04f02a675de1b788f5e5ed6e681828ea3e358df7 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sun, 6 Jun 2021 17:22:42 +0100 Subject: Protocol: use dedicated packet for 1 block change It's six bytes smaller. --- src/ClientHandle.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/ClientHandle.cpp') diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index 1edd612b1..eac73e4ab 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -2173,13 +2173,23 @@ void cClientHandle::SendBlockChanges(int a_ChunkX, int a_ChunkZ, const sSetBlock ASSERT(!a_Changes.empty()); // We don't want to be sending empty change packets! // Do not send block changes in chunks that weren't sent to the client yet: - cChunkCoords ChunkCoords = cChunkCoords(a_ChunkX, a_ChunkZ); - cCSLock Lock(m_CSChunkLists); - if (std::find(m_SentChunks.begin(), m_SentChunks.end(), ChunkCoords) != m_SentChunks.end()) { - Lock.Unlock(); - m_Protocol->SendBlockChanges(a_ChunkX, a_ChunkZ, a_Changes); + cCSLock Lock(m_CSChunkLists); + if (std::find(m_SentChunks.begin(), m_SentChunks.end(), cChunkCoords(a_ChunkX, a_ChunkZ)) == m_SentChunks.end()) + { + return; + } + } + + // Use a dedicated packet for single changes: + if (a_Changes.size() == 1) + { + const auto & Change = a_Changes[0]; + m_Protocol->SendBlockChange(Change.GetX(), Change.GetY(), Change.GetZ(), Change.m_BlockType, Change.m_BlockMeta); + return; } + + m_Protocol->SendBlockChanges(a_ChunkX, a_ChunkZ, a_Changes); } -- cgit v1.2.3