mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-08-11 14:02:05 +00:00
World: avoid hammering the disk looking for known ungenerated chunks
closes #6679 judging by the debug logs, this actually happens a lot during initial world generation, which I suppose isn't that surprising.
This commit is contained in:
parent
051671df50
commit
d41f1b2889
@ -289,6 +289,12 @@ class World implements ChunkManager{
|
||||
*/
|
||||
private array $chunks = [];
|
||||
|
||||
/**
|
||||
* @var true[]
|
||||
* @phpstan-var array<ChunkPosHash, true>
|
||||
*/
|
||||
private array $knownUngeneratedChunks = [];
|
||||
|
||||
/**
|
||||
* @var Vector3[][] chunkHash => [relativeBlockHash => Vector3]
|
||||
* @phpstan-var array<ChunkPosHash, array<ChunkBlockPosHash, Vector3>>
|
||||
@ -625,6 +631,7 @@ class World implements ChunkManager{
|
||||
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
||||
$this->unloadChunk($chunkX, $chunkZ, false);
|
||||
}
|
||||
$this->knownUngeneratedChunks = [];
|
||||
foreach($this->entitiesByChunk as $chunkHash => $entities){
|
||||
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
||||
|
||||
@ -2667,6 +2674,7 @@ class World implements ChunkManager{
|
||||
}
|
||||
|
||||
$this->chunks[$chunkHash] = $chunk;
|
||||
unset($this->knownUngeneratedChunks[$chunkHash]);
|
||||
|
||||
$this->blockCacheSize -= count($this->blockCache[$chunkHash] ?? []);
|
||||
unset($this->blockCache[$chunkHash]);
|
||||
@ -2931,6 +2939,9 @@ class World implements ChunkManager{
|
||||
if(isset($this->chunks[$chunkHash = World::chunkHash($x, $z)])){
|
||||
return $this->chunks[$chunkHash];
|
||||
}
|
||||
if(isset($this->knownUngeneratedChunks[$chunkHash])){
|
||||
return null;
|
||||
}
|
||||
|
||||
$this->timings->syncChunkLoad->startTiming();
|
||||
|
||||
@ -2950,6 +2961,7 @@ class World implements ChunkManager{
|
||||
|
||||
if($loadedChunkData === null){
|
||||
$this->timings->syncChunkLoad->stopTiming();
|
||||
$this->knownUngeneratedChunks[$chunkHash] = true;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user