diff options
Diffstat (limited to '')
-rw-r--r-- | src/Items/ItemHandler.cpp | 56 | ||||
-rw-r--r-- | src/Items/ItemPickaxe.h | 3 | ||||
-rw-r--r-- | src/Items/ItemShears.h | 2 | ||||
-rw-r--r-- | src/Items/ItemShovel.h | 7 | ||||
-rw-r--r-- | src/Items/ItemSword.h | 6 |
5 files changed, 61 insertions, 13 deletions
diff --git a/src/Items/ItemHandler.cpp b/src/Items/ItemHandler.cpp index f0a91214d..e256fa232 100644 --- a/src/Items/ItemHandler.cpp +++ b/src/Items/ItemHandler.cpp @@ -328,12 +328,9 @@ void cItemHandler::OnBlockDestroyed(cWorld * a_World, cPlayer * a_Player, const if (a_Player->IsGameModeSurvival()) { - if (!BlockRequiresSpecialTool(Block) || CanHarvestBlock(Block)) - { - cChunkInterface ChunkInterface(a_World->GetChunkMap()); - cBlockInServerPluginInterface PluginInterface(*a_World); - Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ); - } + cChunkInterface ChunkInterface(a_World->GetChunkMap()); + cBlockInServerPluginInterface PluginInterface(*a_World); + Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block), a_Player->GetEquippedItem().m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0); } if (!cBlockInfo::IsOneHitDig(Block)) @@ -542,9 +539,50 @@ bool cItemHandler::CanRepairWithRawMaterial(short a_ItemType) bool cItemHandler::CanHarvestBlock(BLOCKTYPE a_BlockType) { - UNUSED(a_BlockType); - - return false; + switch (a_BlockType) + { + case E_BLOCK_ANVIL: + case E_BLOCK_ENCHANTMENT_TABLE: + case E_BLOCK_FURNACE: + case E_BLOCK_LIT_FURNACE: + case E_BLOCK_COAL_ORE: + case E_BLOCK_STONE: + case E_BLOCK_COBBLESTONE: + case E_BLOCK_END_STONE: + case E_BLOCK_MOSSY_COBBLESTONE: + case E_BLOCK_SANDSTONE_STAIRS: + case E_BLOCK_SANDSTONE: + case E_BLOCK_STONE_BRICKS: + case E_BLOCK_NETHER_BRICK: + case E_BLOCK_NETHERRACK: + case E_BLOCK_STONE_SLAB: + case E_BLOCK_DOUBLE_STONE_SLAB: + case E_BLOCK_STONE_PRESSURE_PLATE: + case E_BLOCK_BRICK: + case E_BLOCK_COBBLESTONE_STAIRS: + case E_BLOCK_COBBLESTONE_WALL: + case E_BLOCK_STONE_BRICK_STAIRS: + case E_BLOCK_NETHER_BRICK_STAIRS: + case E_BLOCK_CAULDRON: + case E_BLOCK_OBSIDIAN: + case E_BLOCK_DIAMOND_BLOCK: + case E_BLOCK_DIAMOND_ORE: + case E_BLOCK_GOLD_BLOCK: + case E_BLOCK_GOLD_ORE: + case E_BLOCK_REDSTONE_ORE: + case E_BLOCK_REDSTONE_ORE_GLOWING: + case E_BLOCK_EMERALD_ORE: + case E_BLOCK_IRON_BLOCK: + case E_BLOCK_IRON_ORE: + case E_BLOCK_LAPIS_ORE: + case E_BLOCK_LAPIS_BLOCK: + case E_BLOCK_SNOW: + case E_BLOCK_VINES: + { + return false; + } + default: return true; + } } diff --git a/src/Items/ItemPickaxe.h b/src/Items/ItemPickaxe.h index 647d59b5c..17fd96822 100644 --- a/src/Items/ItemPickaxe.h +++ b/src/Items/ItemPickaxe.h @@ -8,6 +8,7 @@ class cItemPickaxeHandler : public cItemHandler { + typedef cItemHandler super; public: cItemPickaxeHandler(int a_ItemType) : cItemHandler(a_ItemType) @@ -84,7 +85,7 @@ public: return PickaxeLevel() >= 1; } } - return false; + return super::CanHarvestBlock(a_BlockType); } virtual bool CanRepairWithRawMaterial(short a_ItemType) override diff --git a/src/Items/ItemShears.h b/src/Items/ItemShears.h index f1b6cafc3..8f5d5f385 100644 --- a/src/Items/ItemShears.h +++ b/src/Items/ItemShears.h @@ -59,7 +59,7 @@ public: return true; } } // switch (a_BlockType) - return false; + return super::CanHarvestBlock(a_BlockType); } diff --git a/src/Items/ItemShovel.h b/src/Items/ItemShovel.h index 78cfe26fe..7d5760fa9 100644 --- a/src/Items/ItemShovel.h +++ b/src/Items/ItemShovel.h @@ -14,6 +14,7 @@ class cItemShovelHandler : public cItemHandler { + typedef cItemHandler super; public: cItemShovelHandler(int a_ItemType) : cItemHandler(a_ItemType) @@ -39,7 +40,11 @@ public: virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override { - return (a_BlockType == E_BLOCK_SNOW); + if (a_BlockType == E_BLOCK_SNOW) + { + return true; + } + return super::CanHarvestBlock(a_BlockType); } virtual bool CanRepairWithRawMaterial(short a_ItemType) override diff --git a/src/Items/ItemSword.h b/src/Items/ItemSword.h index 8fd70bd7b..1a17023ef 100644 --- a/src/Items/ItemSword.h +++ b/src/Items/ItemSword.h @@ -22,7 +22,11 @@ public: virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override { - return (a_BlockType == E_BLOCK_COBWEB); + if (a_BlockType == E_BLOCK_COBWEB) + { + return true; + } + return super::CanHarvestBlock(a_BlockType); } |