mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 01:46:04 +00:00
Chunks no longer contain their own coordinates
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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){
|
||||
|
@ -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) : [],
|
||||
|
@ -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) : [],
|
||||
|
@ -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){
|
||||
|
Reference in New Issue
Block a user