diff --git a/src/pocketmine/block/Grass.php b/src/pocketmine/block/Grass.php index bb6f63eb7..366cdf7e9 100644 --- a/src/pocketmine/block/Grass.php +++ b/src/pocketmine/block/Grass.php @@ -63,16 +63,20 @@ class Grass extends Solid{ public function onUpdate($type){ if($type === Level::BLOCK_UPDATE_RANDOM){ - //TODO: light levels - $x = mt_rand($this->x - 1, $this->x + 1); - $y = mt_rand($this->y - 2, $this->y + 2); - $z = mt_rand($this->z - 1, $this->z + 1); - $block = $this->getLevel()->getBlock(new Vector3($x, $y, $z)); - if($block->getId() === Block::DIRT){ - if($block->getSide(1) instanceof Transparent){ - Server::getInstance()->getPluginManager()->callEvent($ev = new BlockSpreadEvent($block, $this, new Grass())); - if(!$ev->isCancelled()){ - $this->getLevel()->setBlock($block, $ev->getNewState()); + $block = $this->getLevel()->getBlock(new Vector3($this->x, $this->y, $this->z)); + if($block->getSide(1)->getLightLevel() < 4){ + Server::getInstance()->getPluginManager()->callEvent($ev = new BlockSpreadEvent($block, $this, new Dirt())); + }elseif($block->getSide(1)->getLightLevel() >= 9){ + for($l = 0; $l < 4; ++$l){ + $x = mt_rand($this->x - 1, $this->x + 1); + $y = mt_rand($this->y - 2, $this->y + 2); + $z = mt_rand($this->z - 1, $this->z + 1); + $block = $this->getLevel()->getBlock(new Vector3($x, $y, $z)); + if($block->getId() === Block::DIRT && $block->getDamage() === 0x0F && $block->getSide(1)->getLightLevel() >= 4 && $block->z <= 2){ + Server::getInstance()->getPluginManager()->callEvent($ev = new BlockSpreadEvent($block, $this, new Grass())); + if(!$ev->isCancelled()){ + $this->getLevel()->setBlock($block, $ev->getNewState()); + } } } } @@ -99,4 +103,4 @@ class Grass extends Solid{ return false; } -} \ No newline at end of file +}