mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 09:56:06 +00:00
WorldProvider subsystem no longer depends on Chunk
Instead, it provides the data needed to construct the chunk, which doesn't require the provider to be aware of anywhere near as much logic.
This commit is contained in:
@ -1400,10 +1400,11 @@ class World implements ChunkManager{
|
||||
foreach($this->chunks as $chunkHash => $chunk){
|
||||
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
||||
$this->provider->saveChunk($chunkX, $chunkZ, new ChunkData(
|
||||
$chunk,
|
||||
$chunk->getSubChunks(),
|
||||
$chunk->isPopulated(),
|
||||
array_map(fn(Entity $e) => $e->saveNBT(), array_filter($this->getChunkEntities($chunkX, $chunkZ), fn(Entity $e) => $e->canSaveWithChunk())),
|
||||
array_map(fn(Tile $t) => $t->saveNBT(), $chunk->getTiles()),
|
||||
));
|
||||
), $chunk->getTerrainDirtyFlags());
|
||||
$chunk->clearTerrainDirtyFlags();
|
||||
}
|
||||
}finally{
|
||||
@ -2717,7 +2718,8 @@ class World implements ChunkManager{
|
||||
return null;
|
||||
}
|
||||
|
||||
$chunk = $loadedChunkData->getData()->getChunk();
|
||||
$chunkData = $loadedChunkData->getData();
|
||||
$chunk = new Chunk($chunkData->getSubChunks(), $chunkData->isPopulated());
|
||||
if(!$loadedChunkData->isUpgraded()){
|
||||
$chunk->clearTerrainDirtyFlags();
|
||||
}else{
|
||||
@ -2726,7 +2728,7 @@ class World implements ChunkManager{
|
||||
$this->chunks[$chunkHash] = $chunk;
|
||||
unset($this->blockCache[$chunkHash]);
|
||||
|
||||
$this->initChunk($x, $z, $loadedChunkData->getData());
|
||||
$this->initChunk($x, $z, $chunkData);
|
||||
|
||||
(new ChunkLoadEvent($this, $x, $z, $this->chunks[$chunkHash], false))->call();
|
||||
|
||||
@ -2853,10 +2855,11 @@ class World implements ChunkManager{
|
||||
$this->timings->syncChunkSave->startTiming();
|
||||
try{
|
||||
$this->provider->saveChunk($x, $z, new ChunkData(
|
||||
$chunk,
|
||||
$chunk->getSubChunks(),
|
||||
$chunk->isPopulated(),
|
||||
array_map(fn(Entity $e) => $e->saveNBT(), array_filter($this->getChunkEntities($x, $z), fn(Entity $e) => $e->canSaveWithChunk())),
|
||||
array_map(fn(Tile $t) => $t->saveNBT(), $chunk->getTiles()),
|
||||
));
|
||||
), $chunk->getTerrainDirtyFlags());
|
||||
}finally{
|
||||
$this->timings->syncChunkSave->stopTiming();
|
||||
}
|
||||
|
Reference in New Issue
Block a user