From 11fae493a529805998299f2707748b78f56011bd Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 17 Mar 2017 17:12:36 +0000 Subject: [PATCH] Added Nether Wart --- src/pocketmine/block/Block.php | 2 +- src/pocketmine/block/NetherWartPlant.php | 83 ++++++++++++++++++++++++ src/pocketmine/item/NetherWart.php | 3 + src/pocketmine/level/Level.php | 2 + 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 src/pocketmine/block/NetherWartPlant.php diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index 84f69a939..2dde70258 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -187,7 +187,7 @@ class Block extends Position implements BlockIds, Metadatable{ self::registerBlock(new NetherBrick()); self::registerBlock(new NetherBrickFence()); self::registerBlock(new NetherBrickStairs()); - + self::registerBlock(new NetherWartPlant()); self::registerBlock(new EnchantingTable()); self::registerBlock(new BrewingStand()); diff --git a/src/pocketmine/block/NetherWartPlant.php b/src/pocketmine/block/NetherWartPlant.php new file mode 100644 index 000000000..79ee0113a --- /dev/null +++ b/src/pocketmine/block/NetherWartPlant.php @@ -0,0 +1,83 @@ +meta = $meta; + } + + public function canBeReplaced(){ + return false; + } + + public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){ + $down = $this->getSide(Vector3::SIDE_DOWN); + if($down->getId() === Block::SOUL_SAND){ + $this->getLevel()->setBlock($block, $this, false, true); + + return true; + } + + return false; + } + + public function onUpdate($type){ + switch($type){ + case Level::BLOCK_UPDATE_RANDOM: + if($this->meta < 3 and mt_rand(0, 10) === 0){ //Still growing + $block = clone $this; + $block->meta++; + $this->getLevel()->getServer()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block)); + + if(!$ev->isCancelled()){ + $this->getLevel()->setBlock($this, $ev->getNewState(), false, true); + + return $type; + } + } + break; + case Level::BLOCK_UPDATE_NORMAL: + if($this->getSide(Vector3::SIDE_DOWN)->getId() !== Block::SOUL_SAND){ + $this->getLevel()->useBreakOn($this); + return $type; + } + break; + } + + return false; + } + + public function getDrops(Item $item){ + return [[Item::NETHER_WART, 0, ($this->meta === 3 ? mt_rand(2, 4) : 1)]]; + } +} \ No newline at end of file diff --git a/src/pocketmine/item/NetherWart.php b/src/pocketmine/item/NetherWart.php index c54470fae..5117e3358 100644 --- a/src/pocketmine/item/NetherWart.php +++ b/src/pocketmine/item/NetherWart.php @@ -23,8 +23,11 @@ declare(strict_types=1); namespace pocketmine\item; +use pocketmine\block\Block; + class NetherWart extends Item{ public function __construct($meta = 0, $count = 1){ + $this->block = Block::get(Block::NETHER_WART_PLANT); parent::__construct(self::NETHER_WART, $meta, $count, "Nether Wart"); } } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 91784c3ae..0c0023498 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -40,6 +40,7 @@ use pocketmine\block\Leaves; use pocketmine\block\Leaves2; use pocketmine\block\MelonStem; use pocketmine\block\Mycelium; +use pocketmine\block\NetherWartPlant; use pocketmine\block\Potato; use pocketmine\block\PumpkinStem; use pocketmine\block\RedMushroom; @@ -248,6 +249,7 @@ class Level implements ChunkManager, Metadatable{ Block::LEAVES2 => Leaves2::class, Block::FIRE => Fire::class, Block::BEETROOT_BLOCK => Beetroot::class, + Block::NETHER_WART_PLANT => NetherWartPlant::class ]; /** @var LevelTimings */