1
0
Fork 0

Merge pull request #3918 from peterbell10/GetBlockEntity

cChunk: Don't assume GetBlockEntity coords are valid
This commit is contained in:
Tiger Wang 2017-08-18 11:33:46 +01:00 committed by GitHub
commit e7a5e29522
1 changed files with 11 additions and 7 deletions

View File

@ -1775,16 +1775,20 @@ void cChunk::AddBlockEntityClean(cBlockEntity * a_BlockEntity)
cBlockEntity * cChunk::GetBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ)
{
// Check that the query coords are within chunk bounds:
ASSERT(a_BlockX >= m_PosX * cChunkDef::Width);
ASSERT(a_BlockX < m_PosX * cChunkDef::Width + cChunkDef::Width);
ASSERT(a_BlockZ >= m_PosZ * cChunkDef::Width);
ASSERT(a_BlockZ < m_PosZ * cChunkDef::Width + cChunkDef::Width);
int RelX = a_BlockX - m_PosX * cChunkDef::Width;
int RelZ = a_BlockZ - m_PosZ * cChunkDef::Width;
auto itr = m_BlockEntities.find(MakeIndex(RelX, a_BlockY, RelZ));
if (
!IsValidWidth (RelX) ||
!IsValidHeight(a_BlockY) ||
!IsValidWidth (RelZ)
)
{
// Coordinates are outside outside the world, no block entities here
return nullptr;
}
auto itr = m_BlockEntities.find(MakeIndexNoCheck(RelX, a_BlockY, RelZ));
return (itr == m_BlockEntities.end()) ? nullptr : itr->second;
}