diff --git a/src/pocketmine/block/MelonStem.php b/src/pocketmine/block/MelonStem.php index 553230a3e..49646981d 100644 --- a/src/pocketmine/block/MelonStem.php +++ b/src/pocketmine/block/MelonStem.php @@ -23,55 +23,19 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\event\block\BlockGrowEvent; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; -use pocketmine\math\Facing; -use pocketmine\Server; -class MelonStem extends Crops{ +class MelonStem extends Stem{ protected $id = self::MELON_STEM; + protected $itemId = Item::MELON_SEEDS; + public function getName() : string{ return "Melon Stem"; } - public function onRandomTick() : void{ - if(mt_rand(0, 2) === 1){ - if($this->age < 7){ - $block = clone $this; - ++$block->age; - Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block)); - if(!$ev->isCancelled()){ - $this->getLevel()->setBlock($this, $ev->getNewState()); - } - }else{ - foreach(Facing::HORIZONTAL as $side){ - $b = $this->getSide($side); - if($b->getId() === self::MELON_BLOCK){ - return; - } - } - $side = $this->getSide(Facing::HORIZONTAL[array_rand(Facing::HORIZONTAL)]); - $d = $side->getSide(Facing::DOWN); - if($side->getId() === self::AIR and ($d->getId() === self::FARMLAND or $d->getId() === self::GRASS or $d->getId() === self::DIRT)){ - Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($side, BlockFactory::get(Block::MELON_BLOCK))); - if(!$ev->isCancelled()){ - $this->getLevel()->setBlock($side, $ev->getNewState()); - } - } - } - } - } - - public function getDropsForCompatibleTool(Item $item) : array{ - return [ - ItemFactory::get(Item::MELON_SEEDS, 0, mt_rand(0, 2)) - ]; - } - - public function getPickedItem() : Item{ - return ItemFactory::get(Item::MELON_SEEDS); + protected function getPlant() : Block{ + return BlockFactory::get(Block::MELON_BLOCK); } } diff --git a/src/pocketmine/block/PumpkinStem.php b/src/pocketmine/block/PumpkinStem.php index 13f8f93ec..fa13fcc41 100644 --- a/src/pocketmine/block/PumpkinStem.php +++ b/src/pocketmine/block/PumpkinStem.php @@ -23,55 +23,19 @@ declare(strict_types=1); namespace pocketmine\block; -use pocketmine\event\block\BlockGrowEvent; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; -use pocketmine\math\Facing; -use pocketmine\Server; -class PumpkinStem extends Crops{ +class PumpkinStem extends Stem{ protected $id = self::PUMPKIN_STEM; + protected $itemId = Item::PUMPKIN_SEEDS; + public function getName() : string{ return "Pumpkin Stem"; } - public function onRandomTick() : void{ - if(mt_rand(0, 2) === 1){ - if($this->age < 7){ - $block = clone $this; - ++$block->age; - Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block)); - if(!$ev->isCancelled()){ - $this->getLevel()->setBlock($this, $ev->getNewState()); - } - }else{ - foreach(Facing::HORIZONTAL as $side){ - $b = $this->getSide($side); - if($b->getId() === self::PUMPKIN){ - return; - } - } - $side = $this->getSide(Facing::HORIZONTAL[array_rand(Facing::HORIZONTAL)]); - $d = $side->getSide(Facing::DOWN); - if($side->getId() === self::AIR and ($d->getId() === self::FARMLAND or $d->getId() === self::GRASS or $d->getId() === self::DIRT)){ - Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($side, BlockFactory::get(Block::PUMPKIN))); - if(!$ev->isCancelled()){ - $this->getLevel()->setBlock($side, $ev->getNewState()); - } - } - } - } - } - - public function getDropsForCompatibleTool(Item $item) : array{ - return [ - ItemFactory::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)) - ]; - } - - public function getPickedItem() : Item{ - return ItemFactory::get(Item::PUMPKIN_SEEDS); + protected function getPlant() : Block{ + return BlockFactory::get(Block::PUMPKIN); } } diff --git a/src/pocketmine/block/Stem.php b/src/pocketmine/block/Stem.php new file mode 100644 index 000000000..9d105380f --- /dev/null +++ b/src/pocketmine/block/Stem.php @@ -0,0 +1,71 @@ +age < 7){ + $block = clone $this; + ++$block->age; + Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block)); + if(!$ev->isCancelled()){ + $this->getLevel()->setBlock($this, $ev->getNewState()); + } + }else{ + $grow = $this->getPlant(); + foreach(Facing::HORIZONTAL as $side){ + $b = $this->getSide($side); + if($b->getId() === $grow->getId()){ + return; + } + } + + $side = $this->getSide(Facing::HORIZONTAL[array_rand(Facing::HORIZONTAL)]); + $d = $side->getSide(Facing::DOWN); + if($side->getId() === self::AIR and ($d->getId() === self::FARMLAND or $d->getId() === self::GRASS or $d->getId() === self::DIRT)){ + Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($side, $grow)); + if(!$ev->isCancelled()){ + $this->getLevel()->setBlock($side, $ev->getNewState()); + } + } + } + } + } + + public function getDropsForCompatibleTool(Item $item) : array{ + return [ + ItemFactory::get($this->getItemId(), 0, mt_rand(0, 2)) + ]; + } +}