summaryrefslogtreecommitdiffstats
path: root/src/Items/ItemHoe.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Items/ItemHoe.h')
-rw-r--r--src/Items/ItemHoe.h76
1 files changed, 40 insertions, 36 deletions
diff --git a/src/Items/ItemHoe.h b/src/Items/ItemHoe.h
index a0bf44a93..b33ab6b90 100644
--- a/src/Items/ItemHoe.h
+++ b/src/Items/ItemHoe.h
@@ -9,64 +9,68 @@
-class cItemHoeHandler :
+class cItemHoeHandler:
public cItemHandler
{
+ using Super = cItemHandler;
+
public:
- cItemHoeHandler(int a_ItemType)
- : cItemHandler(a_ItemType)
+
+ cItemHoeHandler(int a_ItemType):
+ Super(a_ItemType)
{
}
+
+
virtual bool OnItemUse(
- cWorld * a_World, cPlayer * a_Player, cBlockPluginInterface & a_PluginInterface, const cItem & a_Item,
- int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace
+ cWorld * a_World,
+ cPlayer * a_Player,
+ cBlockPluginInterface & a_PluginInterface,
+ const cItem & a_HeldItem,
+ const Vector3i a_ClickedBlockPos,
+ eBlockFace a_ClickedBlockFace
) override
{
- if ((a_BlockFace == BLOCK_FACE_NONE) || (a_BlockY >= cChunkDef::Height))
+ if ((a_ClickedBlockFace == BLOCK_FACE_NONE) || (a_ClickedBlockPos.y >= cChunkDef::Height))
{
return false;
}
- BLOCKTYPE UpperBlock = a_World->GetBlock(a_BlockX, a_BlockY + 1, a_BlockZ);
- BLOCKTYPE Block;
- NIBBLETYPE BlockMeta;
- a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, Block, BlockMeta);
+ // Need air above the hoe-d block to transform it:
+ BLOCKTYPE UpperBlockType = a_World->GetBlock(a_ClickedBlockPos.addedY(1));
+ if (UpperBlockType != E_BLOCK_AIR)
+ {
+ return false;
+ }
- if (((Block == E_BLOCK_DIRT) || (Block == E_BLOCK_GRASS)) && (UpperBlock == E_BLOCK_AIR))
+ // Can only transform dirt or grass blocks:
+ BLOCKTYPE BlockType;
+ NIBBLETYPE BlockMeta;
+ a_World->GetBlockTypeMeta(a_ClickedBlockPos, BlockType, BlockMeta);
+ if ((BlockType != E_BLOCK_DIRT) && (BlockType != E_BLOCK_GRASS))
+ {
+ return false;
+ }
+ if ((BlockType == E_BLOCK_DIRT) && (BlockMeta == E_META_DIRT_PODZOL))
{
- BLOCKTYPE NewBlock = E_BLOCK_FARMLAND;
- if (Block == E_BLOCK_DIRT)
- {
- switch (BlockMeta)
- {
- case E_META_DIRT_COARSE:
- {
- // Transform to normal dirt
- NewBlock = E_BLOCK_DIRT;
- break;
- }
- case E_META_DIRT_PODZOL:
- {
- // You can't transform this block with a hoe in vanilla
- return false;
- }
- default: break;
- }
- }
-
- a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, NewBlock, 0);
- a_World->BroadcastSoundEffect("item.hoe.till", {a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5}, 1.0f, 0.8f);
- a_Player->UseEquippedItem();
- return true;
+ return false;
}
- return false;
+ // Transform:
+ auto NewBlockType = ((BlockType == E_BLOCK_DIRT) && (BlockMeta == E_META_DIRT_COARSE)) ? E_BLOCK_DIRT : E_BLOCK_FARMLAND;
+ a_World->SetBlock(a_ClickedBlockPos, NewBlockType, 0);
+ a_World->BroadcastSoundEffect("item.hoe.till", a_ClickedBlockPos + Vector3d(0.5, 0.5, 0.5), 1.0f, 0.8f);
+ a_Player->UseEquippedItem();
+ return true;
}
+
+
+
virtual short GetDurabilityLossByAction(eDurabilityLostAction a_Action) override
{
switch (a_Action)