BlockArea: Fixed a crash with areas higher than chunk height.
This commit is contained in:
parent
e86f593c37
commit
f6ab461383
@ -337,6 +337,12 @@ void cBlockArea::Create(int a_SizeX, int a_SizeY, int a_SizeZ, int a_DataTypes)
|
||||
return;
|
||||
}
|
||||
|
||||
// Warn if the height is too much, but proceed with the creation:
|
||||
if (a_SizeY > cChunkDef::Height)
|
||||
{
|
||||
LOGWARNING("Creating a cBlockArea with height larger than world height (%d). Continuing, but the area may misbehave.", a_SizeY);
|
||||
}
|
||||
|
||||
Clear();
|
||||
int BlockCount = a_SizeX * a_SizeY * a_SizeZ;
|
||||
if ((a_DataTypes & baTypes) != 0)
|
||||
@ -540,7 +546,7 @@ bool cBlockArea::Write(cForEachChunkProvider * a_ForEachChunkProvider, int a_Min
|
||||
else if (a_MinBlockY > cChunkDef::Height - m_Size.y)
|
||||
{
|
||||
LOGWARNING("%s: MinBlockY + m_SizeY more than chunk height, adjusting to chunk height", __FUNCTION__);
|
||||
a_MinBlockY = cChunkDef::Height - m_Size.y;
|
||||
a_MinBlockY = std::max(cChunkDef::Height - m_Size.y, 0);
|
||||
}
|
||||
|
||||
return a_ForEachChunkProvider->WriteBlockArea(*this, a_MinBlockX, a_MinBlockY, a_MinBlockZ, a_DataTypes);
|
||||
|
@ -411,7 +411,7 @@ void cChunk::WriteBlockArea(cBlockArea & a_Area, int a_MinBlockX, int a_MinBlock
|
||||
int OffZ = BlockStartZ - m_PosZ * cChunkDef::Width;
|
||||
int BaseX = BlockStartX - a_MinBlockX;
|
||||
int BaseZ = BlockStartZ - a_MinBlockZ;
|
||||
int SizeY = a_Area.GetSizeY();
|
||||
int SizeY = std::min(a_Area.GetSizeY(), cChunkDef::Height - a_MinBlockY);
|
||||
|
||||
// TODO: Improve this by not calling FastSetBlock() and doing the processing here
|
||||
// so that the heightmap is touched only once for each column.
|
||||
|
Loading…
Reference in New Issue
Block a user