MCPcopy Create free account
hub / github.com/cuberite/cuberite / SaveChunkToData

Method SaveChunkToData

src/WorldStorage/WSSCompact.cpp:943–993  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

941
942
943bool cWSSCompact::cPAKFile::SaveChunkToData(const cChunkCoords & a_Chunk, cWorld * a_World)
944{
945 // Serialize the chunk:
946 cJsonChunkSerializer Serializer;
947 if (!a_World->GetChunkData(a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ, Serializer))
948 {
949 // Chunk not valid
950 LOG("cWSSCompact: Trying to save chunk [%d, %d, %d] that has no data, ignoring request.", a_Chunk.m_ChunkX, a_Chunk.m_ChunkY, a_Chunk.m_ChunkZ);
951 return false;
952 }
953
954 AString Data;
955 Data.assign((const char *)Serializer.GetBlockData(), cChunkDef::BlockDataSize);
956 if (Serializer.HasJsonData())
957 {
958 AString JsonData;
959 Json::StyledWriter writer;
960 JsonData = writer.write(Serializer.GetRoot());
961 Data.append(JsonData);
962 }
963
964 // Compress the data:
965 AString CompressedData;
966 int errorcode = CompressString(Data.data(), Data.size(), CompressedData, m_CompressionFactor);
967 if ( errorcode != Z_OK )
968 {
969 LOGERROR("Error %i compressing data for chunk [%d, %d, %d]", errorcode, a_Chunk.m_ChunkX, a_Chunk.m_ChunkY, a_Chunk.m_ChunkZ);
970 return false;
971 }
972
973 // Erase any existing data for the chunk:
974 EraseChunkData(a_Chunk);
975
976 // Save the header:
977 sChunkHeader * Header = new sChunkHeader;
978 if (Header == NULL)
979 {
980 LOGWARNING("Cannot create a new chunk header to save chunk [%d, %d, %d]", a_Chunk.m_ChunkX, a_Chunk.m_ChunkY, a_Chunk.m_ChunkZ);
981 return false;
982 }
983 Header->m_CompressedSize = (int)CompressedData.size();
984 Header->m_ChunkX = a_Chunk.m_ChunkX;
985 Header->m_ChunkZ = a_Chunk.m_ChunkZ;
986 Header->m_UncompressedSize = (int)Data.size();
987 m_ChunkHeaders.push_back(Header);
988
989 m_DataContents.append(CompressedData.data(), CompressedData.size());
990
991 m_NumDirty++;
992 return true;
993}
994
995
996

Callers

nothing calls this directly

Calls 9

LOGFunction · 0.85
CompressStringFunction · 0.85
LOGERRORFunction · 0.85
GetBlockDataMethod · 0.80
HasJsonDataMethod · 0.80
writeMethod · 0.80
GetRootMethod · 0.80
sizeMethod · 0.80
GetChunkDataMethod · 0.45

Tested by

no test coverage detected