getLevel()->getID(), $x, $z); } /** * @param $x * @param $z * * @return RegionLoader */ protected function getRegion($x, $z){ $index = $x . ":" . $z; return isset($this->regions[$index]) ? $this->regions[$index] : null; } /** * @param int $chunkX * @param int $chunkZ * @param bool $create * * @return Chunk */ public function getChunk($chunkX, $chunkZ, $create = false){ return parent::getChunk($chunkX, $chunkZ, $create); } public function setChunk($chunkX, $chunkZ, FullChunk $chunk){ if(!($chunk instanceof Chunk)){ throw new ChunkException("Invalid Chunk class"); } $chunk->setProvider($this); self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ); $this->loadRegion($regionX, $regionZ); $chunk->setX($chunkX); $chunk->setZ($chunkZ); $this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk; } public static function createChunkSection($Y){ return new ChunkSection(new Compound(null, [ "Y" => new Byte("Y", $Y), "Blocks" => new ByteArray("Blocks", str_repeat("\x00", 4096)), "Data" => new ByteArray("Data", str_repeat("\x00", 2048)), "SkyLight" => new ByteArray("SkyLight", str_repeat("\xff", 2048)), "BlockLight" => new ByteArray("BlockLight", str_repeat("\x00", 2048)) ])); } public function isChunkGenerated($chunkX, $chunkZ){ if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) instanceof RegionLoader){ return $region->chunkExists($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32) and $this->getChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32, true)->isGenerated(); } return false; } protected function loadRegion($x, $z){ $index = $x . ":" . $z; if(isset($this->regions[$index])){ return true; } $this->regions[$index] = new RegionLoader($this, $x, $z); return true; } }