Chunks no longer contain their own coordinates

This commit is contained in:
Dylan K. Taylor
2020-12-03 21:59:30 +00:00
parent 1f5998d24c
commit c808095978
23 changed files with 99 additions and 134 deletions

View File

@ -66,11 +66,11 @@ abstract class BaseWorldProvider implements WorldProvider{
return $this->readChunk($chunkX, $chunkZ);
}
public function saveChunk(Chunk $chunk) : void{
public function saveChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void{
if(!$chunk->isGenerated()){
throw new \InvalidStateException("Cannot save un-generated chunk");
}
$this->writeChunk($chunk);
$this->writeChunk($chunkX, $chunkZ, $chunk);
}
/**
@ -78,5 +78,5 @@ abstract class BaseWorldProvider implements WorldProvider{
*/
abstract protected function readChunk(int $chunkX, int $chunkZ) : ?Chunk;
abstract protected function writeChunk(Chunk $chunk) : void;
abstract protected function writeChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void;
}

View File

@ -107,7 +107,7 @@ final class FastChunkSerializer{
/**
* Deserializes a fast-serialized chunk
*/
public static function deserialize(string $data, int $chunkX, int $chunkZ) : Chunk{
public static function deserialize(string $data) : Chunk{
$stream = new BinaryStream($data);
$flags = $stream->getByte();
@ -144,7 +144,7 @@ final class FastChunkSerializer{
}
}
$chunk = new Chunk($chunkX, $chunkZ, $subChunks, null, null, $biomeIds, $heightMap);
$chunk = new Chunk($subChunks, null, null, $biomeIds, $heightMap);
$chunk->setGenerated($terrainGenerated);
$chunk->setPopulated($terrainPopulated);
$chunk->setLightPopulated($lightPopulated);

View File

@ -138,9 +138,10 @@ class FormatConverter{
$start = microtime(true);
$thisRound = $start;
foreach($this->oldProvider->getAllChunks(true, $this->logger) as $chunk){
foreach($this->oldProvider->getAllChunks(true, $this->logger) as $coords => $chunk){
[$chunkX, $chunkZ] = $coords;
$chunk->setDirty();
$new->saveChunk($chunk);
$new->saveChunk($chunkX, $chunkZ, $chunk);
$counter++;
if(($counter % $this->chunksPerProgressUpdate) === 0){
$time = microtime(true);

View File

@ -75,6 +75,7 @@ interface WorldProvider{
* Returns a generator which yields all the chunks in this world.
*
* @return \Generator|Chunk[]
* @phpstan-return \Generator<array{int, int}, Chunk, void, void>
* @throws CorruptedChunkException
*/
public function getAllChunks(bool $skipCorrupted = false, ?\Logger $logger = null) : \Generator;

View File

@ -39,5 +39,5 @@ interface WritableWorldProvider extends WorldProvider{
/**
* Saves a chunk (usually to disk).
*/
public function saveChunk(Chunk $chunk) : void;
public function saveChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void;
}

View File

@ -398,8 +398,6 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
}
$chunk = new Chunk(
$chunkX,
$chunkZ,
$subChunks,
$entities,
$tiles,
@ -417,9 +415,9 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
return $chunk;
}
protected function writeChunk(Chunk $chunk) : void{
protected function writeChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void{
$idMap = LegacyBlockIdToStringIdMap::getInstance();
$index = LevelDB::chunkIndex($chunk->getX(), $chunk->getZ());
$index = LevelDB::chunkIndex($chunkX, $chunkZ);
$write = new \LevelDBWriteBatch();
$write->put($index . self::TAG_VERSION, chr(self::CURRENT_LEVEL_CHUNK_VERSION));
@ -509,7 +507,7 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
$chunkZ = Binary::readLInt(substr($key, 4, 4));
try{
if(($chunk = $this->loadChunk($chunkX, $chunkZ)) !== null){
yield $chunk;
yield [$chunkX, $chunkZ] => $chunk;
}
}catch(CorruptedChunkException $e){
if(!$skipCorrupted){

View File

@ -93,8 +93,6 @@ trait LegacyAnvilChunkTrait{
}
$result = new Chunk(
$chunk->getInt("xPos"),
$chunk->getInt("zPos"),
$subChunks,
($entitiesTag = $chunk->getTag("Entities")) instanceof ListTag ? self::getCompoundList("Entities", $entitiesTag) : [],
($tilesTag = $chunk->getTag("TileEntities")) instanceof ListTag ? self::getCompoundList("TileEntities", $tilesTag) : [],

View File

@ -89,8 +89,6 @@ class McRegion extends RegionWorldProvider{
}
$result = new Chunk(
$chunk->getInt("xPos"),
$chunk->getInt("zPos"),
$subChunks,
($entitiesTag = $chunk->getTag("Entities")) instanceof ListTag ? self::getCompoundList("Entities", $entitiesTag) : [],
($tilesTag = $chunk->getTag("TileEntities")) instanceof ListTag ? self::getCompoundList("TileEntities", $tilesTag) : [],

View File

@ -228,10 +228,7 @@ abstract class RegionWorldProvider extends BaseWorldProvider{
return null;
}
protected function writeChunk(Chunk $chunk) : void{
$chunkX = $chunk->getX();
$chunkZ = $chunk->getZ();
protected function writeChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void{
self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ);
$this->loadRegion($regionX, $regionZ);
@ -263,7 +260,7 @@ abstract class RegionWorldProvider extends BaseWorldProvider{
try{
$chunk = $this->loadChunk($chunkX, $chunkZ);
if($chunk !== null){
yield $chunk;
yield [$chunkX, $chunkZ] => $chunk;
}
}catch(CorruptedChunkException $e){
if(!$skipCorrupted){