diff options
author | peterbell10 <peterbell10@live.co.uk> | 2017-09-27 23:22:15 +0200 |
---|---|---|
committer | Alexander Harkness <me@bearbin.net> | 2017-09-27 23:22:15 +0200 |
commit | 8866a28cf835fd3f814d4413ab2b5883999e2065 (patch) | |
tree | 343c757980b219b25eab9182fb8f1ede59d59468 | |
parent | cPressurePlateHandler: Fix uninitialised variables. (#4047) (diff) | |
download | cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar.gz cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar.bz2 cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar.lz cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar.xz cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.tar.zst cuberite-8866a28cf835fd3f814d4413ab2b5883999e2065.zip |
-rw-r--r-- | src/Chunk.cpp | 7 | ||||
-rw-r--r-- | src/ChunkMap.cpp | 13 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp index 0ce18c45e..8d88ed3a4 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -452,14 +452,15 @@ void cChunk::WriteBlockArea(cBlockArea & a_Area, int a_MinBlockX, int a_MinBlock } // for y // Erase all affected block entities: - cCuboid affectedArea( - {OffX, a_MinBlockY, OffZ}, - {OffX + SizeX - 1, a_MinBlockY + SizeY - 1, OffZ + SizeZ - 1} + cCuboid affectedArea( // In world coordinates + {BlockStartX, a_MinBlockY, BlockStartZ}, + {BlockEndX, a_MinBlockY + SizeY - 1, BlockEndZ} ); for (auto itr = m_BlockEntities.begin(); itr != m_BlockEntities.end();) { if (affectedArea.IsInside(itr->second->GetPos())) { + delete itr->second; itr = m_BlockEntities.erase(itr); } else diff --git a/src/ChunkMap.cpp b/src/ChunkMap.cpp index 30bab923d..d970956f3 100644 --- a/src/ChunkMap.cpp +++ b/src/ChunkMap.cpp @@ -19,6 +19,7 @@ #include "Blocks/ChunkInterface.h" #include "Entities/Pickup.h" #include "DeadlockDetect.h" +#include "BlockEntities/BlockEntity.h" #ifndef _WIN32 #include <cstdlib> // abs @@ -1763,6 +1764,18 @@ void cChunkMap::DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_ } } + // Destroy any block entities + if (cBlockEntity::IsBlockEntityBlockType(Block)) + { + Vector3i BlockPos(bx + x, by + y, bz + z); + DoWithBlockEntityAt(BlockPos.x, BlockPos.y, BlockPos.z, [](cBlockEntity & a_BE) + { + a_BE.Destroy(); + return true; + } + ); + } + area.SetBlockTypeMeta(bx + x, by + y, bz + z, E_BLOCK_AIR, 0); a_BlocksAffected.push_back(Vector3i(bx + x, by + y, bz + z)); break; |