setId($id); } public static function init() : void{ self::$biomes = new \SplFixedArray(self::MAX_BIOMES); self::register(self::OCEAN, new OceanBiome()); self::register(self::PLAINS, new PlainBiome()); self::register(self::DESERT, new DesertBiome()); self::register(self::MOUNTAINS, new MountainsBiome()); self::register(self::FOREST, new ForestBiome()); self::register(self::TAIGA, new TaigaBiome()); self::register(self::SWAMP, new SwampBiome()); self::register(self::RIVER, new RiverBiome()); self::register(self::ICE_PLAINS, new IcePlainsBiome()); self::register(self::SMALL_MOUNTAINS, new SmallMountainsBiome()); self::register(self::BIRCH_FOREST, new ForestBiome(TreeType::BIRCH())); } /** * @param int $id * * @return Biome */ public static function getBiome(int $id) : Biome{ if(self::$biomes[$id] === null){ self::register($id, new UnknownBiome()); } return self::$biomes[$id]; } public function clearPopulators() : void{ $this->populators = []; } public function addPopulator(Populator $populator) : void{ $this->populators[] = $populator; } /** * @param ChunkManager $world * @param int $chunkX * @param int $chunkZ * @param Random $random */ public function populateChunk(ChunkManager $world, int $chunkX, int $chunkZ, Random $random) : void{ foreach($this->populators as $populator){ $populator->populate($world, $chunkX, $chunkZ, $random); } } /** * @return Populator[] */ public function getPopulators() : array{ return $this->populators; } public function setId(int $id) : void{ if(!$this->registered){ $this->registered = true; $this->id = $id; } } public function getId() : int{ return $this->id; } abstract public function getName() : string; public function getMinElevation() : int{ return $this->minElevation; } public function getMaxElevation() : int{ return $this->maxElevation; } public function setElevation(int $min, int $max) : void{ $this->minElevation = $min; $this->maxElevation = $max; } /** * @return Block[] */ public function getGroundCover() : array{ return $this->groundCover; } /** * @param Block[] $covers */ public function setGroundCover(array $covers) : void{ $this->groundCover = $covers; } public function getTemperature() : float{ return $this->temperature; } public function getRainfall() : float{ return $this->rainfall; } }