Fix explosion interaction with block entities. (#4052)
* WriteBlockArea: Fix erasing of block entities. * cChunkMap::DoExplosionAt destroys block entities
This commit is contained in:
committed by
Alexander Harkness
parent
4b14a5b4c1
commit
8866a28cf8
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user