summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLogicParrot <LogicParrot@users.noreply.github.com>2016-04-23 09:22:25 +0200
committerLogicParrot <LogicParrot@users.noreply.github.com>2016-04-23 09:22:25 +0200
commit611cb8cb4e17c55b1dc913837268bf9dd423df75 (patch)
tree1d4f49943813a5309ef081ae8f9e696a388ba8a4
parentUpdated readme to inform that clang 3.4 is minimum required version. (#3158) (diff)
parentOut of world blocks are now always considered air blocks (diff)
downloadcuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar.gz
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar.bz2
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar.lz
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar.xz
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.tar.zst
cuberite-611cb8cb4e17c55b1dc913837268bf9dd423df75.zip
-rw-r--r--src/Chunk.cpp10
-rw-r--r--src/ChunkData.cpp13
-rw-r--r--src/Mobs/Path.cpp2
-rw-r--r--tests/ChunkData/Coordinates.cpp71
4 files changed, 33 insertions, 63 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index ae3d218d5..ff0841440 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -2594,16 +2594,6 @@ bool cChunk::GetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_
BLOCKTYPE cChunk::GetBlock(int a_RelX, int a_RelY, int a_RelZ) const
{
- if (
- (a_RelX < 0) || (a_RelX >= Width) ||
- (a_RelY < 0) || (a_RelY >= Height) ||
- (a_RelZ < 0) || (a_RelZ >= Width)
- )
- {
- ASSERT(!"GetBlock(x, y, z) out of bounds!");
- return 0; // Clip
- }
-
return m_ChunkData.GetBlock(a_RelX, a_RelY, a_RelZ);
}
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 88cb9fdd8..ab29e4ed3 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -150,9 +150,14 @@ cChunkData::~cChunkData()
BLOCKTYPE cChunkData::GetBlock(int a_X, int a_Y, int a_Z) const
{
- ASSERT((a_X >= 0) && (a_X < cChunkDef::Width));
- ASSERT((a_Y >= 0) && (a_Y < cChunkDef::Height));
- ASSERT((a_Z >= 0) && (a_Z < cChunkDef::Width));
+ if (
+ (a_X < 0) || (a_X >= cChunkDef::Width) ||
+ (a_Y < 0) || (a_Y >= cChunkDef::Height) ||
+ (a_Z < 0) || (a_Z >= cChunkDef::Width)
+ )
+ {
+ return E_BLOCK_AIR; // Coordinates are outside outside the world, so this must be an air block
+ }
int Section = a_Y / SectionHeight;
if (m_Sections[Section] != nullptr)
{
@@ -222,7 +227,7 @@ NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
return 0;
}
}
- ASSERT(!"cChunkData::GetMeta(): coords out of chunk range!");
+ // Coordinates are outside outside the world, so it must be an air block with a blank meta
return 0;
}
diff --git a/src/Mobs/Path.cpp b/src/Mobs/Path.cpp
index 18090587e..1273b2517 100644
--- a/src/Mobs/Path.cpp
+++ b/src/Mobs/Path.cpp
@@ -250,7 +250,7 @@ bool cPath::StepOnce()
{
if (ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, y, 1), CurrentCell, NORMAL_G_COST))
{
- DoneWest = true;
+ DoneSouth = true;
if (y == 0)
{
WalkableSouth = true;
diff --git a/tests/ChunkData/Coordinates.cpp b/tests/ChunkData/Coordinates.cpp
index de6686243..1aabb5374 100644
--- a/tests/ChunkData/Coordinates.cpp
+++ b/tests/ChunkData/Coordinates.cpp
@@ -13,7 +13,7 @@ int main(int argc, char** argv)
{
return new cChunkData::sChunkSection();
}
-
+
virtual void Free(cChunkData::sChunkSection * a_Ptr)
{
delete a_Ptr;
@@ -36,7 +36,7 @@ int main(int argc, char** argv)
testassert(buffer.GetBlock(0, 32, 0) == 0x0);
testassert(buffer.GetMeta(0, 48, 0) == 0x0);
- // Out of Range
+ // Out of range SetBlock
CheckAsserts(
buffer.SetBlock(-1, 0, 0, 0);
);
@@ -55,28 +55,7 @@ int main(int argc, char** argv)
CheckAsserts(
buffer.SetBlock(0, 0, 256, 0);
);
-
- // Out of Range
- CheckAsserts(
- buffer.GetBlock(-1, 0, 0);
- );
- CheckAsserts(
- buffer.GetBlock(0, -1, 0);
- );
- CheckAsserts(
- buffer.GetBlock(0, 0, -1);
- );
- CheckAsserts(
- buffer.GetBlock(256, 0, 0);
- );
- CheckAsserts(
- buffer.GetBlock(0, 256, 0);
- );
- CheckAsserts(
- buffer.GetBlock(0, 0, 256);
- );
-
- // Out of Range
+ // Out of range SetMeta
CheckAsserts(
buffer.SetMeta(-1, 0, 0, 0);
);
@@ -96,30 +75,26 @@ int main(int argc, char** argv)
buffer.SetMeta(0, 0, 256, 0);
);
- // Out of Range
- CheckAsserts(
- buffer.GetMeta(-1, 0, 0);
- );
- CheckAsserts(
- buffer.GetMeta(0, -1, 0);
- );
- CheckAsserts(
- buffer.GetMeta(0, 0, -1);
- );
- CheckAsserts(
- buffer.GetMeta(256, 0, 0);
- );
- CheckAsserts(
- buffer.GetMeta(0, 256, 0);
- );
- CheckAsserts(
- buffer.GetMeta(0, 0, 256);
- );
+ // Reading out of range blocks should return air
+ testassert(buffer.GetBlock(-1, 0, 0) == 0);
+ testassert(buffer.GetBlock(0, -1, 0) == 0);
+ testassert(buffer.GetBlock(0, 0, -1) == 0);
+ testassert(buffer.GetBlock(256, 0, 0) == 0);
+ testassert(buffer.GetBlock(0, 256, 0) == 0);
+ testassert(buffer.GetBlock(0, 0, 256) == 0);
+
+ // Reading out of range metas should return 0
+ testassert(buffer.GetMeta(-1, 0, 0) == 0);
+ testassert(buffer.GetMeta(0, -1, 0) == 0);
+ testassert(buffer.GetMeta(0, 0, -1) == 0);
+ testassert(buffer.GetMeta(256, 0, 0) == 0);
+ testassert(buffer.GetMeta(0, 256, 0) == 0);
+ testassert(buffer.GetMeta(0, 0, 256) == 0);
}
-
+
{
cChunkData buffer(Pool);
-
+
// Zero's
buffer.SetBlock(0, 0, 0, 0x0);
buffer.SetBlock(0, 0, 1, 0xab);
@@ -131,8 +106,8 @@ int main(int argc, char** argv)
testassert(buffer.GetMeta(0, 16, 0) == 0x0);
testassert(buffer.GetMeta(0, 16, 1) == 0xc);
}
-
-
+
+
{
// Operator =
cChunkData buffer(Pool);
@@ -141,6 +116,6 @@ int main(int argc, char** argv)
copy = std::move(buffer);
testassert(copy.GetBlock(0, 0, 0) == 0x42);
}
-
+
return 0;
}