diff options
author | Mattes D <github@xoft.cz> | 2020-04-21 22:19:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-21 22:19:22 +0200 |
commit | 487f9a2aa9b5497495cef1ac3b9c7a603e69f862 (patch) | |
tree | 054a846942f414060e29c72f4a717c8a89e70893 /src/Items/ItemHoe.h | |
parent | Delet SpawnObject params (diff) | |
download | cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar.gz cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar.bz2 cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar.lz cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar.xz cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.tar.zst cuberite-487f9a2aa9b5497495cef1ac3b9c7a603e69f862.zip |
Diffstat (limited to 'src/Items/ItemHoe.h')
-rw-r--r-- | src/Items/ItemHoe.h | 76 |
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) |