From 7379848ae57634da8755b13c7bf2d21e6c990cb7 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Wed, 24 Jun 2015 16:38:40 +0200 Subject: Moved AString reading hack to cFile. --- src/WorldStorage/WSSAnvil.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'src/WorldStorage') diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index a4c9f4fbf..3bba0a969 100755 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -109,11 +109,11 @@ cWSSAnvil::cWSSAnvil(cWorld * a_World, int a_CompressionFactor) : Writer.AddByte("thundering", a_World->IsWeatherStorm() ? 1 : 0); Writer.AddInt("GameType", static_cast(a_World->GetGameMode())); Writer.AddInt("generatorVersion", 1); - Writer.AddInt("SpawnX", static_cast(a_World->GetSpawnX())); - Writer.AddInt("SpawnY", static_cast(a_World->GetSpawnY())); - Writer.AddInt("SpawnZ", static_cast(a_World->GetSpawnZ())); + Writer.AddInt("SpawnX", FloorC(a_World->GetSpawnX())); + Writer.AddInt("SpawnY", FloorC(a_World->GetSpawnY())); + Writer.AddInt("SpawnZ", FloorC(a_World->GetSpawnZ())); Writer.AddInt("version", 19133); - Writer.AddLong("DayTime", static_cast(a_World->GetTimeOfDay())); + Writer.AddLong("DayTime", a_World->GetTimeOfDay()); Writer.AddLong("Time", a_World->GetWorldAge()); Writer.AddLong("SizeOnDisk", 0); Writer.AddString("generatorName", "default"); @@ -122,11 +122,6 @@ cWSSAnvil::cWSSAnvil(cWorld * a_World, int a_CompressionFactor) : Writer.EndCompound(); Writer.Finish(); - #ifdef _DEBUG - cParsedNBT TestParse(Writer.GetResult().data(), Writer.GetResult().size()); - ASSERT(TestParse.IsValid()); - #endif // _DEBUG - gzFile gz = gzopen((FILE_IO_PREFIX + fnam).c_str(), "wb"); if (gz != nullptr) { @@ -1888,7 +1883,7 @@ void cWSSAnvil::LoadArrowFromNBT(cEntityList & a_Entities, const cParsedNBT & a_ case TAG_Short: { // Vanilla uses this - Arrow->SetBlockHit(Vector3i(static_cast(a_NBT.GetShort(InBlockXIdx)), static_cast(a_NBT.GetShort(InBlockYIdx)), static_cast(a_NBT.GetShort(InBlockZIdx)))); + Arrow->SetBlockHit(Vector3i(a_NBT.GetShort(InBlockXIdx), a_NBT.GetShort(InBlockYIdx), a_NBT.GetShort(InBlockZIdx))); break; } default: @@ -3138,15 +3133,22 @@ bool cWSSAnvil::cMCAFile::GetChunkData(const cChunkCoords & a_Chunk, AString & a return false; } - m_File.Seek(static_cast(ChunkOffset) * 4096); + m_File.Seek(static_cast(ChunkOffset * 4096)); - int ChunkSize = 0; + UInt32 ChunkSize = 0; if (m_File.Read(&ChunkSize, 4) != 4) { LOAD_FAILED(a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ); return false; } - ChunkSize = ntohl(static_cast(ChunkSize)); + ChunkSize = ntohl(ChunkSize); + if (ChunkSize < 1) + { + // Chunk size too small + LOAD_FAILED(a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ); + return false; + } + char CompressionType = 0; if (m_File.Read(&CompressionType, 1) != 1) { @@ -3161,9 +3163,8 @@ bool cWSSAnvil::cMCAFile::GetChunkData(const cChunkCoords & a_Chunk, AString & a } ChunkSize--; - // HACK: This depends on the internal knowledge that AString's data() function returns the internal buffer directly - a_Data.assign(static_cast(ChunkSize), '\0'); - if (static_cast(m_File.Read(static_cast(const_cast(a_Data.data())), static_cast(ChunkSize))) == static_cast(ChunkSize)) + a_Data = m_File.Read(ChunkSize); + if (a_Data.size() == ChunkSize) { return true; } -- cgit v1.2.3