]> git.localhorst.tv Git - blank.git/blobdiff - src/server/net.cpp
re-request incomplete or corrupted chunk transfers
[blank.git] / src / server / net.cpp
index 7947c221beb13d803a9b6c6a0c9d14a56f190e8d..d16088991f22f2a840869dc1c9da89c040764cbe 100644 (file)
@@ -401,6 +401,7 @@ void ClientConnection::CheckChunkQueue() {
                }
                old_base = PlayerChunks().Base();
                sort(chunk_queue.begin(), chunk_queue.end(), QueueCompare(old_base));
+               chunk_queue.erase(unique(chunk_queue.begin(), chunk_queue.end()), chunk_queue.end());
        }
        // don't push entity updates and chunk data in the same tick
        if (chunk_blocks_skipped >= NetStat().SuggestedPacketHold() && !SendingUpdates()) {
@@ -612,6 +613,14 @@ bool ClientConnection::ChunkInRange(const glm::ivec3 &pos) const noexcept {
        return HasPlayer() && PlayerChunks().InRange(pos);
 }
 
+void ClientConnection::On(const Packet::ChunkBegin &pack) {
+       glm::ivec3 pos;
+       pack.ReadChunkCoords(pos);
+       if (ChunkInRange(pos)) {
+               chunk_queue.push_front(pos);
+       }
+}
+
 void ClientConnection::On(const Packet::Message &pack) {
        uint8_t type;
        uint32_t ref;