summaryrefslogtreecommitdiffstats
path: root/src/Blocks/BlockIce.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Blocks/BlockIce.h53
1 files changed, 37 insertions, 16 deletions
diff --git a/src/Blocks/BlockIce.h b/src/Blocks/BlockIce.h
index 845bb423b..672288ca3 100644
--- a/src/Blocks/BlockIce.h
+++ b/src/Blocks/BlockIce.h
@@ -10,37 +10,58 @@
class cBlockIceHandler :
public cBlockHandler
{
+ using super = cBlockHandler;
+
public:
- cBlockIceHandler(BLOCKTYPE a_BlockType)
- : cBlockHandler(a_BlockType)
+
+ cBlockIceHandler(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
{
- // No pickups
+ // Only drop self when using silk-touch:
+ if (ToolHasSilkTouch(a_Tool))
+ {
+ return cItem(m_BlockType);
+ }
+ else
+ {
+ return {};
+ }
}
- virtual void OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) override
+
+
+
+
+ virtual void OnBroken(
+ cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface,
+ Vector3i a_BlockPos,
+ BLOCKTYPE a_OldBlockType, NIBBLETYPE a_OldBlockMeta
+ ) override
{
- if (a_Player.IsGameModeCreative() || (a_BlockY <= 0))
+ // If there's a solid block or a liquid underneath, convert to water, rather than air
+ if (a_BlockPos.y <= 0)
{
return;
}
-
- cEnchantments Enchantments = a_Player.GetInventory().GetEquippedItem().m_Enchantments;
- if (Enchantments.GetLevel(cEnchantments::enchSilkTouch) == 0)
+ auto blockTypeBelow = a_ChunkInterface.GetBlock(a_BlockPos.addedY(-1));
+ if (cBlockInfo::FullyOccupiesVoxel(blockTypeBelow) || IsBlockLiquid(blockTypeBelow))
{
- BLOCKTYPE BlockBelow = a_ChunkInterface.GetBlock({a_BlockX, a_BlockY - 1, a_BlockZ});
- if (!cBlockInfo::FullyOccupiesVoxel(BlockBelow) && !IsBlockLiquid(BlockBelow))
- {
- return;
- }
-
- a_ChunkInterface.SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_WATER, 0);
+ a_ChunkInterface.SetBlock(a_BlockPos, E_BLOCK_WATER, 0);
}
}
+
+
+
+
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
{
UNUSED(a_Meta);