Clean up garbage in Tree populators

This commit is contained in:
Dylan K. Taylor 2018-10-15 18:08:07 +01:00
parent cfee0a4e0b
commit 70054de575
5 changed files with 32 additions and 33 deletions

View File

@ -29,13 +29,11 @@ use pocketmine\level\ChunkManager;
use pocketmine\utils\Random; use pocketmine\utils\Random;
class BirchTree extends Tree{ class BirchTree extends Tree{
/** @var bool */
protected $superBirch = false; protected $superBirch = false;
public function __construct(bool $superBirch = false){ public function __construct(bool $superBirch = false){
$this->trunkBlock = Block::LOG; parent::__construct(Block::LOG, Block::LEAVES, Wood::BIRCH);
$this->leafBlock = Block::LEAVES;
$this->type = Wood::BIRCH;
$this->superBirch = $superBirch; $this->superBirch = $superBirch;
} }

View File

@ -29,9 +29,6 @@ use pocketmine\block\Wood;
class JungleTree extends Tree{ class JungleTree extends Tree{
public function __construct(){ public function __construct(){
$this->trunkBlock = Block::LOG; parent::__construct(Block::LOG, Block::LEAVES, Wood::JUNGLE, 8);
$this->leafBlock = Block::LEAVES;
$this->type = Wood::JUNGLE;
$this->treeHeight = 8;
} }
} }

View File

@ -31,9 +31,7 @@ use pocketmine\utils\Random;
class OakTree extends Tree{ class OakTree extends Tree{
public function __construct(){ public function __construct(){
$this->trunkBlock = Block::LOG; parent::__construct(Block::LOG, Block::LEAVES, Wood::OAK);
$this->leafBlock = Block::LEAVES;
$this->type = Wood::OAK;
} }
public function placeObject(ChunkManager $level, int $x, int $y, int $z, Random $random) : void{ public function placeObject(ChunkManager $level, int $x, int $y, int $z, Random $random) : void{

View File

@ -32,10 +32,7 @@ use pocketmine\utils\Random;
class SpruceTree extends Tree{ class SpruceTree extends Tree{
public function __construct(){ public function __construct(){
$this->trunkBlock = Block::LOG; parent::__construct(Block::LOG, Block::LEAVES, Wood::SPRUCE, 10);
$this->leafBlock = Block::LEAVES;
$this->type = Wood::SPRUCE;
$this->treeHeight = 10;
} }
public function placeObject(ChunkManager $level, int $x, int $y, int $z, Random $random) : void{ public function placeObject(ChunkManager $level, int $x, int $y, int $z, Random $random) : void{
@ -63,7 +60,7 @@ class SpruceTree extends Tree{
if(!BlockFactory::get($level->getBlockIdAt($xx, $yyy, $zz))->isSolid()){ if(!BlockFactory::get($level->getBlockIdAt($xx, $yyy, $zz))->isSolid()){
$level->setBlockIdAt($xx, $yyy, $zz, $this->leafBlock); $level->setBlockIdAt($xx, $yyy, $zz, $this->leafBlock);
$level->setBlockDataAt($xx, $yyy, $zz, $this->type); $level->setBlockDataAt($xx, $yyy, $zz, $this->blockMeta);
} }
} }
} }

View File

@ -25,25 +25,30 @@ namespace pocketmine\level\generator\object;
use pocketmine\block\Block; use pocketmine\block\Block;
use pocketmine\block\BlockFactory; use pocketmine\block\BlockFactory;
use pocketmine\block\Leaves;
use pocketmine\block\Sapling;
use pocketmine\block\utils\WoodType; use pocketmine\block\utils\WoodType;
use pocketmine\block\Wood;
use pocketmine\level\ChunkManager; use pocketmine\level\ChunkManager;
use pocketmine\utils\Random; use pocketmine\utils\Random;
abstract class Tree{ abstract class Tree{
public $overridable = [
Block::AIR => true,
Block::SAPLING => true,
Block::LOG => true,
Block::LEAVES => true,
Block::SNOW_LAYER => true,
Block::LOG2 => true,
Block::LEAVES2 => true
];
public $type = 0; /** @var int */
public $trunkBlock = Block::LOG; protected $blockMeta;
public $leafBlock = Block::LEAVES; /** @var int */
public $treeHeight = 7; protected $trunkBlock;
/** @var int */
protected $leafBlock;
/** @var int */
protected $treeHeight;
public function __construct(int $trunkBlock, int $leafBlock, int $blockMeta, int $treeHeight = 7){
$this->trunkBlock = $trunkBlock;
$this->leafBlock = $leafBlock;
$this->blockMeta = $blockMeta;
$this->treeHeight = $treeHeight;
}
public static function growTree(ChunkManager $level, int $x, int $y, int $z, Random $random, int $type = WoodType::OAK) : void{ public static function growTree(ChunkManager $level, int $x, int $y, int $z, Random $random, int $type = WoodType::OAK) : void{
switch($type){ switch($type){
@ -86,7 +91,7 @@ abstract class Tree{
} }
for($xx = -$radiusToCheck; $xx < ($radiusToCheck + 1); ++$xx){ for($xx = -$radiusToCheck; $xx < ($radiusToCheck + 1); ++$xx){
for($zz = -$radiusToCheck; $zz < ($radiusToCheck + 1); ++$zz){ for($zz = -$radiusToCheck; $zz < ($radiusToCheck + 1); ++$zz){
if(!isset($this->overridable[$level->getBlockIdAt($x + $xx, $y + $yy, $z + $zz)])){ if(!$this->canOverride(BlockFactory::get($level->getBlockIdAt($x + $xx, $y + $yy, $z + $zz)))){
return false; return false;
} }
} }
@ -111,7 +116,7 @@ abstract class Tree{
} }
if(!BlockFactory::get($level->getBlockIdAt($xx, $yy, $zz))->isSolid()){ if(!BlockFactory::get($level->getBlockIdAt($xx, $yy, $zz))->isSolid()){
$level->setBlockIdAt($xx, $yy, $zz, $this->leafBlock); $level->setBlockIdAt($xx, $yy, $zz, $this->leafBlock);
$level->setBlockDataAt($xx, $yy, $zz, $this->type); $level->setBlockDataAt($xx, $yy, $zz, $this->blockMeta);
} }
} }
} }
@ -124,10 +129,14 @@ abstract class Tree{
for($yy = 0; $yy < $trunkHeight; ++$yy){ for($yy = 0; $yy < $trunkHeight; ++$yy){
$blockId = $level->getBlockIdAt($x, $y + $yy, $z); $blockId = $level->getBlockIdAt($x, $y + $yy, $z);
if(isset($this->overridable[$blockId])){ if($this->canOverride(BlockFactory::get($blockId))){
$level->setBlockIdAt($x, $y + $yy, $z, $this->trunkBlock); $level->setBlockIdAt($x, $y + $yy, $z, $this->trunkBlock);
$level->setBlockDataAt($x, $y + $yy, $z, $this->type); $level->setBlockDataAt($x, $y + $yy, $z, $this->blockMeta);
} }
} }
} }
protected function canOverride(Block $block) : bool{
return $block->canBeReplaced() or $block instanceof Wood or $block instanceof Sapling or $block instanceof Leaves;
}
} }