diff --git a/src/pocketmine/block/Anvil.php b/src/pocketmine/block/Anvil.php index 90111d3f2..6be3fd084 100644 --- a/src/pocketmine/block/Anvil.php +++ b/src/pocketmine/block/Anvil.php @@ -26,7 +26,7 @@ namespace pocketmine\block; use pocketmine\inventory\AnvilInventory; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\Player; @@ -65,7 +65,11 @@ class Anvil extends Fallable{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function recalculateBoundingBox() : ?AxisAlignedBB{ @@ -106,13 +110,9 @@ class Anvil extends Fallable{ return $this->getLevel()->setBlock($blockReplace, $this, true, true); } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return [ - ItemFactory::get($this->getItemId(), $this->getDamage() & 0x0c, 1) - ]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get($this->getItemId(), $this->getDamage() & 0x0c, 1) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Bed.php b/src/pocketmine/block/Bed.php index e69b03642..d4f03187a 100644 --- a/src/pocketmine/block/Bed.php +++ b/src/pocketmine/block/Bed.php @@ -199,7 +199,7 @@ class Bed extends Transparent{ return true; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ if($this->isHeadPart()){ $tile = $this->getLevel()->getTile($this); if($tile instanceof TileBed){ diff --git a/src/pocketmine/block/Beetroot.php b/src/pocketmine/block/Beetroot.php index 1fb15267f..3aa62d536 100644 --- a/src/pocketmine/block/Beetroot.php +++ b/src/pocketmine/block/Beetroot.php @@ -38,7 +38,7 @@ class Beetroot extends Crops{ return "Beetroot Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ if($this->meta >= 0x07){ return [ ItemFactory::get(Item::BEETROOT, 0, 1), diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index 018325ba6..cf5b89980 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -29,7 +29,6 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\level\MovingObjectPosition; use pocketmine\level\Position; @@ -195,8 +194,49 @@ class Block extends Position implements BlockIds, Metadatable{ return true; } - public function canBeBrokenWith(Item $item) : bool{ - return $this->getHardness() !== -1; + /** + * @return int + */ + public function getToolType() : int{ + return BlockToolType::TYPE_NONE; + } + + /** + * Returns the level of tool required to harvest this block (for normal blocks). When the tool type matches the + * block's required tool type, the tool must have a harvest level greater than or equal to this value to be able to + * successfully harvest the block. + * + * If the block requires a specific minimum tier of tiered tool, the minimum tier required should be returned. + * Otherwise, 1 should be returned if a tool is required, 0 if not. + * + * @see Item::getBlockToolHarvestLevel() + * + * @return int + */ + public function getToolHarvestLevel() : int{ + return 0; + } + + /** + * Returns whether the specified item is the proper tool to use for breaking this block. This checks tool type and + * harvest level requirement. + * + * In most cases this is also used to determine whether block drops should be created or not, except in some + * special cases such as vines. + * + * @param Item $tool + * + * @return bool + */ + public function isCompatibleWithTool(Item $tool) : bool{ + if($this->getHardness() < 0){ + return false; + } + + $toolType = $this->getToolType(); + $harvestLevel = $this->getToolHarvestLevel(); + return $toolType === BlockToolType::TYPE_NONE or $harvestLevel === 0 or ( + ($toolType & $tool->getBlockToolType()) !== 0 and $tool->getBlockToolHarvestLevel() >= $harvestLevel); } /** @@ -220,41 +260,20 @@ class Block extends Position implements BlockIds, Metadatable{ * @return float */ public function getBreakTime(Item $item) : float{ - $base = $this->getHardness() * 1.5; - if($this->canBeBrokenWith($item)){ - if($this->getToolType() === Tool::TYPE_SHEARS and $item->isShears()){ - $base /= 15; - }elseif( - ($this->getToolType() === Tool::TYPE_PICKAXE and ($tier = $item->isPickaxe()) !== false) or - ($this->getToolType() === Tool::TYPE_AXE and ($tier = $item->isAxe()) !== false) or - ($this->getToolType() === Tool::TYPE_SHOVEL and ($tier = $item->isShovel()) !== false) - ){ - switch($tier){ - case Tool::TIER_WOODEN: - $base /= 2; - break; - case Tool::TIER_STONE: - $base /= 4; - break; - case Tool::TIER_IRON: - $base /= 6; - break; - case Tool::TIER_DIAMOND: - $base /= 8; - break; - case Tool::TIER_GOLD: - $base /= 12; - break; - } - } + $base = $this->getHardness(); + if($this->isCompatibleWithTool($item)){ + $base *= 1.5; }else{ - $base *= 3.33; + $base *= 5; } - if($item->isSword()){ - $base /= 1.5; + $efficiency = $item->getMiningEfficiency($this); + if($efficiency <= 0){ + throw new \RuntimeException("Item efficiency is invalid"); } + $base /= $efficiency; + return $base; } @@ -315,13 +334,6 @@ class Block extends Position implements BlockIds, Metadatable{ return $this->getHardness() * 5; } - /** - * @return int - */ - public function getToolType() : int{ - return Tool::TYPE_NONE; - } - /** * @return float */ @@ -420,6 +432,21 @@ class Block extends Position implements BlockIds, Metadatable{ * @return Item[] */ public function getDrops(Item $item) : array{ + if($this->isCompatibleWithTool($item)){ + return $this->getDropsForCompatibleTool($item); + } + + return []; + } + + /** + * Returns an array of Items to be dropped when the block is broken using the correct tool type. + * + * @param Item $item + * + * @return Item[] + */ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get($this->getItemId(), $this->getVariant(), 1) ]; diff --git a/src/pocketmine/item/DiamondAxe.php b/src/pocketmine/block/BlockToolType.php similarity index 65% rename from src/pocketmine/item/DiamondAxe.php rename to src/pocketmine/block/BlockToolType.php index 7904cd470..0239c6a02 100644 --- a/src/pocketmine/item/DiamondAxe.php +++ b/src/pocketmine/block/BlockToolType.php @@ -21,19 +21,19 @@ declare(strict_types=1); -namespace pocketmine\item; +namespace pocketmine\block; +/** + * Types of tools that can be used to break blocks + * Blocks may allow multiple tool types by combining these bitflags + */ +interface BlockToolType{ -class DiamondAxe extends Tool{ - public function __construct(int $meta = 0){ - parent::__construct(self::DIAMOND_AXE, $meta, "Diamond Axe"); - } + public const TYPE_NONE = 0; + public const TYPE_SWORD = 1 << 0; + public const TYPE_SHOVEL = 1 << 1; + public const TYPE_PICKAXE = 1 << 2; + public const TYPE_AXE = 1 << 3; + public const TYPE_SHEARS = 1 << 4; - public function isAxe(){ - return Tool::TIER_DIAMOND; - } - - public function getAttackPoints() : int{ - return 7; - } } \ No newline at end of file diff --git a/src/pocketmine/block/BoneBlock.php b/src/pocketmine/block/BoneBlock.php index 7a14513c3..b8be9ba12 100644 --- a/src/pocketmine/block/BoneBlock.php +++ b/src/pocketmine/block/BoneBlock.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\block\utils\PillarRotationHelper; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -46,7 +46,11 @@ class BoneBlock extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ @@ -57,13 +61,4 @@ class BoneBlock extends Solid{ public function getVariantBitmask() : int{ return 0x03; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - } \ No newline at end of file diff --git a/src/pocketmine/block/Bookshelf.php b/src/pocketmine/block/Bookshelf.php index 62b6e0baf..9c7c87cba 100644 --- a/src/pocketmine/block/Bookshelf.php +++ b/src/pocketmine/block/Bookshelf.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; class Bookshelf extends Solid{ @@ -44,10 +43,10 @@ class Bookshelf extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::BOOK, 0, 3) ]; diff --git a/src/pocketmine/block/BrewingStand.php b/src/pocketmine/block/BrewingStand.php index b0bc1f6a9..c1c6ef839 100644 --- a/src/pocketmine/block/BrewingStand.php +++ b/src/pocketmine/block/BrewingStand.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class BrewingStand extends Transparent{ @@ -42,7 +42,11 @@ class BrewingStand extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getVariantBitmask() : int{ diff --git a/src/pocketmine/block/BrickStairs.php b/src/pocketmine/block/BrickStairs.php index 4cec98259..4a02d5923 100644 --- a/src/pocketmine/block/BrickStairs.php +++ b/src/pocketmine/block/BrickStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class BrickStairs extends Stair{ @@ -42,7 +42,11 @@ class BrickStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ diff --git a/src/pocketmine/block/Bricks.php b/src/pocketmine/block/Bricks.php index d34141ae5..4582c1db6 100644 --- a/src/pocketmine/block/Bricks.php +++ b/src/pocketmine/block/Bricks.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Bricks extends Solid{ @@ -43,18 +42,14 @@ class Bricks extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Bricks"; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/BrownMushroomBlock.php b/src/pocketmine/block/BrownMushroomBlock.php index 923c1591a..62e65d06f 100644 --- a/src/pocketmine/block/BrownMushroomBlock.php +++ b/src/pocketmine/block/BrownMushroomBlock.php @@ -33,7 +33,7 @@ class BrownMushroomBlock extends RedMushroomBlock{ return "Brown Mushroom Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ Item::get(Item::BROWN_MUSHROOM, 0, mt_rand(0, 2)) ]; diff --git a/src/pocketmine/block/BurningFurnace.php b/src/pocketmine/block/BurningFurnace.php index 6c396aff0..ad09052af 100644 --- a/src/pocketmine/block/BurningFurnace.php +++ b/src/pocketmine/block/BurningFurnace.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\nbt\tag\StringTag; use pocketmine\Player; @@ -48,7 +48,11 @@ class BurningFurnace extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getLightLevel() : int{ @@ -90,12 +94,4 @@ class BurningFurnace extends Solid{ public function getVariantBitmask() : int{ return 0; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/Cake.php b/src/pocketmine/block/Cake.php index 9c4863505..53bb8e968 100644 --- a/src/pocketmine/block/Cake.php +++ b/src/pocketmine/block/Cake.php @@ -85,7 +85,7 @@ class Cake extends Transparent implements FoodSource{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } diff --git a/src/pocketmine/block/Carrot.php b/src/pocketmine/block/Carrot.php index ae07e7fb9..8b2cdf7cc 100644 --- a/src/pocketmine/block/Carrot.php +++ b/src/pocketmine/block/Carrot.php @@ -38,7 +38,7 @@ class Carrot extends Crops{ return "Carrot Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::CARROT, 0, $this->meta >= 0x07 ? mt_rand(1, 4) : 1) ]; diff --git a/src/pocketmine/block/Chest.php b/src/pocketmine/block/Chest.php index b318bf25a..868fd102e 100644 --- a/src/pocketmine/block/Chest.php +++ b/src/pocketmine/block/Chest.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\nbt\tag\StringTag; @@ -49,7 +48,7 @@ class Chest extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } protected function recalculateBoundingBox() : ?AxisAlignedBB{ diff --git a/src/pocketmine/block/Clay.php b/src/pocketmine/block/Clay.php index 44556cb0a..595573974 100644 --- a/src/pocketmine/block/Clay.php +++ b/src/pocketmine/block/Clay.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; class Clay extends Solid{ @@ -40,14 +39,14 @@ class Clay extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function getName() : string{ return "Clay Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::CLAY_BALL, 0, 4) ]; diff --git a/src/pocketmine/block/Coal.php b/src/pocketmine/block/Coal.php index 423a20850..05495fcc8 100644 --- a/src/pocketmine/block/Coal.php +++ b/src/pocketmine/block/Coal.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Coal extends Solid{ @@ -39,21 +38,17 @@ class Coal extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Coal Block"; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - public function getFuelTime() : int{ return 16000; } diff --git a/src/pocketmine/block/CoalOre.php b/src/pocketmine/block/CoalOre.php index d352bb302..e8b1d25a0 100644 --- a/src/pocketmine/block/CoalOre.php +++ b/src/pocketmine/block/CoalOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class CoalOre extends Solid{ @@ -40,21 +40,21 @@ class CoalOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Coal Ore"; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return [ - ItemFactory::get(Item::COAL, 0, 1) - ]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::COAL, 0, 1) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Cobblestone.php b/src/pocketmine/block/Cobblestone.php index 68a1c26b7..2c9441df3 100644 --- a/src/pocketmine/block/Cobblestone.php +++ b/src/pocketmine/block/Cobblestone.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Cobblestone extends Solid{ @@ -35,7 +34,11 @@ class Cobblestone extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ @@ -45,12 +48,4 @@ class Cobblestone extends Solid{ public function getHardness() : float{ return 2; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/CobblestoneStairs.php b/src/pocketmine/block/CobblestoneStairs.php index 2e6b429ef..b50d8fba2 100644 --- a/src/pocketmine/block/CobblestoneStairs.php +++ b/src/pocketmine/block/CobblestoneStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class CobblestoneStairs extends Stair{ @@ -38,7 +38,11 @@ class CobblestoneStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ diff --git a/src/pocketmine/block/CobblestoneWall.php b/src/pocketmine/block/CobblestoneWall.php index a56909460..f051c438e 100644 --- a/src/pocketmine/block/CobblestoneWall.php +++ b/src/pocketmine/block/CobblestoneWall.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -38,7 +38,11 @@ class CobblestoneWall extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ diff --git a/src/pocketmine/block/Cobweb.php b/src/pocketmine/block/Cobweb.php index a41951570..eecd2ba3e 100644 --- a/src/pocketmine/block/Cobweb.php +++ b/src/pocketmine/block/Cobweb.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\ItemFactory; class Cobweb extends Flowable{ @@ -48,16 +48,21 @@ class Cobweb extends Flowable{ } public function getToolType() : int{ - return Tool::TYPE_SWORD; + return BlockToolType::TYPE_SWORD | BlockToolType::TYPE_SHEARS; + } + + public function getToolHarvestLevel() : int{ + return 1; } public function onEntityCollide(Entity $entity) : void{ $entity->resetFallDistance(); } - public function getDrops(Item $item) : array{ - //TODO: correct drops - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::STRING) + ]; } public function diffusesSkyLight() : bool{ diff --git a/src/pocketmine/block/CocoaBlock.php b/src/pocketmine/block/CocoaBlock.php index c8a4dd5d9..f98ec386f 100644 --- a/src/pocketmine/block/CocoaBlock.php +++ b/src/pocketmine/block/CocoaBlock.php @@ -35,5 +35,13 @@ class CocoaBlock extends Transparent{ return "Cocoa Block"; } + public function getHardness() : float{ + return 0.2; + } + + public function getToolType() : int{ + return BlockToolType::TYPE_AXE; + } + //TODO } diff --git a/src/pocketmine/block/Concrete.php b/src/pocketmine/block/Concrete.php index e2775d849..d3f9507c3 100644 --- a/src/pocketmine/block/Concrete.php +++ b/src/pocketmine/block/Concrete.php @@ -24,8 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\block\utils\ColorBlockMetaHelper; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Concrete extends Solid{ @@ -44,15 +43,10 @@ class Concrete extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } - } \ No newline at end of file diff --git a/src/pocketmine/block/ConcretePowder.php b/src/pocketmine/block/ConcretePowder.php index b07f83cac..4e8dc0187 100644 --- a/src/pocketmine/block/ConcretePowder.php +++ b/src/pocketmine/block/ConcretePowder.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\block\utils\ColorBlockMetaHelper; -use pocketmine\item\Tool; use pocketmine\level\Level; class ConcretePowder extends Fallable{ @@ -44,7 +43,7 @@ class ConcretePowder extends Fallable{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function onUpdate(int $type){ diff --git a/src/pocketmine/block/CraftingTable.php b/src/pocketmine/block/CraftingTable.php index c476746b8..a91ba5d1c 100644 --- a/src/pocketmine/block/CraftingTable.php +++ b/src/pocketmine/block/CraftingTable.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\inventory\BigCraftingGrid; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\Player; class CraftingTable extends Solid{ @@ -45,7 +44,7 @@ class CraftingTable extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function onActivate(Item $item, Player $player = null) : bool{ diff --git a/src/pocketmine/block/DaylightSensor.php b/src/pocketmine/block/DaylightSensor.php index f3fa72b53..b5381b41a 100644 --- a/src/pocketmine/block/DaylightSensor.php +++ b/src/pocketmine/block/DaylightSensor.php @@ -43,5 +43,9 @@ class DaylightSensor extends Transparent{ return 300; } + public function getToolType() : int{ + return BlockToolType::TYPE_AXE; + } + //TODO } diff --git a/src/pocketmine/block/DeadBush.php b/src/pocketmine/block/DeadBush.php index 5267df76e..e5bce9315 100644 --- a/src/pocketmine/block/DeadBush.php +++ b/src/pocketmine/block/DeadBush.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -54,16 +53,20 @@ class DeadBush extends Flowable{ } public function getToolType() : int{ - return Tool::TYPE_SHEARS; + return BlockToolType::TYPE_SHEARS; + } + + public function getToolHarvestLevel() : int{ + return 1; } public function getDrops(Item $item) : array{ - if($item->isShears()){ - return parent::getDrops($item); + if(!$this->isCompatibleWithTool($item)){ + return [ + ItemFactory::get(Item::STICK, 0, mt_rand(0, 2)) + ]; } - return [ - ItemFactory::get(Item::STICK, 0, mt_rand(0, 2)) - ]; + return parent::getDrops($item); } } \ No newline at end of file diff --git a/src/pocketmine/block/Diamond.php b/src/pocketmine/block/Diamond.php index 7420beebb..b28f61c2a 100644 --- a/src/pocketmine/block/Diamond.php +++ b/src/pocketmine/block/Diamond.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Diamond extends Solid{ @@ -43,14 +42,10 @@ class Diamond extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; } } \ No newline at end of file diff --git a/src/pocketmine/block/DiamondOre.php b/src/pocketmine/block/DiamondOre.php index fd8e1c144..0c0beb6a5 100644 --- a/src/pocketmine/block/DiamondOre.php +++ b/src/pocketmine/block/DiamondOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class DiamondOre extends Solid{ @@ -44,16 +44,16 @@ class DiamondOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return [ - ItemFactory::get(Item::DIAMOND, 0, 1) - ]; - } + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; + } - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::DIAMOND, 0, 1) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Dirt.php b/src/pocketmine/block/Dirt.php index e97d62e1a..4b92c1163 100644 --- a/src/pocketmine/block/Dirt.php +++ b/src/pocketmine/block/Dirt.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\Player; class Dirt extends Solid{ @@ -40,7 +39,7 @@ class Dirt extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function getName() : string{ diff --git a/src/pocketmine/block/DoublePlant.php b/src/pocketmine/block/DoublePlant.php index 60835d46b..99e094b82 100644 --- a/src/pocketmine/block/DoublePlant.php +++ b/src/pocketmine/block/DoublePlant.php @@ -109,19 +109,25 @@ class DoublePlant extends Flowable{ return 0x07; } + public function getToolType() : int{ + return ($this->meta === 2 or $this->meta === 3) ? BlockToolType::TYPE_SHEARS : BlockToolType::TYPE_NONE; + } + + public function getToolHarvestLevel() : int{ + return ($this->meta === 2 or $this->meta === 3) ? 1 : 0; //only grass or fern require shears + } + public function getDrops(Item $item) : array{ if($this->meta & self::BITFLAG_TOP){ - if(!$item->isShears() and ($this->meta === 2 or $this->meta === 3)){ //grass or fern - if(mt_rand(0, 24) === 0){ - return [ - ItemFactory::get(Item::SEEDS, 0, 1) - ]; - } - - return []; + if($this->isCompatibleWithTool($item)){ + return parent::getDrops($item); } - return parent::getDrops($item); + if(mt_rand(0, 24) === 0){ + return [ + ItemFactory::get(Item::SEEDS, 0, 1) + ]; + } } return []; diff --git a/src/pocketmine/block/DoubleSlab.php b/src/pocketmine/block/DoubleSlab.php index f6bc91cff..22bcb08a6 100644 --- a/src/pocketmine/block/DoubleSlab.php +++ b/src/pocketmine/block/DoubleSlab.php @@ -38,7 +38,7 @@ abstract class DoubleSlab extends Solid{ return "Double " . BlockFactory::get($this->getSlabId(), $this->getVariant())->getName() . " Slab"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get($this->getSlabId(), $this->getVariant(), 2) ]; diff --git a/src/pocketmine/block/DoubleStoneSlab.php b/src/pocketmine/block/DoubleStoneSlab.php index 438c45d74..52362daf3 100644 --- a/src/pocketmine/block/DoubleStoneSlab.php +++ b/src/pocketmine/block/DoubleStoneSlab.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class DoubleStoneSlab extends DoubleSlab{ @@ -39,15 +38,10 @@ class DoubleStoneSlab extends DoubleSlab{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } - } \ No newline at end of file diff --git a/src/pocketmine/block/DoubleWoodenSlab.php b/src/pocketmine/block/DoubleWoodenSlab.php index 087a651c4..1eea2fa20 100644 --- a/src/pocketmine/block/DoubleWoodenSlab.php +++ b/src/pocketmine/block/DoubleWoodenSlab.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class DoubleWoodenSlab extends DoubleSlab{ protected $id = self::DOUBLE_WOODEN_SLAB; @@ -38,6 +36,6 @@ class DoubleWoodenSlab extends DoubleSlab{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } } \ No newline at end of file diff --git a/src/pocketmine/block/Emerald.php b/src/pocketmine/block/Emerald.php index 80c4ebf3d..88dd07d2a 100644 --- a/src/pocketmine/block/Emerald.php +++ b/src/pocketmine/block/Emerald.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Emerald extends Solid{ @@ -39,18 +38,14 @@ class Emerald extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; } public function getName() : string{ return "Emerald Block"; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/EmeraldOre.php b/src/pocketmine/block/EmeraldOre.php index 9e5549c8f..bd6cffb27 100644 --- a/src/pocketmine/block/EmeraldOre.php +++ b/src/pocketmine/block/EmeraldOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class EmeraldOre extends Solid{ @@ -40,20 +40,20 @@ class EmeraldOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; } public function getHardness() : float{ return 3; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return [ + public function getDropsForCompatibleTool(Item $item) : array{ + return [ ItemFactory::get(Item::EMERALD, 0, 1) - ]; - } - - return []; + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/EnchantingTable.php b/src/pocketmine/block/EnchantingTable.php index c991254cd..6f7fd2607 100644 --- a/src/pocketmine/block/EnchantingTable.php +++ b/src/pocketmine/block/EnchantingTable.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\inventory\EnchantInventory; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\Player; use pocketmine\tile\EnchantTable as TileEnchantTable; @@ -60,7 +60,11 @@ class EnchantingTable extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function onActivate(Item $item, Player $player = null) : bool{ @@ -72,12 +76,4 @@ class EnchantingTable extends Transparent{ return true; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/EndStone.php b/src/pocketmine/block/EndStone.php index 3b4910dcc..897fd2ee3 100644 --- a/src/pocketmine/block/EndStone.php +++ b/src/pocketmine/block/EndStone.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class EndStone extends Solid{ @@ -38,7 +38,11 @@ class EndStone extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ diff --git a/src/pocketmine/block/EndStoneBricks.php b/src/pocketmine/block/EndStoneBricks.php index 9969175cf..740858493 100644 --- a/src/pocketmine/block/EndStoneBricks.php +++ b/src/pocketmine/block/EndStoneBricks.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class EndStoneBricks extends Solid{ @@ -43,15 +42,10 @@ class EndStoneBricks extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } - } \ No newline at end of file diff --git a/src/pocketmine/block/EnderChest.php b/src/pocketmine/block/EnderChest.php index 67560bd80..7a206695a 100644 --- a/src/pocketmine/block/EnderChest.php +++ b/src/pocketmine/block/EnderChest.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\Player; use pocketmine\tile\EnderChest as TileEnderChest; @@ -52,7 +52,11 @@ class EnderChest extends Chest{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ @@ -97,12 +101,10 @@ class EnderChest extends Chest{ return true; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return [ItemFactory::get(Item::OBSIDIAN, 0, 8)]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::OBSIDIAN, 0, 8) + ]; } public function getFuelTime() : int{ diff --git a/src/pocketmine/block/Farmland.php b/src/pocketmine/block/Farmland.php index eca14457a..eed8e93e6 100644 --- a/src/pocketmine/block/Farmland.php +++ b/src/pocketmine/block/Farmland.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -47,7 +46,7 @@ class Farmland extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function ticksRandomly() : bool{ @@ -108,7 +107,7 @@ class Farmland extends Transparent{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::DIRT, 0, 1) ]; diff --git a/src/pocketmine/block/FenceGate.php b/src/pocketmine/block/FenceGate.php index e401faa21..a0e9da31e 100644 --- a/src/pocketmine/block/FenceGate.php +++ b/src/pocketmine/block/FenceGate.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\sound\DoorSound; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -37,7 +36,7 @@ class FenceGate extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } diff --git a/src/pocketmine/block/Fire.php b/src/pocketmine/block/Fire.php index 70d9ccfc3..73ea857b4 100644 --- a/src/pocketmine/block/Fire.php +++ b/src/pocketmine/block/Fire.php @@ -79,7 +79,7 @@ class Fire extends Flowable{ } } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } diff --git a/src/pocketmine/block/FlowerPot.php b/src/pocketmine/block/FlowerPot.php index f9215b8a0..68157f8c8 100644 --- a/src/pocketmine/block/FlowerPot.php +++ b/src/pocketmine/block/FlowerPot.php @@ -96,8 +96,8 @@ class FlowerPot extends Flowable{ return true; } - public function getDrops(Item $item) : array{ - $items = parent::getDrops($item); + public function getDropsForCompatibleTool(Item $item) : array{ + $items = parent::getDropsForCompatibleTool($item); $tile = $this->getLevel()->getTile($this); if($tile instanceof TileFlowerPot){ diff --git a/src/pocketmine/block/Glass.php b/src/pocketmine/block/Glass.php index 5a0436da0..6e7d19a1d 100644 --- a/src/pocketmine/block/Glass.php +++ b/src/pocketmine/block/Glass.php @@ -41,7 +41,7 @@ class Glass extends Transparent{ return 0.3; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } } \ No newline at end of file diff --git a/src/pocketmine/block/GlassPane.php b/src/pocketmine/block/GlassPane.php index 878beb286..f4ac56199 100644 --- a/src/pocketmine/block/GlassPane.php +++ b/src/pocketmine/block/GlassPane.php @@ -41,7 +41,7 @@ class GlassPane extends Thin{ return 0.3; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } } \ No newline at end of file diff --git a/src/pocketmine/block/GlazedTerracotta.php b/src/pocketmine/block/GlazedTerracotta.php index 9365a5941..5d555d7fa 100644 --- a/src/pocketmine/block/GlazedTerracotta.php +++ b/src/pocketmine/block/GlazedTerracotta.php @@ -25,7 +25,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -36,7 +36,11 @@ class GlazedTerracotta extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ @@ -56,12 +60,4 @@ class GlazedTerracotta extends Solid{ public function getVariantBitmask() : int{ return 0; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/GlowingObsidian.php b/src/pocketmine/block/GlowingObsidian.php index f83f8fc5c..49fee8532 100644 --- a/src/pocketmine/block/GlowingObsidian.php +++ b/src/pocketmine/block/GlowingObsidian.php @@ -24,6 +24,8 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\item\TieredTool; + class GlowingObsidian extends Solid{ protected $id = self::GLOWING_OBSIDIAN; @@ -47,4 +49,12 @@ class GlowingObsidian extends Solid{ public function getBlastResistance() : float{ return 50; } + + public function getToolType() : int{ + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_DIAMOND; + } } \ No newline at end of file diff --git a/src/pocketmine/block/Glowstone.php b/src/pocketmine/block/Glowstone.php index 5ac7ab34f..6f6d545c1 100644 --- a/src/pocketmine/block/Glowstone.php +++ b/src/pocketmine/block/Glowstone.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; class Glowstone extends Transparent{ @@ -44,14 +43,14 @@ class Glowstone extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } public function getLightLevel() : int{ return 15; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)) ]; diff --git a/src/pocketmine/block/Gold.php b/src/pocketmine/block/Gold.php index 69a7bc286..bca943f2f 100644 --- a/src/pocketmine/block/Gold.php +++ b/src/pocketmine/block/Gold.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Gold extends Solid{ @@ -43,14 +42,10 @@ class Gold extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; } } \ No newline at end of file diff --git a/src/pocketmine/block/GoldOre.php b/src/pocketmine/block/GoldOre.php index e5807d027..720ab2bdd 100644 --- a/src/pocketmine/block/GoldOre.php +++ b/src/pocketmine/block/GoldOre.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class GoldOre extends Solid{ @@ -43,14 +42,10 @@ class GoldOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; } } \ No newline at end of file diff --git a/src/pocketmine/block/Grass.php b/src/pocketmine/block/Grass.php index 9a2a4b655..40d14150a 100644 --- a/src/pocketmine/block/Grass.php +++ b/src/pocketmine/block/Grass.php @@ -26,7 +26,6 @@ namespace pocketmine\block; use pocketmine\event\block\BlockSpreadEvent; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\generator\object\TallGrass as TallGrassObject; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -50,10 +49,10 @@ class Grass extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::DIRT, 0, 1) ]; diff --git a/src/pocketmine/block/GrassPath.php b/src/pocketmine/block/GrassPath.php index de0640798..0cfc2c23f 100644 --- a/src/pocketmine/block/GrassPath.php +++ b/src/pocketmine/block/GrassPath.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -43,7 +42,7 @@ class GrassPath extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } protected function recalculateBoundingBox() : ?AxisAlignedBB{ @@ -70,7 +69,7 @@ class GrassPath extends Transparent{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::DIRT, 0, 1) ]; diff --git a/src/pocketmine/block/Gravel.php b/src/pocketmine/block/Gravel.php index 12ce9272b..8c2e61fa7 100644 --- a/src/pocketmine/block/Gravel.php +++ b/src/pocketmine/block/Gravel.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; class Gravel extends Fallable{ @@ -44,17 +43,17 @@ class Gravel extends Fallable{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ if(mt_rand(1, 10) === 1){ return [ ItemFactory::get(Item::FLINT, 0, 1) ]; } - return parent::getDrops($item); + return parent::getDropsForCompatibleTool($item); } } \ No newline at end of file diff --git a/src/pocketmine/block/HardenedClay.php b/src/pocketmine/block/HardenedClay.php index 1e7a1b0bb..c16b91ac8 100644 --- a/src/pocketmine/block/HardenedClay.php +++ b/src/pocketmine/block/HardenedClay.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class HardenedClay extends Solid{ @@ -38,7 +38,11 @@ class HardenedClay extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ diff --git a/src/pocketmine/block/Ice.php b/src/pocketmine/block/Ice.php index 3006153cd..2b69f47cd 100644 --- a/src/pocketmine/block/Ice.php +++ b/src/pocketmine/block/Ice.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\Player; @@ -53,7 +52,7 @@ class Ice extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } public function onBreak(Item $item, Player $player = null) : bool{ @@ -75,7 +74,7 @@ class Ice extends Transparent{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } } \ No newline at end of file diff --git a/src/pocketmine/block/Iron.php b/src/pocketmine/block/Iron.php index 8ab234d5e..180e63510 100644 --- a/src/pocketmine/block/Iron.php +++ b/src/pocketmine/block/Iron.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Iron extends Solid{ @@ -39,18 +38,14 @@ class Iron extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_STONE; } public function getHardness() : float{ return 5; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_STONE){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/IronBars.php b/src/pocketmine/block/IronBars.php index 748d58f09..30bdd92e1 100644 --- a/src/pocketmine/block/IronBars.php +++ b/src/pocketmine/block/IronBars.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class IronBars extends Thin{ @@ -43,20 +42,15 @@ class IronBars extends Thin{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getVariantBitmask() : int{ return 0; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - } diff --git a/src/pocketmine/block/IronDoor.php b/src/pocketmine/block/IronDoor.php index a3b11694a..fd0bc96a7 100644 --- a/src/pocketmine/block/IronDoor.php +++ b/src/pocketmine/block/IronDoor.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class IronDoor extends Door{ @@ -41,18 +41,14 @@ class IronDoor extends Door{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ return 5; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/IronOre.php b/src/pocketmine/block/IronOre.php index b0ab3bb46..6a7d37ccd 100644 --- a/src/pocketmine/block/IronOre.php +++ b/src/pocketmine/block/IronOre.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class IronOre extends Solid{ @@ -39,18 +38,14 @@ class IronOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_STONE; } public function getHardness() : float{ return 3; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_STONE){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/IronTrapdoor.php b/src/pocketmine/block/IronTrapdoor.php index 3fd776ea4..cd52d5030 100644 --- a/src/pocketmine/block/IronTrapdoor.php +++ b/src/pocketmine/block/IronTrapdoor.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class IronTrapdoor extends Trapdoor{ @@ -38,6 +38,10 @@ class IronTrapdoor extends Trapdoor{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } } diff --git a/src/pocketmine/block/ItemFrame.php b/src/pocketmine/block/ItemFrame.php index 7ff976a2c..c222b7cb6 100644 --- a/src/pocketmine/block/ItemFrame.php +++ b/src/pocketmine/block/ItemFrame.php @@ -99,8 +99,8 @@ class ItemFrame extends Flowable{ return 0; } - public function getDrops(Item $item) : array{ - $drops = parent::getDrops($item); + public function getDropsForCompatibleTool(Item $item) : array{ + $drops = parent::getDropsForCompatibleTool($item); $tile = $this->level->getTile($this); if($tile instanceof TileItemFrame){ diff --git a/src/pocketmine/block/Ladder.php b/src/pocketmine/block/Ladder.php index 7917adf6f..384e845ed 100644 --- a/src/pocketmine/block/Ladder.php +++ b/src/pocketmine/block/Ladder.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -122,7 +121,7 @@ class Ladder extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getVariantBitmask() : int{ diff --git a/src/pocketmine/block/Lapis.php b/src/pocketmine/block/Lapis.php index 0931708c1..da3092c43 100644 --- a/src/pocketmine/block/Lapis.php +++ b/src/pocketmine/block/Lapis.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Lapis extends Solid{ @@ -39,19 +38,14 @@ class Lapis extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_STONE; } public function getHardness() : float{ return 3; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_STONE){ - return parent::getDrops($item); - } - - return []; - } - } \ No newline at end of file diff --git a/src/pocketmine/block/LapisOre.php b/src/pocketmine/block/LapisOre.php index a27220b98..91d3cd69a 100644 --- a/src/pocketmine/block/LapisOre.php +++ b/src/pocketmine/block/LapisOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class LapisOre extends Solid{ @@ -40,21 +40,21 @@ class LapisOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_STONE; } public function getName() : string{ return "Lapis Lazuli Ore"; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_STONE){ - return [ - ItemFactory::get(Item::DYE, 4, mt_rand(4, 8)) - ]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::DYE, 4, mt_rand(4, 8)) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Leaves.php b/src/pocketmine/block/Leaves.php index 8bf71309e..b06ed5b99 100644 --- a/src/pocketmine/block/Leaves.php +++ b/src/pocketmine/block/Leaves.php @@ -26,7 +26,6 @@ namespace pocketmine\block; use pocketmine\event\block\LeavesDecayEvent; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -51,7 +50,7 @@ class Leaves extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_SHEARS; + return BlockToolType::TYPE_SHEARS; } public function getName() : string{ @@ -174,19 +173,19 @@ class Leaves extends Transparent{ } public function getDrops(Item $item) : array{ - if($item->isShears()){ - return parent::getDrops($item); + if(!$this->isCompatibleWithTool($item)){ + $drops = []; + if(mt_rand(1, 20) === 1){ //Saplings + $drops[] = $this->getSaplingItem(); + } + if($this->canDropApples() and mt_rand(1, 200) === 1){ //Apples + $drops[] = ItemFactory::get(Item::APPLE, 0, 1); + } + + return $drops; } - $drops = []; - if(mt_rand(1, 20) === 1){ //Saplings - $drops[] = $this->getSaplingItem(); - } - if($this->canDropApples() and mt_rand(1, 200) === 1){ //Apples - $drops[] = ItemFactory::get(Item::APPLE, 0, 1); - } - - return $drops; + return parent::getDrops($item); } public function getSaplingItem() : Item{ diff --git a/src/pocketmine/block/Lever.php b/src/pocketmine/block/Lever.php index add57cf41..27e2d2e3a 100644 --- a/src/pocketmine/block/Lever.php +++ b/src/pocketmine/block/Lever.php @@ -34,4 +34,8 @@ class Lever extends Flowable{ public function getName() : string{ return "Lever"; } + + public function getHardness() : float{ + return 0.5; + } } diff --git a/src/pocketmine/block/Liquid.php b/src/pocketmine/block/Liquid.php index b57334259..028201f0d 100644 --- a/src/pocketmine/block/Liquid.php +++ b/src/pocketmine/block/Liquid.php @@ -72,7 +72,7 @@ abstract class Liquid extends Transparent{ return null; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } diff --git a/src/pocketmine/block/Magma.php b/src/pocketmine/block/Magma.php index 8cdb98147..e5209e72e 100644 --- a/src/pocketmine/block/Magma.php +++ b/src/pocketmine/block/Magma.php @@ -26,8 +26,7 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\event\entity\EntityDamageEvent; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Magma extends Solid{ @@ -46,7 +45,11 @@ class Magma extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getLightLevel() : int{ @@ -63,13 +66,4 @@ class Magma extends Solid{ $entity->attack($ev); } } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - } \ No newline at end of file diff --git a/src/pocketmine/block/Melon.php b/src/pocketmine/block/Melon.php index 6e2725f11..7dabf89df 100644 --- a/src/pocketmine/block/Melon.php +++ b/src/pocketmine/block/Melon.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; class Melon extends Transparent{ @@ -44,10 +43,10 @@ class Melon extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::MELON_SLICE, 0, mt_rand(3, 7)) ]; diff --git a/src/pocketmine/block/MelonStem.php b/src/pocketmine/block/MelonStem.php index 642d11932..4669ca393 100644 --- a/src/pocketmine/block/MelonStem.php +++ b/src/pocketmine/block/MelonStem.php @@ -83,7 +83,7 @@ class MelonStem extends Crops{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::MELON_SEEDS, 0, mt_rand(0, 2)) ]; diff --git a/src/pocketmine/block/MonsterSpawner.php b/src/pocketmine/block/MonsterSpawner.php index 22ba86456..b689dfd36 100644 --- a/src/pocketmine/block/MonsterSpawner.php +++ b/src/pocketmine/block/MonsterSpawner.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class MonsterSpawner extends Transparent{ @@ -39,14 +39,18 @@ class MonsterSpawner extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Monster Spawner"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return []; } } \ No newline at end of file diff --git a/src/pocketmine/block/Mycelium.php b/src/pocketmine/block/Mycelium.php index be6026fa1..3c2e7b16d 100644 --- a/src/pocketmine/block/Mycelium.php +++ b/src/pocketmine/block/Mycelium.php @@ -26,7 +26,6 @@ namespace pocketmine\block; use pocketmine\event\block\BlockSpreadEvent; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Server; @@ -44,14 +43,14 @@ class Mycelium extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function getHardness() : float{ return 0.6; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::DIRT, 0, 1) ]; diff --git a/src/pocketmine/block/NetherBrick.php b/src/pocketmine/block/NetherBrick.php index a1d7ef1a1..b0bd25e11 100644 --- a/src/pocketmine/block/NetherBrick.php +++ b/src/pocketmine/block/NetherBrick.php @@ -23,24 +23,19 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class NetherBrick extends Solid{ public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ return 2; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/NetherBrickFence.php b/src/pocketmine/block/NetherBrickFence.php index ac8a89aa7..099518fd2 100644 --- a/src/pocketmine/block/NetherBrickFence.php +++ b/src/pocketmine/block/NetherBrickFence.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class NetherBrickFence extends Fence{ @@ -35,18 +34,14 @@ class NetherBrickFence extends Fence{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Nether Brick Fence"; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } diff --git a/src/pocketmine/block/NetherBrickStairs.php b/src/pocketmine/block/NetherBrickStairs.php index 67f380cc7..e4b905cf4 100644 --- a/src/pocketmine/block/NetherBrickStairs.php +++ b/src/pocketmine/block/NetherBrickStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class NetherBrickStairs extends Stair{ @@ -42,7 +42,11 @@ class NetherBrickStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } } \ No newline at end of file diff --git a/src/pocketmine/block/NetherQuartzOre.php b/src/pocketmine/block/NetherQuartzOre.php index 97c95e25a..ec712d1df 100644 --- a/src/pocketmine/block/NetherQuartzOre.php +++ b/src/pocketmine/block/NetherQuartzOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class NetherQuartzOre extends Solid{ @@ -44,17 +44,17 @@ class NetherQuartzOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return [ - ItemFactory::get(Item::QUARTZ, 0, 1) - ]; - } + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; + } - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::QUARTZ, 0, 1) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/NetherReactor.php b/src/pocketmine/block/NetherReactor.php index 98038e5d9..faf9b99a4 100644 --- a/src/pocketmine/block/NetherReactor.php +++ b/src/pocketmine/block/NetherReactor.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class NetherReactor extends Solid{ protected $id = Block::NETHER_REACTOR; @@ -44,22 +44,22 @@ class NetherReactor extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ return 3; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return [ - ItemFactory::get(Item::IRON_INGOT, 0, 6), - ItemFactory::get(Item::DIAMOND, 0, 3) - ]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::IRON_INGOT, 0, 6), + ItemFactory::get(Item::DIAMOND, 0, 3) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/NetherWartPlant.php b/src/pocketmine/block/NetherWartPlant.php index abfba7dd8..2a9f9a974 100644 --- a/src/pocketmine/block/NetherWartPlant.php +++ b/src/pocketmine/block/NetherWartPlant.php @@ -85,7 +85,7 @@ class NetherWartPlant extends Flowable{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get($this->getItemId(), 0, ($this->getDamage() === 3 ? mt_rand(2, 4) : 1)) ]; diff --git a/src/pocketmine/block/Netherrack.php b/src/pocketmine/block/Netherrack.php index a8ebf6c6c..a30d5cba4 100644 --- a/src/pocketmine/block/Netherrack.php +++ b/src/pocketmine/block/Netherrack.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Netherrack extends Solid{ @@ -43,14 +42,10 @@ class Netherrack extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } } \ No newline at end of file diff --git a/src/pocketmine/block/NoteBlock.php b/src/pocketmine/block/NoteBlock.php index 5b40fa42b..ca0d3c661 100644 --- a/src/pocketmine/block/NoteBlock.php +++ b/src/pocketmine/block/NoteBlock.php @@ -38,4 +38,12 @@ class NoteBlock extends Solid{ public function getFuelTime() : int{ return 300; } + + public function getHardness() : float{ + return 0.8; + } + + public function getToolType() : int{ + return BlockToolType::TYPE_AXE; + } } diff --git a/src/pocketmine/block/Obsidian.php b/src/pocketmine/block/Obsidian.php index 1b817f3c4..4cf98cd76 100644 --- a/src/pocketmine/block/Obsidian.php +++ b/src/pocketmine/block/Obsidian.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Obsidian extends Solid{ @@ -39,7 +38,11 @@ class Obsidian extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_DIAMOND; } public function getHardness() : float{ @@ -49,12 +52,4 @@ class Obsidian extends Solid{ public function getBlastResistance() : float{ return 6000; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_DIAMOND){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/PackedIce.php b/src/pocketmine/block/PackedIce.php index 38b68f5d0..378868ef9 100644 --- a/src/pocketmine/block/PackedIce.php +++ b/src/pocketmine/block/PackedIce.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class PackedIce extends Solid{ protected $id = self::PACKED_ICE; @@ -46,7 +44,7 @@ class PackedIce extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } } \ No newline at end of file diff --git a/src/pocketmine/block/Planks.php b/src/pocketmine/block/Planks.php index 8fa7a46d8..77d6a773d 100644 --- a/src/pocketmine/block/Planks.php +++ b/src/pocketmine/block/Planks.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class Planks extends Solid{ public const OAK = 0; public const SPRUCE = 1; @@ -44,7 +42,7 @@ class Planks extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getName() : string{ diff --git a/src/pocketmine/block/Podzol.php b/src/pocketmine/block/Podzol.php index 77b937203..b30c5cc8e 100644 --- a/src/pocketmine/block/Podzol.php +++ b/src/pocketmine/block/Podzol.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class Podzol extends Solid{ protected $id = self::PODZOL; @@ -34,7 +32,7 @@ class Podzol extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function getName() : string{ diff --git a/src/pocketmine/block/Potato.php b/src/pocketmine/block/Potato.php index 861438c08..f4c2ef33b 100644 --- a/src/pocketmine/block/Potato.php +++ b/src/pocketmine/block/Potato.php @@ -38,7 +38,7 @@ class Potato extends Crops{ return "Potato Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::POTATO, 0, $this->getDamage() >= 0x07 ? mt_rand(1, 4) : 1) ]; diff --git a/src/pocketmine/block/Prismarine.php b/src/pocketmine/block/Prismarine.php index db741e100..0e4b64666 100644 --- a/src/pocketmine/block/Prismarine.php +++ b/src/pocketmine/block/Prismarine.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Prismarine extends Solid{ @@ -52,18 +51,14 @@ class Prismarine extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getVariantBitmask() : int{ return 0x03; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/Pumpkin.php b/src/pocketmine/block/Pumpkin.php index b9d77b3ee..a32896878 100644 --- a/src/pocketmine/block/Pumpkin.php +++ b/src/pocketmine/block/Pumpkin.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -41,7 +40,7 @@ class Pumpkin extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getName() : string{ diff --git a/src/pocketmine/block/PumpkinStem.php b/src/pocketmine/block/PumpkinStem.php index dd21a30e5..5c00c8f13 100644 --- a/src/pocketmine/block/PumpkinStem.php +++ b/src/pocketmine/block/PumpkinStem.php @@ -83,7 +83,7 @@ class PumpkinStem extends Crops{ return false; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)) ]; diff --git a/src/pocketmine/block/PurpurStairs.php b/src/pocketmine/block/PurpurStairs.php index 3298051da..eba61b0fa 100644 --- a/src/pocketmine/block/PurpurStairs.php +++ b/src/pocketmine/block/PurpurStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class PurpurStairs extends Stair{ @@ -38,7 +38,11 @@ class PurpurStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ diff --git a/src/pocketmine/block/Quartz.php b/src/pocketmine/block/Quartz.php index 2964cbaaf..fbb98352c 100644 --- a/src/pocketmine/block/Quartz.php +++ b/src/pocketmine/block/Quartz.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\block\utils\PillarRotationHelper; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -62,18 +62,14 @@ class Quartz extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getVariantBitmask() : int{ return 0x03; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/QuartzStairs.php b/src/pocketmine/block/QuartzStairs.php index b5905f647..75a60dd7d 100644 --- a/src/pocketmine/block/QuartzStairs.php +++ b/src/pocketmine/block/QuartzStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class QuartzStairs extends Stair{ @@ -38,7 +38,11 @@ class QuartzStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ diff --git a/src/pocketmine/block/RedMushroomBlock.php b/src/pocketmine/block/RedMushroomBlock.php index 9d2e416e7..e1e092879 100644 --- a/src/pocketmine/block/RedMushroomBlock.php +++ b/src/pocketmine/block/RedMushroomBlock.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; class RedMushroomBlock extends Solid{ @@ -43,10 +42,10 @@ class RedMushroomBlock extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ Item::get(Item::RED_MUSHROOM, 0, mt_rand(0, 2)) ]; diff --git a/src/pocketmine/block/Redstone.php b/src/pocketmine/block/Redstone.php index 357eb1a6f..d181b9026 100644 --- a/src/pocketmine/block/Redstone.php +++ b/src/pocketmine/block/Redstone.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Redstone extends Solid{ @@ -39,18 +38,14 @@ class Redstone extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Redstone Block"; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } \ No newline at end of file diff --git a/src/pocketmine/block/RedstoneOre.php b/src/pocketmine/block/RedstoneOre.php index a56c231a1..3a6a3f64c 100644 --- a/src/pocketmine/block/RedstoneOre.php +++ b/src/pocketmine/block/RedstoneOre.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -61,16 +61,16 @@ class RedstoneOre extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return [ - ItemFactory::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5)) - ]; - } + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_IRON; + } - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5)) + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Sand.php b/src/pocketmine/block/Sand.php index 196b303ae..a3b94bc8b 100644 --- a/src/pocketmine/block/Sand.php +++ b/src/pocketmine/block/Sand.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class Sand extends Fallable{ protected $id = self::SAND; @@ -38,7 +36,7 @@ class Sand extends Fallable{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } public function getName() : string{ diff --git a/src/pocketmine/block/Sandstone.php b/src/pocketmine/block/Sandstone.php index 8b1b29c47..735d542a5 100644 --- a/src/pocketmine/block/Sandstone.php +++ b/src/pocketmine/block/Sandstone.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Sandstone extends Solid{ @@ -52,19 +51,14 @@ class Sandstone extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getVariantBitmask() : int{ return 0x03; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - } \ No newline at end of file diff --git a/src/pocketmine/block/SandstoneStairs.php b/src/pocketmine/block/SandstoneStairs.php index 8204253f0..a33e9cabe 100644 --- a/src/pocketmine/block/SandstoneStairs.php +++ b/src/pocketmine/block/SandstoneStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class SandstoneStairs extends Stair{ @@ -38,7 +38,11 @@ class SandstoneStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ diff --git a/src/pocketmine/block/SeaLantern.php b/src/pocketmine/block/SeaLantern.php index 093d1dcad..d0f7b5c91 100644 --- a/src/pocketmine/block/SeaLantern.php +++ b/src/pocketmine/block/SeaLantern.php @@ -46,7 +46,7 @@ class SeaLantern extends Transparent{ return 15; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ return [ ItemFactory::get(Item::PRISMARINE_CRYSTALS, 0, 3) ]; diff --git a/src/pocketmine/block/SignPost.php b/src/pocketmine/block/SignPost.php index 63225b879..8a3700bd4 100644 --- a/src/pocketmine/block/SignPost.php +++ b/src/pocketmine/block/SignPost.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -91,7 +90,7 @@ class SignPost extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getVariantBitmask() : int{ diff --git a/src/pocketmine/block/Skull.php b/src/pocketmine/block/Skull.php index 34c13a46d..70d9a5256 100644 --- a/src/pocketmine/block/Skull.php +++ b/src/pocketmine/block/Skull.php @@ -71,7 +71,7 @@ class Skull extends Flowable{ return true; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ $tile = $this->level->getTile($this); if($tile instanceof TileSkull){ return [ diff --git a/src/pocketmine/block/Snow.php b/src/pocketmine/block/Snow.php index d9c0ceabf..fc08dfdde 100644 --- a/src/pocketmine/block/Snow.php +++ b/src/pocketmine/block/Snow.php @@ -23,7 +23,9 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\Item; +use pocketmine\item\ItemFactory; +use pocketmine\item\TieredTool; class Snow extends Solid{ @@ -38,11 +40,21 @@ class Snow extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ return "Snow Block"; } + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::SNOWBALL, 0, 4) + ]; + } + } \ No newline at end of file diff --git a/src/pocketmine/block/SnowLayer.php b/src/pocketmine/block/SnowLayer.php index b618b8875..00c620cd8 100644 --- a/src/pocketmine/block/SnowLayer.php +++ b/src/pocketmine/block/SnowLayer.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -51,7 +51,11 @@ class SnowLayer extends Flowable{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function ticksRandomly() : bool{ @@ -87,13 +91,9 @@ class SnowLayer extends Flowable{ return false; } - public function getDrops(Item $item) : array{ - if($item->isShovel() !== false){ - return [ - ItemFactory::get(Item::SNOWBALL, 0, 1) //TODO: check layer count - ]; - } - - return []; + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::SNOWBALL, 0, 1) //TODO: check layer count + ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/SoulSand.php b/src/pocketmine/block/SoulSand.php index c3e9bd6fb..e7bc0e88d 100644 --- a/src/pocketmine/block/SoulSand.php +++ b/src/pocketmine/block/SoulSand.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; use pocketmine\math\AxisAlignedBB; class SoulSand extends Solid{ @@ -43,7 +42,7 @@ class SoulSand extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHOVEL; + return BlockToolType::TYPE_SHOVEL; } protected function recalculateBoundingBox() : ?AxisAlignedBB{ diff --git a/src/pocketmine/block/StainedClay.php b/src/pocketmine/block/StainedClay.php index c44e1ccc2..9620005cf 100644 --- a/src/pocketmine/block/StainedClay.php +++ b/src/pocketmine/block/StainedClay.php @@ -24,26 +24,12 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\block\utils\ColorBlockMetaHelper; -use pocketmine\item\Tool; -class StainedClay extends Solid{ +class StainedClay extends HardenedClay{ protected $id = self::STAINED_CLAY; - public function __construct(int $meta = 0){ - $this->meta = $meta; - } - - public function getHardness() : float{ - return 1.25; - } - - public function getToolType() : int{ - return Tool::TYPE_PICKAXE; - } - public function getName() : string{ return ColorBlockMetaHelper::getColorFromMeta($this->meta) . " Stained Clay"; } - } \ No newline at end of file diff --git a/src/pocketmine/block/Stair.php b/src/pocketmine/block/Stair.php index a4427d1bb..e45e25482 100644 --- a/src/pocketmine/block/Stair.php +++ b/src/pocketmine/block/Stair.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\Player; @@ -102,12 +101,4 @@ abstract class Stair extends Transparent{ public function getVariantBitmask() : int{ return 0; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } } diff --git a/src/pocketmine/block/StandingBanner.php b/src/pocketmine/block/StandingBanner.php index ee25c8be3..9efad4f51 100644 --- a/src/pocketmine/block/StandingBanner.php +++ b/src/pocketmine/block/StandingBanner.php @@ -23,11 +23,10 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\ItemFactory; -use pocketmine\math\AxisAlignedBB; use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; +use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\Player; use pocketmine\tile\Banner as TileBanner; @@ -89,14 +88,14 @@ class StandingBanner extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getVariantBitmask() : int{ return 0; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ $tile = $this->level->getTile($this); $drop = ItemFactory::get(Item::BANNER, ($tile instanceof TileBanner ? $tile->getBaseColor() : 0)); diff --git a/src/pocketmine/block/Stone.php b/src/pocketmine/block/Stone.php index cf38f27e2..ddbfdcc51 100644 --- a/src/pocketmine/block/Stone.php +++ b/src/pocketmine/block/Stone.php @@ -25,7 +25,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Stone extends Solid{ public const NORMAL = 0; @@ -47,7 +47,11 @@ class Stone extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ @@ -63,18 +67,14 @@ class Stone extends Solid{ return $names[$this->getVariant()] ?? "Unknown"; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - if($this->getDamage() === self::NORMAL){ - return [ - ItemFactory::get(Item::COBBLESTONE, $this->getDamage(), 1) - ]; - } - - return parent::getDrops($item); + public function getDropsForCompatibleTool(Item $item) : array{ + if($this->getDamage() === self::NORMAL){ + return [ + ItemFactory::get(Item::COBBLESTONE, $this->getDamage(), 1) + ]; } - return []; + return parent::getDropsForCompatibleTool($item); } } \ No newline at end of file diff --git a/src/pocketmine/block/StoneBrickStairs.php b/src/pocketmine/block/StoneBrickStairs.php index cb7397065..019bf73e3 100644 --- a/src/pocketmine/block/StoneBrickStairs.php +++ b/src/pocketmine/block/StoneBrickStairs.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class StoneBrickStairs extends Stair{ @@ -34,7 +34,11 @@ class StoneBrickStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getHardness() : float{ diff --git a/src/pocketmine/block/StoneBricks.php b/src/pocketmine/block/StoneBricks.php index f873f26ab..848399c86 100644 --- a/src/pocketmine/block/StoneBricks.php +++ b/src/pocketmine/block/StoneBricks.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class StoneBricks extends Solid{ public const NORMAL = 0; @@ -43,7 +42,11 @@ class StoneBricks extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } public function getName() : string{ @@ -55,13 +58,4 @@ class StoneBricks extends Solid{ ]; return $names[$this->getVariant()] ?? "Unknown"; } - - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; - } - } \ No newline at end of file diff --git a/src/pocketmine/block/StoneButton.php b/src/pocketmine/block/StoneButton.php index 7749f446b..a677e0f30 100644 --- a/src/pocketmine/block/StoneButton.php +++ b/src/pocketmine/block/StoneButton.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class StoneButton extends Button{ protected $id = self::STONE_BUTTON; @@ -38,6 +36,6 @@ class StoneButton extends Button{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } } diff --git a/src/pocketmine/block/StonePressurePlate.php b/src/pocketmine/block/StonePressurePlate.php index cafa7303d..dc72f72a5 100644 --- a/src/pocketmine/block/StonePressurePlate.php +++ b/src/pocketmine/block/StonePressurePlate.php @@ -23,6 +23,8 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\item\TieredTool; + class StonePressurePlate extends Transparent{ protected $id = self::STONE_PRESSURE_PLATE; @@ -46,4 +48,12 @@ class StonePressurePlate extends Transparent{ public function getVariantBitmask() : int{ return 0; } + + public function getToolType() : int{ + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; + } } diff --git a/src/pocketmine/block/StoneSlab.php b/src/pocketmine/block/StoneSlab.php index df6a87d5b..002a7ae3b 100644 --- a/src/pocketmine/block/StoneSlab.php +++ b/src/pocketmine/block/StoneSlab.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class StoneSlab extends Slab{ public const STONE = 0; @@ -61,14 +60,10 @@ class StoneSlab extends Slab{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } } \ No newline at end of file diff --git a/src/pocketmine/block/Stonecutter.php b/src/pocketmine/block/Stonecutter.php index 4b504ae6e..f4adde3a3 100644 --- a/src/pocketmine/block/Stonecutter.php +++ b/src/pocketmine/block/Stonecutter.php @@ -23,8 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\Tool; +use pocketmine\item\TieredTool; class Stonecutter extends Solid{ @@ -39,14 +38,10 @@ class Stonecutter extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_PICKAXE; + return BlockToolType::TYPE_PICKAXE; } - public function getDrops(Item $item) : array{ - if($item->isPickaxe() >= Tool::TIER_WOODEN){ - return parent::getDrops($item); - } - - return []; + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; } } \ No newline at end of file diff --git a/src/pocketmine/block/TallGrass.php b/src/pocketmine/block/TallGrass.php index b8efda2f3..3e82a0643 100644 --- a/src/pocketmine/block/TallGrass.php +++ b/src/pocketmine/block/TallGrass.php @@ -74,7 +74,19 @@ class TallGrass extends Flowable{ return false; } + public function getToolType() : int{ + return BlockToolType::TYPE_SHEARS; + } + + public function getToolHarvestLevel() : int{ + return 1; + } + public function getDrops(Item $item) : array{ + if($this->isCompatibleWithTool($item)){ + return parent::getDrops($item); + } + if(mt_rand(0, 15) === 0){ return [ ItemFactory::get(Item::WHEAT_SEEDS, 0, 1) diff --git a/src/pocketmine/block/Trapdoor.php b/src/pocketmine/block/Trapdoor.php index 560ab038a..25c747cbd 100644 --- a/src/pocketmine/block/Trapdoor.php +++ b/src/pocketmine/block/Trapdoor.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\sound\DoorSound; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -153,7 +152,7 @@ class Trapdoor extends Transparent{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getFuelTime() : int{ diff --git a/src/pocketmine/block/Tripwire.php b/src/pocketmine/block/Tripwire.php index 1b0416bd6..fc5a6010a 100644 --- a/src/pocketmine/block/Tripwire.php +++ b/src/pocketmine/block/Tripwire.php @@ -23,6 +23,9 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\item\Item; +use pocketmine\item\ItemFactory; + class Tripwire extends Flowable{ protected $id = self::TRIPWIRE; @@ -34,4 +37,10 @@ class Tripwire extends Flowable{ public function getName() : string{ return "Tripwire"; } + + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get(Item::STRING) + ]; + } } diff --git a/src/pocketmine/block/Vine.php b/src/pocketmine/block/Vine.php index 59ecd06ce..3281206e1 100644 --- a/src/pocketmine/block/Vine.php +++ b/src/pocketmine/block/Vine.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -201,14 +200,14 @@ class Vine extends Flowable{ } public function getDrops(Item $item) : array{ - if($item->isShears()){ - return parent::getDrops($item); + if($item->getBlockToolType() & BlockToolType::TYPE_SHEARS){ + return $this->getDropsForCompatibleTool($item); } return []; } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } } \ No newline at end of file diff --git a/src/pocketmine/block/WeightedPressurePlateLight.php b/src/pocketmine/block/WeightedPressurePlateLight.php index cb43fcc9c..c36d107f6 100644 --- a/src/pocketmine/block/WeightedPressurePlateLight.php +++ b/src/pocketmine/block/WeightedPressurePlateLight.php @@ -23,6 +23,8 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\item\TieredTool; + class WeightedPressurePlateLight extends Transparent{ protected $id = self::LIGHT_WEIGHTED_PRESSURE_PLATE; @@ -46,4 +48,12 @@ class WeightedPressurePlateLight extends Transparent{ public function getVariantBitmask() : int{ return 0; } + + public function getToolType() : int{ + return BlockToolType::TYPE_PICKAXE; + } + + public function getToolHarvestLevel() : int{ + return TieredTool::TIER_WOODEN; + } } diff --git a/src/pocketmine/block/Wheat.php b/src/pocketmine/block/Wheat.php index 1a854c29a..7aef25cf1 100644 --- a/src/pocketmine/block/Wheat.php +++ b/src/pocketmine/block/Wheat.php @@ -38,7 +38,7 @@ class Wheat extends Crops{ return "Wheat Block"; } - public function getDrops(Item $item) : array{ + public function getDropsForCompatibleTool(Item $item) : array{ if($this->meta >= 0x07){ return [ ItemFactory::get(Item::WHEAT, 0, 1), diff --git a/src/pocketmine/block/Wood.php b/src/pocketmine/block/Wood.php index 750e0999f..ee285badc 100644 --- a/src/pocketmine/block/Wood.php +++ b/src/pocketmine/block/Wood.php @@ -25,7 +25,6 @@ namespace pocketmine\block; use pocketmine\block\utils\PillarRotationHelper; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -65,7 +64,7 @@ class Wood extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getFuelTime() : int{ diff --git a/src/pocketmine/block/WoodenButton.php b/src/pocketmine/block/WoodenButton.php index 79f56d950..a62225cc2 100644 --- a/src/pocketmine/block/WoodenButton.php +++ b/src/pocketmine/block/WoodenButton.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class WoodenButton extends Button{ protected $id = self::WOODEN_BUTTON; @@ -38,6 +36,6 @@ class WoodenButton extends Button{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } } diff --git a/src/pocketmine/block/WoodenDoor.php b/src/pocketmine/block/WoodenDoor.php index 401e443db..3e55b6e5d 100644 --- a/src/pocketmine/block/WoodenDoor.php +++ b/src/pocketmine/block/WoodenDoor.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class WoodenDoor extends Door{ public function getHardness() : float{ @@ -32,6 +30,6 @@ class WoodenDoor extends Door{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } } \ No newline at end of file diff --git a/src/pocketmine/block/WoodenFence.php b/src/pocketmine/block/WoodenFence.php index 7429f441d..09e0efd38 100644 --- a/src/pocketmine/block/WoodenFence.php +++ b/src/pocketmine/block/WoodenFence.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class WoodenFence extends Fence{ public const FENCE_OAK = 0; public const FENCE_SPRUCE = 1; @@ -40,7 +38,7 @@ class WoodenFence extends Fence{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getName() : string{ diff --git a/src/pocketmine/block/WoodenPressurePlate.php b/src/pocketmine/block/WoodenPressurePlate.php index 0994b52ea..8602ff3f2 100644 --- a/src/pocketmine/block/WoodenPressurePlate.php +++ b/src/pocketmine/block/WoodenPressurePlate.php @@ -34,4 +34,12 @@ class WoodenPressurePlate extends StonePressurePlate{ public function getFuelTime() : int{ return 300; } + + public function getToolType() : int{ + return BlockToolType::TYPE_AXE; + } + + public function getToolHarvestLevel() : int{ + return 0; //TODO: fix hierarchy problem + } } diff --git a/src/pocketmine/block/WoodenSlab.php b/src/pocketmine/block/WoodenSlab.php index b5f680c66..b9e2d3adc 100644 --- a/src/pocketmine/block/WoodenSlab.php +++ b/src/pocketmine/block/WoodenSlab.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Tool; - class WoodenSlab extends Slab{ protected $id = self::WOODEN_SLAB; @@ -50,7 +48,7 @@ class WoodenSlab extends Slab{ } public function getToolType() : int{ - return Tool::TYPE_AXE; + return BlockToolType::TYPE_AXE; } public function getFuelTime() : int{ diff --git a/src/pocketmine/block/WoodenStairs.php b/src/pocketmine/block/WoodenStairs.php index c813924e3..0b28a7ba0 100644 --- a/src/pocketmine/block/WoodenStairs.php +++ b/src/pocketmine/block/WoodenStairs.php @@ -23,10 +23,6 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\item\Item; -use pocketmine\item\ItemFactory; -use pocketmine\item\Tool; - class WoodenStairs extends Stair{ public function getHardness() : float{ @@ -38,13 +34,6 @@ class WoodenStairs extends Stair{ } public function getToolType() : int{ - return Tool::TYPE_AXE; - } - - public function getDrops(Item $item) : array{ - //TODO: Hierarchy problem (base class is for stone stairs) - return [ - ItemFactory::get($this->getItemId(), $this->getVariant(), 1) - ]; + return BlockToolType::TYPE_AXE; } } \ No newline at end of file diff --git a/src/pocketmine/block/Wool.php b/src/pocketmine/block/Wool.php index 4a41732c7..a58d156d7 100644 --- a/src/pocketmine/block/Wool.php +++ b/src/pocketmine/block/Wool.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\block\utils\ColorBlockMetaHelper; -use pocketmine\item\Tool; +use pocketmine\item\Item; class Wool extends Solid{ @@ -39,11 +39,19 @@ class Wool extends Solid{ } public function getToolType() : int{ - return Tool::TYPE_SHEARS; + return BlockToolType::TYPE_SHEARS; } public function getName() : string{ return ColorBlockMetaHelper::getColorFromMeta($this->meta) . " Wool"; } + public function getBreakTime(Item $item) : float{ + $time = parent::getBreakTime($item); + if($item->getBlockToolType() === BlockToolType::TYPE_SHEARS){ + $time *= 3; //shears break compatible blocks 15x faster, but wool 5x + } + + return $time; + } } \ No newline at end of file diff --git a/src/pocketmine/item/WoodenAxe.php b/src/pocketmine/item/Axe.php similarity index 74% rename from src/pocketmine/item/WoodenAxe.php rename to src/pocketmine/item/Axe.php index 8cb28d2fb..f56a3c41b 100644 --- a/src/pocketmine/item/WoodenAxe.php +++ b/src/pocketmine/item/Axe.php @@ -23,21 +23,23 @@ declare(strict_types=1); namespace pocketmine\item; +use pocketmine\block\BlockToolType; -class WoodenAxe extends Tool{ - public function __construct(int $meta = 0){ - parent::__construct(self::WOODEN_AXE, $meta, "Wooden Axe"); - } +class Axe extends TieredTool{ public function isAxe(){ - return Tool::TIER_WOODEN; + return $this->tier; } - public function getFuelTime() : int{ - return 200; + public function getBlockToolType() : int{ + return BlockToolType::TYPE_AXE; + } + + public function getBlockToolHarvestLevel() : int{ + return $this->tier; } public function getAttackPoints() : int{ - return 4; + return self::getBaseDamageFromTier($this->tier) - 1; } -} +} \ No newline at end of file diff --git a/src/pocketmine/item/DiamondHoe.php b/src/pocketmine/item/DiamondHoe.php deleted file mode 100644 index f9414496c..000000000 --- a/src/pocketmine/item/DiamondHoe.php +++ /dev/null @@ -1,35 +0,0 @@ -tier; } + } \ No newline at end of file diff --git a/src/pocketmine/item/IronAxe.php b/src/pocketmine/item/IronAxe.php deleted file mode 100644 index 74ff6aadf..000000000 --- a/src/pocketmine/item/IronAxe.php +++ /dev/null @@ -1,39 +0,0 @@ -tier; } - public function getFuelTime() : int{ - return 200; + public function getBlockToolType() : int{ + return BlockToolType::TYPE_PICKAXE; + } + + public function getBlockToolHarvestLevel() : int{ + return $this->tier; } public function getAttackPoints() : int{ - return 3; + return self::getBaseDamageFromTier($this->tier) - 2; } -} +} \ No newline at end of file diff --git a/src/pocketmine/item/Shears.php b/src/pocketmine/item/Shears.php index 36d377185..f6caad3c3 100644 --- a/src/pocketmine/item/Shears.php +++ b/src/pocketmine/item/Shears.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\item; +use pocketmine\block\BlockToolType; class Shears extends Tool{ public function __construct(int $meta = 0){ @@ -36,4 +37,16 @@ class Shears extends Tool{ public function isShears(){ return true; } + + public function getBlockToolType() : int{ + return BlockToolType::TYPE_SHEARS; + } + + public function getBlockToolHarvestLevel() : int{ + return 1; + } + + protected function getBaseMiningEfficiency() : float{ + return 15; + } } \ No newline at end of file diff --git a/src/pocketmine/item/WoodenShovel.php b/src/pocketmine/item/Shovel.php similarity index 73% rename from src/pocketmine/item/WoodenShovel.php rename to src/pocketmine/item/Shovel.php index 8582ba97f..355e5e49c 100644 --- a/src/pocketmine/item/WoodenShovel.php +++ b/src/pocketmine/item/Shovel.php @@ -23,21 +23,23 @@ declare(strict_types=1); namespace pocketmine\item; +use pocketmine\block\BlockToolType; -class WoodenShovel extends Tool{ - public function __construct(int $meta = 0){ - parent::__construct(self::WOODEN_SHOVEL, $meta, "Wooden Shovel"); - } +class Shovel extends TieredTool{ public function isShovel(){ - return Tool::TIER_WOODEN; + return $this->tier; } - public function getFuelTime() : int{ - return 200; + public function getBlockToolType() : int{ + return BlockToolType::TYPE_SHOVEL; + } + + public function getBlockToolHarvestLevel() : int{ + return $this->tier; } public function getAttackPoints() : int{ - return 2; + return self::getBaseDamageFromTier($this->tier) - 3; } -} +} \ No newline at end of file diff --git a/src/pocketmine/item/StoneAxe.php b/src/pocketmine/item/StoneAxe.php deleted file mode 100644 index 6e9d14137..000000000 --- a/src/pocketmine/item/StoneAxe.php +++ /dev/null @@ -1,40 +0,0 @@ -tier; } - public function getFuelTime() : int{ - return 200; + public function getBlockToolType() : int{ + return BlockToolType::TYPE_SWORD; } public function getAttackPoints() : int{ - return 5; + return self::getBaseDamageFromTier($this->tier); } -} + + public function getBlockToolHarvestLevel() : int{ + return 1; + } + + public function getMiningEfficiency(Block $block) : float{ + return parent::getMiningEfficiency($block) * 1.5; //swords break any block 1.5x faster than hand + } + + protected function getBaseMiningEfficiency() : float{ + return 10; + } +} \ No newline at end of file diff --git a/src/pocketmine/item/TieredTool.php b/src/pocketmine/item/TieredTool.php new file mode 100644 index 000000000..3f82eade4 --- /dev/null +++ b/src/pocketmine/item/TieredTool.php @@ -0,0 +1,108 @@ +tier = $tier; + } + + public function getMaxDurability(){ + return self::getDurabilityFromTier($this->tier); + } + + public function getTier() : int{ + return $this->tier; + } + + public static function getDurabilityFromTier(int $tier) : int{ + static $levels = [ + self::TIER_GOLD => 33, + self::TIER_WOODEN => 60, + self::TIER_STONE => 132, + self::TIER_IRON => 251, + self::TIER_DIAMOND => 1562 + ]; + + if(!isset($levels[$tier])){ + throw new \InvalidArgumentException("Unknown tier '$tier'"); + } + + return $levels[$tier]; + } + + protected static function getBaseDamageFromTier(int $tier) : int{ + static $levels = [ + self::TIER_WOODEN => 5, + self::TIER_GOLD => 5, + self::TIER_STONE => 6, + self::TIER_IRON => 7, + self::TIER_DIAMOND => 8 + ]; + + if(!isset($levels[$tier])){ + throw new \InvalidArgumentException("Unknown tier '$tier'"); + } + + return $levels[$tier]; + } + + public static function getBaseMiningEfficiencyFromTier(int $tier) : float{ + static $levels = [ + self::TIER_WOODEN => 2, + self::TIER_STONE => 4, + self::TIER_IRON => 6, + self::TIER_DIAMOND => 8, + self::TIER_GOLD => 12 + ]; + + if(!isset($levels[$tier])){ + throw new \InvalidArgumentException("Unknown tier '$tier'"); + } + + return $levels[$tier]; + } + + protected function getBaseMiningEfficiency() : float{ + return self::getBaseMiningEfficiencyFromTier($this->tier); + } + + public function getFuelTime() : int{ + if($this->tier === self::TIER_WOODEN){ + return 200; + } + + return 0; + } +} \ No newline at end of file diff --git a/src/pocketmine/item/Tool.php b/src/pocketmine/item/Tool.php index 42b83b88d..b825b3cd7 100644 --- a/src/pocketmine/item/Tool.php +++ b/src/pocketmine/item/Tool.php @@ -27,18 +27,6 @@ use pocketmine\block\Block; use pocketmine\entity\Entity; abstract class Tool extends Durable{ - public const TIER_WOODEN = 1; - public const TIER_GOLD = 2; - public const TIER_STONE = 3; - public const TIER_IRON = 4; - public const TIER_DIAMOND = 5; - - public const TYPE_NONE = 0; - public const TYPE_SWORD = 1; - public const TYPE_SHOVEL = 2; - public const TYPE_PICKAXE = 3; - public const TYPE_AXE = 4; - public const TYPE_SHEARS = 5; public function getMaxStackSize() : int{ return 1; @@ -57,13 +45,7 @@ abstract class Tool extends Durable{ } if($object instanceof Block){ - if( - $object->getToolType() === Tool::TYPE_PICKAXE and $this->isPickaxe() or - $object->getToolType() === Tool::TYPE_SHOVEL and $this->isShovel() or - $object->getToolType() === Tool::TYPE_AXE and $this->isAxe() or - $object->getToolType() === Tool::TYPE_SWORD and $this->isSword() or - $object->getToolType() === Tool::TYPE_SHEARS and $this->isShears() - ){ + if(($object->getToolType() & $this->getBlockToolType()) !== 0){ $this->applyDamage(1); }elseif(!$this->isShears() and $object->getBreakTime($this) > 0){ $this->applyDamage(2); @@ -81,37 +63,21 @@ abstract class Tool extends Durable{ return true; } - /** - * TODO: Move this to each item - * - * @return int|bool - */ - public function getMaxDurability(){ - - $levels = [ - Tool::TIER_GOLD => 33, - Tool::TIER_WOODEN => 60, - Tool::TIER_STONE => 132, - Tool::TIER_IRON => 251, - Tool::TIER_DIAMOND => 1562 - ]; - - if(($type = $this->isPickaxe()) === false){ - if(($type = $this->isAxe()) === false){ - if(($type = $this->isSword()) === false){ - if(($type = $this->isShovel()) === false){ - if(($type = $this->isHoe()) === false){ - return false; - } - } - } - } - } - - return $levels[$type]; - } - public function isTool(){ return true; } + + public function getMiningEfficiency(Block $block) : float{ + $efficiency = 1; + if(($block->getToolType() & $this->getBlockToolType()) !== 0){ + $efficiency = $this->getBaseMiningEfficiency(); + //TODO: check Efficiency enchantment + } + + return $efficiency; + } + + protected function getBaseMiningEfficiency() : float{ + return 1; + } } \ No newline at end of file diff --git a/src/pocketmine/item/WoodenHoe.php b/src/pocketmine/item/WoodenHoe.php deleted file mode 100644 index ab2faa729..000000000 --- a/src/pocketmine/item/WoodenHoe.php +++ /dev/null @@ -1,39 +0,0 @@ -