diff options
author | Mattes D <github@xoft.cz> | 2017-06-15 15:32:33 +0200 |
---|---|---|
committer | Lukas Pioch <lukas@zgow.de> | 2017-06-16 14:11:28 +0200 |
commit | 0dd1cd750bb51403d85a226a97a5ad93eb99b144 (patch) | |
tree | 8c7a4e8580a780e1ed27f4141c32de7ec3087710 /src/BlockEntities/BlockEntityWithItems.cpp | |
parent | Choose # of threads based on system info (#3644) (diff) | |
download | cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar.gz cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar.bz2 cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar.lz cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar.xz cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.tar.zst cuberite-0dd1cd750bb51403d85a226a97a5ad93eb99b144.zip |
Diffstat (limited to '')
-rw-r--r-- | src/BlockEntities/BlockEntityWithItems.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/BlockEntities/BlockEntityWithItems.cpp b/src/BlockEntities/BlockEntityWithItems.cpp new file mode 100644 index 000000000..de223041d --- /dev/null +++ b/src/BlockEntities/BlockEntityWithItems.cpp @@ -0,0 +1,72 @@ +// BlockEntityWithItems.cpp + +// Implements the cBlockEntityWithItems class representing a common ancestor for all block entities that have an ItemGrid + + + + + +#include "Globals.h" +#include "BlockEntityWithItems.h" + + + + + +cBlockEntityWithItems::cBlockEntityWithItems( + BLOCKTYPE a_BlockType, + NIBBLETYPE a_BlockMeta, + int a_BlockX, int a_BlockY, int a_BlockZ, + int a_ItemGridWidth, int a_ItemGridHeight, + cWorld * a_World +): + Super(a_BlockType, a_BlockMeta, a_BlockX, a_BlockY, a_BlockZ, a_World), + cBlockEntityWindowOwner(this), + m_Contents(a_ItemGridWidth, a_ItemGridHeight) +{ + m_Contents.AddListener(*this); +} + + + + + +void cBlockEntityWithItems::Destroy(void) +{ + // Drop the contents as pickups: + ASSERT(m_World != nullptr); + cItems Pickups; + m_Contents.CopyToItems(Pickups); + m_Contents.Clear(); + m_World->SpawnItemPickups(Pickups, m_PosX + 0.5, m_PosY + 0.5, m_PosZ + 0.5); // Spawn in centre of block +} + + + + + +void cBlockEntityWithItems::CopyFrom(const cBlockEntity & a_Src) +{ + Super::CopyFrom(a_Src); + auto & src = reinterpret_cast<const cBlockEntityWithItems &>(a_Src); + m_Contents.CopyFrom(src.m_Contents); +} + + + + + +void cBlockEntityWithItems::OnSlotChanged(cItemGrid * a_Grid, int a_SlotNum) +{ + UNUSED(a_SlotNum); + ASSERT(a_Grid == &m_Contents); + if (m_World != nullptr) + { + if (GetWindow() != nullptr) + { + GetWindow()->BroadcastWholeWindow(); + } + + m_World->MarkChunkDirty(GetChunkX(), GetChunkZ()); + } +} |