Merge pull request #1795 from pmmp/tools-refactor

Tools refactor
This commit is contained in:
Dylan K. Taylor 2017-12-13 18:04:12 +00:00 committed by GitHub
commit 853411fa4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
158 changed files with 905 additions and 1549 deletions

View File

@ -26,7 +26,7 @@ namespace pocketmine\block;
use pocketmine\inventory\AnvilInventory; use pocketmine\inventory\AnvilInventory;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -65,7 +65,11 @@ class Anvil extends Fallable{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function recalculateBoundingBox() : ?AxisAlignedBB{ public function recalculateBoundingBox() : ?AxisAlignedBB{
@ -106,13 +110,9 @@ class Anvil extends Fallable{
return $this->getLevel()->setBlock($blockReplace, $this, true, true); return $this->getLevel()->setBlock($blockReplace, $this, true, true);
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [
return [ ItemFactory::get($this->getItemId(), $this->getDamage() & 0x0c, 1)
ItemFactory::get($this->getItemId(), $this->getDamage() & 0x0c, 1) ];
];
}
return [];
} }
} }

View File

@ -199,7 +199,7 @@ class Bed extends Transparent{
return true; return true;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($this->isHeadPart()){ if($this->isHeadPart()){
$tile = $this->getLevel()->getTile($this); $tile = $this->getLevel()->getTile($this);
if($tile instanceof TileBed){ if($tile instanceof TileBed){

View File

@ -38,7 +38,7 @@ class Beetroot extends Crops{
return "Beetroot Block"; return "Beetroot Block";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($this->meta >= 0x07){ if($this->meta >= 0x07){
return [ return [
ItemFactory::get(Item::BEETROOT, 0, 1), ItemFactory::get(Item::BEETROOT, 0, 1),

View File

@ -29,7 +29,6 @@ namespace pocketmine\block;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\level\MovingObjectPosition; use pocketmine\level\MovingObjectPosition;
use pocketmine\level\Position; use pocketmine\level\Position;
@ -195,8 +194,49 @@ class Block extends Position implements BlockIds, Metadatable{
return true; 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 * @return float
*/ */
public function getBreakTime(Item $item) : float{ public function getBreakTime(Item $item) : float{
$base = $this->getHardness() * 1.5; $base = $this->getHardness();
if($this->canBeBrokenWith($item)){ if($this->isCompatibleWithTool($item)){
if($this->getToolType() === Tool::TYPE_SHEARS and $item->isShears()){ $base *= 1.5;
$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;
}
}
}else{ }else{
$base *= 3.33; $base *= 5;
} }
if($item->isSword()){ $efficiency = $item->getMiningEfficiency($this);
$base /= 1.5; if($efficiency <= 0){
throw new \RuntimeException("Item efficiency is invalid");
} }
$base /= $efficiency;
return $base; return $base;
} }
@ -315,13 +334,6 @@ class Block extends Position implements BlockIds, Metadatable{
return $this->getHardness() * 5; return $this->getHardness() * 5;
} }
/**
* @return int
*/
public function getToolType() : int{
return Tool::TYPE_NONE;
}
/** /**
* @return float * @return float
*/ */
@ -420,6 +432,21 @@ class Block extends Position implements BlockIds, Metadatable{
* @return Item[] * @return Item[]
*/ */
public function getDrops(Item $item) : array{ 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 [ return [
ItemFactory::get($this->getItemId(), $this->getVariant(), 1) ItemFactory::get($this->getItemId(), $this->getVariant(), 1)
]; ];

View File

@ -21,19 +21,19 @@
declare(strict_types=1); 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 const TYPE_NONE = 0;
public function __construct(int $meta = 0){ public const TYPE_SWORD = 1 << 0;
parent::__construct(self::DIAMOND_AXE, $meta, "Diamond Axe"); 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;
}
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\block\utils\PillarRotationHelper; use pocketmine\block\utils\PillarRotationHelper;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -46,7 +46,11 @@ class BoneBlock extends Solid{
} }
public function getToolType() : int{ 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{ 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{ public function getVariantBitmask() : int{
return 0x03; return 0x03;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
class Bookshelf extends Solid{ class Bookshelf extends Solid{
@ -44,10 +43,10 @@ class Bookshelf extends Solid{
} }
public function getToolType() : int{ 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 [ return [
ItemFactory::get(Item::BOOK, 0, 3) ItemFactory::get(Item::BOOK, 0, 3)
]; ];

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class BrewingStand extends Transparent{ class BrewingStand extends Transparent{
@ -42,7 +42,11 @@ class BrewingStand extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class BrickStairs extends Stair{ class BrickStairs extends Stair{
@ -42,7 +42,11 @@ class BrickStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Bricks extends Solid{ class Bricks extends Solid{
@ -43,18 +42,14 @@ class Bricks extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Bricks"; return "Bricks";
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -33,7 +33,7 @@ class BrownMushroomBlock extends RedMushroomBlock{
return "Brown Mushroom Block"; return "Brown Mushroom Block";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
Item::get(Item::BROWN_MUSHROOM, 0, mt_rand(0, 2)) Item::get(Item::BROWN_MUSHROOM, 0, mt_rand(0, 2))
]; ];

View File

@ -24,7 +24,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\nbt\tag\StringTag; use pocketmine\nbt\tag\StringTag;
use pocketmine\Player; use pocketmine\Player;
@ -48,7 +48,11 @@ class BurningFurnace extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getLightLevel() : int{ public function getLightLevel() : int{
@ -90,12 +94,4 @@ class BurningFurnace extends Solid{
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{
return 0; return 0;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -85,7 +85,7 @@ class Cake extends Transparent implements FoodSource{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }

View File

@ -38,7 +38,7 @@ class Carrot extends Crops{
return "Carrot Block"; return "Carrot Block";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::CARROT, 0, $this->meta >= 0x07 ? mt_rand(1, 4) : 1) ItemFactory::get(Item::CARROT, 0, $this->meta >= 0x07 ? mt_rand(1, 4) : 1)
]; ];

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\nbt\tag\StringTag; use pocketmine\nbt\tag\StringTag;
@ -49,7 +48,7 @@ class Chest extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
protected function recalculateBoundingBox() : ?AxisAlignedBB{ protected function recalculateBoundingBox() : ?AxisAlignedBB{

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
class Clay extends Solid{ class Clay extends Solid{
@ -40,14 +39,14 @@ class Clay extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function getName() : string{ public function getName() : string{
return "Clay Block"; return "Clay Block";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::CLAY_BALL, 0, 4) ItemFactory::get(Item::CLAY_BALL, 0, 4)
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Coal extends Solid{ class Coal extends Solid{
@ -39,21 +38,17 @@ class Coal extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Coal Block"; return "Coal Block";
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
public function getFuelTime() : int{ public function getFuelTime() : int{
return 16000; return 16000;
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class CoalOre extends Solid{ class CoalOre extends Solid{
@ -40,21 +40,21 @@ class CoalOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Coal Ore"; return "Coal Ore";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [
return [ ItemFactory::get(Item::COAL, 0, 1)
ItemFactory::get(Item::COAL, 0, 1) ];
];
}
return [];
} }
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Cobblestone extends Solid{ class Cobblestone extends Solid{
@ -35,7 +34,11 @@ class Cobblestone extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
@ -45,12 +48,4 @@ class Cobblestone extends Solid{
public function getHardness() : float{ public function getHardness() : float{
return 2; return 2;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class CobblestoneStairs extends Stair{ class CobblestoneStairs extends Stair{
@ -38,7 +38,11 @@ class CobblestoneStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -38,7 +38,11 @@ class CobblestoneWall extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\ItemFactory;
class Cobweb extends Flowable{ class Cobweb extends Flowable{
@ -48,16 +48,21 @@ class Cobweb extends Flowable{
} }
public function getToolType() : int{ 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{ public function onEntityCollide(Entity $entity) : void{
$entity->resetFallDistance(); $entity->resetFallDistance();
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
//TODO: correct drops return [
return []; ItemFactory::get(Item::STRING)
];
} }
public function diffusesSkyLight() : bool{ public function diffusesSkyLight() : bool{

View File

@ -35,5 +35,13 @@ class CocoaBlock extends Transparent{
return "Cocoa Block"; return "Cocoa Block";
} }
public function getHardness() : float{
return 0.2;
}
public function getToolType() : int{
return BlockToolType::TYPE_AXE;
}
//TODO //TODO
} }

View File

@ -24,8 +24,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\block\utils\ColorBlockMetaHelper; use pocketmine\block\utils\ColorBlockMetaHelper;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Concrete extends Solid{ class Concrete extends Solid{
@ -44,15 +43,10 @@ class Concrete extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return TieredTool::TIER_WOODEN;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\block\utils\ColorBlockMetaHelper; use pocketmine\block\utils\ColorBlockMetaHelper;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
class ConcretePowder extends Fallable{ class ConcretePowder extends Fallable{
@ -44,7 +43,7 @@ class ConcretePowder extends Fallable{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function onUpdate(int $type){ public function onUpdate(int $type){

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\inventory\BigCraftingGrid; use pocketmine\inventory\BigCraftingGrid;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\Player; use pocketmine\Player;
class CraftingTable extends Solid{ class CraftingTable extends Solid{
@ -45,7 +44,7 @@ class CraftingTable extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
public function onActivate(Item $item, Player $player = null) : bool{ public function onActivate(Item $item, Player $player = null) : bool{

View File

@ -43,5 +43,9 @@ class DaylightSensor extends Transparent{
return 300; return 300;
} }
public function getToolType() : int{
return BlockToolType::TYPE_AXE;
}
//TODO //TODO
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -54,16 +53,20 @@ class DeadBush extends Flowable{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHEARS; return BlockToolType::TYPE_SHEARS;
}
public function getToolHarvestLevel() : int{
return 1;
} }
public function getDrops(Item $item) : array{ public function getDrops(Item $item) : array{
if($item->isShears()){ if(!$this->isCompatibleWithTool($item)){
return parent::getDrops($item); return [
ItemFactory::get(Item::STICK, 0, mt_rand(0, 2))
];
} }
return [ return parent::getDrops($item);
ItemFactory::get(Item::STICK, 0, mt_rand(0, 2))
];
} }
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Diamond extends Solid{ class Diamond extends Solid{
@ -43,14 +42,10 @@ class Diamond extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_IRON){ return TieredTool::TIER_IRON;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class DiamondOre extends Solid{ class DiamondOre extends Solid{
@ -44,16 +44,16 @@ class DiamondOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_IRON){ return TieredTool::TIER_IRON;
return [ }
ItemFactory::get(Item::DIAMOND, 0, 1)
];
}
return []; public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::DIAMOND, 0, 1)
];
} }
} }

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\Player; use pocketmine\Player;
class Dirt extends Solid{ class Dirt extends Solid{
@ -40,7 +39,7 @@ class Dirt extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function getName() : string{ public function getName() : string{

View File

@ -109,19 +109,25 @@ class DoublePlant extends Flowable{
return 0x07; 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{ public function getDrops(Item $item) : array{
if($this->meta & self::BITFLAG_TOP){ if($this->meta & self::BITFLAG_TOP){
if(!$item->isShears() and ($this->meta === 2 or $this->meta === 3)){ //grass or fern if($this->isCompatibleWithTool($item)){
if(mt_rand(0, 24) === 0){ return parent::getDrops($item);
return [
ItemFactory::get(Item::SEEDS, 0, 1)
];
}
return [];
} }
return parent::getDrops($item); if(mt_rand(0, 24) === 0){
return [
ItemFactory::get(Item::SEEDS, 0, 1)
];
}
} }
return []; return [];

View File

@ -38,7 +38,7 @@ abstract class DoubleSlab extends Solid{
return "Double " . BlockFactory::get($this->getSlabId(), $this->getVariant())->getName() . " Slab"; return "Double " . BlockFactory::get($this->getSlabId(), $this->getVariant())->getName() . " Slab";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get($this->getSlabId(), $this->getVariant(), 2) ItemFactory::get($this->getSlabId(), $this->getVariant(), 2)
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class DoubleStoneSlab extends DoubleSlab{ class DoubleStoneSlab extends DoubleSlab{
@ -39,15 +38,10 @@ class DoubleStoneSlab extends DoubleSlab{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return TieredTool::TIER_WOODEN;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool;
class DoubleWoodenSlab extends DoubleSlab{ class DoubleWoodenSlab extends DoubleSlab{
protected $id = self::DOUBLE_WOODEN_SLAB; protected $id = self::DOUBLE_WOODEN_SLAB;
@ -38,6 +36,6 @@ class DoubleWoodenSlab extends DoubleSlab{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Emerald extends Solid{ class Emerald extends Solid{
@ -39,18 +38,14 @@ class Emerald extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_IRON;
} }
public function getName() : string{ public function getName() : string{
return "Emerald Block"; return "Emerald Block";
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_IRON){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class EmeraldOre extends Solid{ class EmeraldOre extends Solid{
@ -40,20 +40,20 @@ class EmeraldOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_IRON;
} }
public function getHardness() : float{ public function getHardness() : float{
return 3; return 3;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_IRON){ return [
return [
ItemFactory::get(Item::EMERALD, 0, 1) ItemFactory::get(Item::EMERALD, 0, 1)
]; ];
}
return [];
} }
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\inventory\EnchantInventory; use pocketmine\inventory\EnchantInventory;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\tile\EnchantTable as TileEnchantTable; use pocketmine\tile\EnchantTable as TileEnchantTable;
@ -60,7 +60,11 @@ class EnchantingTable extends Transparent{
} }
public function getToolType() : int{ 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{ public function onActivate(Item $item, Player $player = null) : bool{
@ -72,12 +76,4 @@ class EnchantingTable extends Transparent{
return true; return true;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class EndStone extends Solid{ class EndStone extends Solid{
@ -38,7 +38,11 @@ class EndStone extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class EndStoneBricks extends Solid{ class EndStoneBricks extends Solid{
@ -43,15 +42,10 @@ class EndStoneBricks extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return TieredTool::TIER_WOODEN;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\tile\EnderChest as TileEnderChest; use pocketmine\tile\EnderChest as TileEnderChest;
@ -52,7 +52,11 @@ class EnderChest extends Chest{
} }
public function getToolType() : int{ 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{ 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; return true;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [
return [ItemFactory::get(Item::OBSIDIAN, 0, 8)]; ItemFactory::get(Item::OBSIDIAN, 0, 8)
} ];
return [];
} }
public function getFuelTime() : int{ public function getFuelTime() : int{

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -47,7 +46,7 @@ class Farmland extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function ticksRandomly() : bool{ public function ticksRandomly() : bool{
@ -108,7 +107,7 @@ class Farmland extends Transparent{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::DIRT, 0, 1) ItemFactory::get(Item::DIRT, 0, 1)
]; ];

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\level\sound\DoorSound; use pocketmine\level\sound\DoorSound;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -37,7 +36,7 @@ class FenceGate extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }

View File

@ -79,7 +79,7 @@ class Fire extends Flowable{
} }
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }

View File

@ -96,8 +96,8 @@ class FlowerPot extends Flowable{
return true; return true;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
$items = parent::getDrops($item); $items = parent::getDropsForCompatibleTool($item);
$tile = $this->getLevel()->getTile($this); $tile = $this->getLevel()->getTile($this);
if($tile instanceof TileFlowerPot){ if($tile instanceof TileFlowerPot){

View File

@ -41,7 +41,7 @@ class Glass extends Transparent{
return 0.3; return 0.3;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }
} }

View File

@ -41,7 +41,7 @@ class GlassPane extends Thin{
return 0.3; return 0.3;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }
} }

View File

@ -25,7 +25,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -36,7 +36,11 @@ class GlazedTerracotta extends Solid{
} }
public function getToolType() : int{ 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{ 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{ public function getVariantBitmask() : int{
return 0; return 0;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -24,6 +24,8 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\TieredTool;
class GlowingObsidian extends Solid{ class GlowingObsidian extends Solid{
protected $id = self::GLOWING_OBSIDIAN; protected $id = self::GLOWING_OBSIDIAN;
@ -47,4 +49,12 @@ class GlowingObsidian extends Solid{
public function getBlastResistance() : float{ public function getBlastResistance() : float{
return 50; return 50;
} }
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_DIAMOND;
}
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
class Glowstone extends Transparent{ class Glowstone extends Transparent{
@ -44,14 +43,14 @@ class Glowstone extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getLightLevel() : int{ public function getLightLevel() : int{
return 15; return 15;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)) ItemFactory::get(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4))
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Gold extends Solid{ class Gold extends Solid{
@ -43,14 +42,10 @@ class Gold extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_IRON){ return TieredTool::TIER_IRON;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class GoldOre extends Solid{ class GoldOre extends Solid{
@ -43,14 +42,10 @@ class GoldOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_IRON){ return TieredTool::TIER_IRON;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\event\block\BlockSpreadEvent; use pocketmine\event\block\BlockSpreadEvent;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\generator\object\TallGrass as TallGrassObject; use pocketmine\level\generator\object\TallGrass as TallGrassObject;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -50,10 +49,10 @@ class Grass extends Solid{
} }
public function getToolType() : int{ 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 [ return [
ItemFactory::get(Item::DIRT, 0, 1) ItemFactory::get(Item::DIRT, 0, 1)
]; ];

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -43,7 +42,7 @@ class GrassPath extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
protected function recalculateBoundingBox() : ?AxisAlignedBB{ protected function recalculateBoundingBox() : ?AxisAlignedBB{
@ -70,7 +69,7 @@ class GrassPath extends Transparent{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::DIRT, 0, 1) ItemFactory::get(Item::DIRT, 0, 1)
]; ];

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
class Gravel extends Fallable{ class Gravel extends Fallable{
@ -44,17 +43,17 @@ class Gravel extends Fallable{
} }
public function getToolType() : int{ 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){ if(mt_rand(1, 10) === 1){
return [ return [
ItemFactory::get(Item::FLINT, 0, 1) ItemFactory::get(Item::FLINT, 0, 1)
]; ];
} }
return parent::getDrops($item); return parent::getDropsForCompatibleTool($item);
} }
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class HardenedClay extends Solid{ class HardenedClay extends Solid{
@ -38,7 +38,11 @@ class HardenedClay extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\Player; use pocketmine\Player;
@ -53,7 +52,7 @@ class Ice extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function onBreak(Item $item, Player $player = null) : bool{ public function onBreak(Item $item, Player $player = null) : bool{
@ -75,7 +74,7 @@ class Ice extends Transparent{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Iron extends Solid{ class Iron extends Solid{
@ -39,18 +38,14 @@ class Iron extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_STONE;
} }
public function getHardness() : float{ public function getHardness() : float{
return 5; return 5;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_STONE){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class IronBars extends Thin{ class IronBars extends Thin{
@ -43,20 +42,15 @@ class IronBars extends Thin{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{
return 0; return 0;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -24,7 +24,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class IronDoor extends Door{ class IronDoor extends Door{
@ -41,18 +41,14 @@ class IronDoor extends Door{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{
return 5; return 5;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class IronOre extends Solid{ class IronOre extends Solid{
@ -39,18 +38,14 @@ class IronOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_STONE;
} }
public function getHardness() : float{ public function getHardness() : float{
return 3; return 3;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_STONE){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class IronTrapdoor extends Trapdoor{ class IronTrapdoor extends Trapdoor{
@ -38,6 +38,10 @@ class IronTrapdoor extends Trapdoor{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
} }

View File

@ -99,8 +99,8 @@ class ItemFrame extends Flowable{
return 0; return 0;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
$drops = parent::getDrops($item); $drops = parent::getDropsForCompatibleTool($item);
$tile = $this->level->getTile($this); $tile = $this->level->getTile($this);
if($tile instanceof TileItemFrame){ if($tile instanceof TileItemFrame){

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -122,7 +121,7 @@ class Ladder extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Lapis extends Solid{ class Lapis extends Solid{
@ -39,19 +38,14 @@ class Lapis extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_STONE;
} }
public function getHardness() : float{ public function getHardness() : float{
return 3; return 3;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_STONE){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class LapisOre extends Solid{ class LapisOre extends Solid{
@ -40,21 +40,21 @@ class LapisOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_STONE;
} }
public function getName() : string{ public function getName() : string{
return "Lapis Lazuli Ore"; return "Lapis Lazuli Ore";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_STONE){ return [
return [ ItemFactory::get(Item::DYE, 4, mt_rand(4, 8))
ItemFactory::get(Item::DYE, 4, mt_rand(4, 8)) ];
];
}
return [];
} }
} }

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\event\block\LeavesDecayEvent; use pocketmine\event\block\LeavesDecayEvent;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -51,7 +50,7 @@ class Leaves extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHEARS; return BlockToolType::TYPE_SHEARS;
} }
public function getName() : string{ public function getName() : string{
@ -174,19 +173,19 @@ class Leaves extends Transparent{
} }
public function getDrops(Item $item) : array{ public function getDrops(Item $item) : array{
if($item->isShears()){ if(!$this->isCompatibleWithTool($item)){
return parent::getDrops($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 = []; return parent::getDrops($item);
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;
} }
public function getSaplingItem() : Item{ public function getSaplingItem() : Item{

View File

@ -34,4 +34,8 @@ class Lever extends Flowable{
public function getName() : string{ public function getName() : string{
return "Lever"; return "Lever";
} }
public function getHardness() : float{
return 0.5;
}
} }

View File

@ -72,7 +72,7 @@ abstract class Liquid extends Transparent{
return null; return null;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }

View File

@ -26,8 +26,7 @@ namespace pocketmine\block;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\event\entity\EntityDamageByBlockEvent;
use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Magma extends Solid{ class Magma extends Solid{
@ -46,7 +45,11 @@ class Magma extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getLightLevel() : int{ public function getLightLevel() : int{
@ -63,13 +66,4 @@ class Magma extends Solid{
$entity->attack($ev); $entity->attack($ev);
} }
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
class Melon extends Transparent{ class Melon extends Transparent{
@ -44,10 +43,10 @@ class Melon extends Transparent{
} }
public function getToolType() : int{ 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 [ return [
ItemFactory::get(Item::MELON_SLICE, 0, mt_rand(3, 7)) ItemFactory::get(Item::MELON_SLICE, 0, mt_rand(3, 7))
]; ];

View File

@ -83,7 +83,7 @@ class MelonStem extends Crops{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::MELON_SEEDS, 0, mt_rand(0, 2)) ItemFactory::get(Item::MELON_SEEDS, 0, mt_rand(0, 2))
]; ];

View File

@ -24,7 +24,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class MonsterSpawner extends Transparent{ class MonsterSpawner extends Transparent{
@ -39,14 +39,18 @@ class MonsterSpawner extends Transparent{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Monster Spawner"; return "Monster Spawner";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return []; return [];
} }
} }

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\event\block\BlockSpreadEvent; use pocketmine\event\block\BlockSpreadEvent;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Server; use pocketmine\Server;
@ -44,14 +43,14 @@ class Mycelium extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function getHardness() : float{ public function getHardness() : float{
return 0.6; return 0.6;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::DIRT, 0, 1) ItemFactory::get(Item::DIRT, 0, 1)
]; ];

View File

@ -23,24 +23,19 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class NetherBrick extends Solid{ class NetherBrick extends Solid{
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{
return 2; return 2;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class NetherBrickFence extends Fence{ class NetherBrickFence extends Fence{
@ -35,18 +34,14 @@ class NetherBrickFence extends Fence{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Nether Brick Fence"; return "Nether Brick Fence";
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class NetherBrickStairs extends Stair{ class NetherBrickStairs extends Stair{
@ -42,7 +42,11 @@ class NetherBrickStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class NetherQuartzOre extends Solid{ class NetherQuartzOre extends Solid{
@ -44,17 +44,17 @@ class NetherQuartzOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return TieredTool::TIER_WOODEN;
return [ }
ItemFactory::get(Item::QUARTZ, 0, 1)
];
}
return []; public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::QUARTZ, 0, 1)
];
} }
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class NetherReactor extends Solid{ class NetherReactor extends Solid{
protected $id = Block::NETHER_REACTOR; protected $id = Block::NETHER_REACTOR;
@ -44,22 +44,22 @@ class NetherReactor extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{
return 3; return 3;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [
return [ ItemFactory::get(Item::IRON_INGOT, 0, 6),
ItemFactory::get(Item::IRON_INGOT, 0, 6), ItemFactory::get(Item::DIAMOND, 0, 3)
ItemFactory::get(Item::DIAMOND, 0, 3) ];
];
}
return [];
} }
} }

View File

@ -85,7 +85,7 @@ class NetherWartPlant extends Flowable{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get($this->getItemId(), 0, ($this->getDamage() === 3 ? mt_rand(2, 4) : 1)) ItemFactory::get($this->getItemId(), 0, ($this->getDamage() === 3 ? mt_rand(2, 4) : 1))
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Netherrack extends Solid{ class Netherrack extends Solid{
@ -43,14 +42,10 @@ class Netherrack extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_WOODEN){ return TieredTool::TIER_WOODEN;
return parent::getDrops($item);
}
return [];
} }
} }

View File

@ -38,4 +38,12 @@ class NoteBlock extends Solid{
public function getFuelTime() : int{ public function getFuelTime() : int{
return 300; return 300;
} }
public function getHardness() : float{
return 0.8;
}
public function getToolType() : int{
return BlockToolType::TYPE_AXE;
}
} }

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Obsidian extends Solid{ class Obsidian extends Solid{
@ -39,7 +38,11 @@ class Obsidian extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_DIAMOND;
} }
public function getHardness() : float{ public function getHardness() : float{
@ -49,12 +52,4 @@ class Obsidian extends Solid{
public function getBlastResistance() : float{ public function getBlastResistance() : float{
return 6000; return 6000;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_DIAMOND){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool;
class PackedIce extends Solid{ class PackedIce extends Solid{
protected $id = self::PACKED_ICE; protected $id = self::PACKED_ICE;
@ -46,7 +44,7 @@ class PackedIce extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
} }

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool;
class Planks extends Solid{ class Planks extends Solid{
public const OAK = 0; public const OAK = 0;
public const SPRUCE = 1; public const SPRUCE = 1;
@ -44,7 +42,7 @@ class Planks extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
public function getName() : string{ public function getName() : string{

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool;
class Podzol extends Solid{ class Podzol extends Solid{
protected $id = self::PODZOL; protected $id = self::PODZOL;
@ -34,7 +32,7 @@ class Podzol extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function getName() : string{ public function getName() : string{

View File

@ -38,7 +38,7 @@ class Potato extends Crops{
return "Potato Block"; return "Potato Block";
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::POTATO, 0, $this->getDamage() >= 0x07 ? mt_rand(1, 4) : 1) ItemFactory::get(Item::POTATO, 0, $this->getDamage() >= 0x07 ? mt_rand(1, 4) : 1)
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Prismarine extends Solid{ class Prismarine extends Solid{
@ -52,18 +51,14 @@ class Prismarine extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{
return 0x03; return 0x03;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -41,7 +40,7 @@ class Pumpkin extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_AXE; return BlockToolType::TYPE_AXE;
} }
public function getName() : string{ public function getName() : string{

View File

@ -83,7 +83,7 @@ class PumpkinStem extends Crops{
return false; return false;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)) ItemFactory::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2))
]; ];

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class PurpurStairs extends Stair{ class PurpurStairs extends Stair{
@ -38,7 +38,11 @@ class PurpurStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getHardness() : float{ public function getHardness() : float{

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\block\utils\PillarRotationHelper; use pocketmine\block\utils\PillarRotationHelper;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -62,18 +62,14 @@ class Quartz extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{
return 0x03; return 0x03;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class QuartzStairs extends Stair{ class QuartzStairs extends Stair{
@ -38,7 +38,11 @@ class QuartzStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\Tool;
class RedMushroomBlock extends Solid{ class RedMushroomBlock extends Solid{
@ -43,10 +42,10 @@ class RedMushroomBlock extends Solid{
} }
public function getToolType() : int{ 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 [ return [
Item::get(Item::RED_MUSHROOM, 0, mt_rand(0, 2)) Item::get(Item::RED_MUSHROOM, 0, mt_rand(0, 2))
]; ];

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Redstone extends Solid{ class Redstone extends Solid{
@ -39,18 +38,14 @@ class Redstone extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{
return "Redstone Block"; return "Redstone Block";
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -25,7 +25,7 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\Player; use pocketmine\Player;
@ -61,16 +61,16 @@ class RedstoneOre extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
} }
public function getDrops(Item $item) : array{ public function getToolHarvestLevel() : int{
if($item->isPickaxe() >= Tool::TIER_IRON){ return TieredTool::TIER_IRON;
return [ }
ItemFactory::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5))
];
}
return []; public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5))
];
} }
} }

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool;
class Sand extends Fallable{ class Sand extends Fallable{
protected $id = self::SAND; protected $id = self::SAND;
@ -38,7 +36,7 @@ class Sand extends Fallable{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_SHOVEL; return BlockToolType::TYPE_SHOVEL;
} }
public function getName() : string{ public function getName() : string{

View File

@ -23,8 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\TieredTool;
use pocketmine\item\Tool;
class Sandstone extends Solid{ class Sandstone extends Solid{
@ -52,19 +51,14 @@ class Sandstone extends Solid{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getVariantBitmask() : int{ public function getVariantBitmask() : int{
return 0x03; return 0x03;
} }
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block; namespace pocketmine\block;
use pocketmine\item\Tool; use pocketmine\item\TieredTool;
class SandstoneStairs extends Stair{ class SandstoneStairs extends Stair{
@ -38,7 +38,11 @@ class SandstoneStairs extends Stair{
} }
public function getToolType() : int{ public function getToolType() : int{
return Tool::TYPE_PICKAXE; return BlockToolType::TYPE_PICKAXE;
}
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
} }
public function getName() : string{ public function getName() : string{

View File

@ -46,7 +46,7 @@ class SeaLantern extends Transparent{
return 15; return 15;
} }
public function getDrops(Item $item) : array{ public function getDropsForCompatibleTool(Item $item) : array{
return [ return [
ItemFactory::get(Item::PRISMARINE_CRYSTALS, 0, 3) ItemFactory::get(Item::PRISMARINE_CRYSTALS, 0, 3)
]; ];

Some files were not shown because too many files have changed in this diff Show More