summaryrefslogtreecommitdiffstats
path: root/src/Blocks/BlockEnderchest.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Blocks/BlockEnderchest.h37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/Blocks/BlockEnderchest.h b/src/Blocks/BlockEnderchest.h
index 8fd5c2a89..f233468f4 100644
--- a/src/Blocks/BlockEnderchest.h
+++ b/src/Blocks/BlockEnderchest.h
@@ -2,7 +2,7 @@
#pragma once
#include "BlockEntity.h"
-#include "MetaRotator.h"
+#include "Mixins.h"
@@ -10,17 +10,44 @@
class cBlockEnderchestHandler :
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
{
+ using super = cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>;
+
public:
- cBlockEnderchestHandler(BLOCKTYPE a_BlockType)
- : cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
+
+ cBlockEnderchestHandler(BLOCKTYPE a_BlockType):
+ super(a_BlockType)
{
}
- virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
+
+
+
+
+ virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, cBlockEntity * a_BlockEntity, const cEntity * a_Digger, const cItem * a_Tool) override
{
- a_Pickups.push_back(cItem(E_BLOCK_OBSIDIAN, 8, 0));
+ // Only drop something when mined with a pickaxe:
+ if (
+ (a_Tool != nullptr) &&
+ ItemCategory::IsPickaxe(a_Tool->m_ItemType)
+ )
+ {
+ // Only drop self when mined with a silk-touch pickaxe:
+ if (a_Tool->m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0)
+ {
+ return cItem(E_BLOCK_ENDER_CHEST, 1, 0);
+ }
+ else
+ {
+ return cItem(E_BLOCK_OBSIDIAN, 8, 0);
+ }
+ }
+ return {};
}
+
+
+
+
virtual bool GetPlacementBlockTypeMeta(
cChunkInterface & a_ChunkInterface, cPlayer & a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace,