Make Generation max height depend on the actual maxheight, fix PHPstorm namespaces

This commit is contained in:
thebigsmileXD 2017-05-11 11:49:57 +02:00
parent 8311298fbc
commit 38f9faecd8
15 changed files with 55 additions and 20 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.idea/*

View file

@ -15,6 +15,7 @@
namespace Ad5001\BetterGen\generator;
use pocketmine\level\ChunkManager;
use pocketmine\math\Vector3;
use pocketmine\utils\Random;
use pocketmine\level\generator\biome\Biome;
use pocketmine\level\generator\Generator;
@ -61,6 +62,7 @@ class BetterNormal extends Generator {
Block::STILL_WATER
];
protected $selector;
/** @var Level */
protected $level;
protected $random;
protected $populators = [ ];
@ -434,7 +436,7 @@ class BetterNormal extends Generator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -22,6 +23,7 @@ use Ad5001\BetterGen\populator\AmountPopulator;
use Ad5001\BetterGen\structure\Bush;
class BushPopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
protected $type;
@ -62,7 +64,7 @@ class BushPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL) {
break;

View file

@ -17,11 +17,13 @@ namespace Ad5001\BetterGen\populator;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use Ad5001\BetterGen\structure\Cactus;
use Ad5001\BetterGen\populator\AmountPopulator;
class CactusPopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
* Constructs the class
@ -58,7 +60,7 @@ class CactusPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y >= 0; -- $y) {
for($y = Level::Y_MAX; $y >= 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b !== Block::AIR and $b !== Block::LEAVES and $b !== Block::LEAVES2) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -22,6 +23,7 @@ use Ad5001\BetterGen\utils\BuildingUtils;
use Ad5001\BetterGen\populator\AmountPopulator;
class CavePopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
const STOP = false;
const CONTINUE = true;
@ -65,7 +67,7 @@ class CavePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL or $b === Block::SAND or $b === Block::SNOW_BLOCK or $b === Block::SANDSTONE) {
break;

View file

@ -16,10 +16,12 @@ namespace Ad5001\BetterGen\populator;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use Ad5001\BetterGen\populator\AmountPopulator;
class DeadbushPopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
@ -49,7 +51,7 @@ class DeadbushPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y >= 0; -- $y) {
for($y = Level::Y_MAX; $y >= 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b !== Block::AIR and $b !== Block::LEAVES and $b !== Block::LEAVES2) {
break;

View file

@ -16,12 +16,14 @@ namespace Ad5001\BetterGen\populator;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use Ad5001\BetterGen\structure\FallenTree;
use Ad5001\BetterGen\populator\AmountPopulator;
class FallenTreePopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
protected $type;
/*
@ -51,7 +53,7 @@ class FallenTreePopulator extends AmountPopulator {
$z = $random->nextRange($chunkZ * 16, $chunkZ * 16 + 15);
$y = $this->getHighestWorkableBlock($x, $z);
if ($y !== -1 and $fallenTree->canPlaceObject($level, $x, $y + 1, $z, $random )) {
$fallenTree->placeObject($level, $x, $y + 1, $z, $random);
$fallenTree->placeObject($level, $x, $y + 1, $z);
}
}
}
@ -62,7 +64,7 @@ class FallenTreePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y >= 0; -- $y) {
for($y = Level::Y_MAX; $y >= 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b !== Block::AIR and $b !== Block::LEAVES and $b !== Block::LEAVES2) {
break;

View file

@ -15,6 +15,8 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\ChunkManager;
use pocketmine\level\format\Chunk;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use Ad5001\BetterGen\generator\BetterNormal;
use pocketmine\block\Block;
@ -39,6 +41,9 @@ class FloatingIslandPopulator extends AmountPopulator {
* @param $chunkZ int
* @param $random pocketmine\utils\Random
*/
/** @var ChunkManager */
private $level;
public function populate(ChunkManager $level, $chunkX, $chunkZ, Random $random) {
$this->level = $level;
if($this->getAmount($random) > 130) {
@ -49,7 +54,7 @@ class FloatingIslandPopulator extends AmountPopulator {
$height = $this->buildIslandBottomShape($level, new Vector3($x, $y, $z), $radius, $random);
$this->populateOres($level, new Vector3($x, $y - 1, $z), $radius * 2, $height, $random);
$chunk = $level->getChunk($chunkX, $chunkZ);
$biome = BetterNormal::getBiomeById($chunk->getBiomeId($x % 16, $z % 16));
$biome = BetterNormal::getBiomeById($chunk->getBiomeId($x % 16, $z % 16));//static call
$populators = $biome->getPopulators();
foreach($populators as $populator) {
$populator->populate($level, $chunkX, $chunkZ, $random);
@ -65,7 +70,7 @@ class FloatingIslandPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL or $b === Block::SAND) {
break;
@ -90,7 +95,7 @@ class FloatingIslandPopulator extends AmountPopulator {
public function buildIslandBottomShape(ChunkManager $level, Vector3 $pos, int $radius, Random $random) {
$pos = $pos->round();
$xx = $pos->x;
$zz = $z;
$zz = $z; //undefined
$currentLen = 1;
$isEdge = false;
$hBound = 0;
@ -105,7 +110,7 @@ class FloatingIslandPopulator extends AmountPopulator {
}
if(abs(abs($x - $pos->x) ** 2) + abs(abs($z - $pos->z) ** 2) <= ($radius ** 2) * 0.67 && $y < 128) {
if($chunk = $level->getChunk($x >> 4, $z >> 4)) {
$biome = BetterNormal::getBiomeById($chunk->getBiomeId($x % 16, $z % 16));
$biome = BetterNormal::getBiomeById($chunk->getBiomeId($x % 16, $z % 16));//static call
$block = $biome->getGroundCover()[$pos->y - $y - 1] ?? Block::get(Block::STONE);
$block = $block->getId();
} elseif($random->nextBoundedInt(5) == 0 && $isEdge) {
@ -160,6 +165,6 @@ class FloatingIslandPopulator extends AmountPopulator {
new OreType(new GoldOre (), 2, 8, $pos->y - $height, $pos->y - round($height / 2)),
new OreType(new DiamondOre (), 1, 7, $pos->y - $height, $pos->y - round($height / 4))
]);
$ores->populate($level, $x >> 4, $z >> 4, $random);
$ores->populate($level, $x >> 4, $z >> 4, $random);//x z undefined
}
}

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -21,6 +22,7 @@ use Ad5001\BetterGen\populator\AmountPopulator;
use Ad5001\BetterGen\structure\Igloo;
class IglooPopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
@ -48,7 +50,7 @@ class IglooPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -22,6 +23,7 @@ use Ad5001\BetterGen\utils\BuildingUtils;
use Ad5001\BetterGen\populator\AmountPopulator;
class LakePopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
@ -57,7 +59,7 @@ class LakePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -21,6 +22,7 @@ use Ad5001\BetterGen\populator\AmountPopulator;
use Ad5001\BetterGen\utils\BuildingUtils;
class RavinePopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
const NOISE = 250;
@ -74,7 +76,7 @@ class RavinePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL or $b === Block::SAND or $b === Block::SNOW_BLOCK or $b === Block::SANDSTONE) {
break;

View file

@ -16,11 +16,13 @@ namespace Ad5001\BetterGen\populator;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use Ad5001\BetterGen\structure\SugarCane;
use Ad5001\BetterGen\populator\AmountPopulator;
class SugarCanePopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
* Constructs the class
@ -57,7 +59,7 @@ class SugarCanePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y >= 0; -- $y) {
for($y = Level::Y_MAX; $y >= 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b !== Block::AIR and $b !== Block::LEAVES and $b !== Block::LEAVES2) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -21,6 +22,7 @@ use Ad5001\BetterGen\structure\Temple;
use Ad5001\BetterGen\populator\AmountPopulator;
class TemplePopulator extends AmountPopulator {
/** @var Level */
protected $level;
/*
@ -48,7 +50,7 @@ class TemplePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::SAND) {
break;

View file

@ -14,6 +14,8 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\generator\object\Tree;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -23,11 +25,13 @@ use Ad5001\BetterGen\Main;
class TreePopulator extends AmountPopulator {
/** @var Tree[] */
static $types = [
"pocketmine\\level\\generator\\object\\OakTree",
"pocketmine\\level\\generator\\object\\BirchTree",
"Ad5001\\BetterGen\\structure\\SakuraTree"
];
/** @var ChunkManager */
protected $level;
protected $type;
@ -63,7 +67,8 @@ class TreePopulator extends AmountPopulator {
continue;
}
$treeC = self::$types [$this->type];
$tree = new $treeC();
/** @var Tree $tree */
$tree = new $treeC();
$tree->placeObject($level, $x, $y, $z, $random);
}
}
@ -74,7 +79,7 @@ class TreePopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::DIRT or $b === Block::GRASS or $b === Block::PODZOL) {
break;

View file

@ -14,6 +14,7 @@
namespace Ad5001\BetterGen\populator;
use pocketmine\level\Level;
use pocketmine\utils\Random;
use pocketmine\block\Block;
use pocketmine\level\ChunkManager;
@ -21,6 +22,7 @@ use Ad5001\BetterGen\structure\Well;
use Ad5001\BetterGen\populator\AmountPopulator;
class WellPopulator extends AmountPopulator {
/** @var ChunkManager */
protected $level;
/*
@ -48,7 +50,7 @@ class WellPopulator extends AmountPopulator {
* @param $z int
*/
protected function getHighestWorkableBlock($x, $z) {
for($y = 127; $y > 0; -- $y) {
for($y = Level::Y_MAX; $y > 0; -- $y) {
$b = $this->level->getBlockIdAt($x, $y, $z);
if ($b === Block::SAND) {
break;