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 = [];
|
private array $chunks = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var true[]
|
||||||
|
* @phpstan-var array<ChunkPosHash, true>
|
||||||
|
*/
|
||||||
|
private array $knownUngeneratedChunks = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Vector3[][] chunkHash => [relativeBlockHash => Vector3]
|
* @var Vector3[][] chunkHash => [relativeBlockHash => Vector3]
|
||||||
* @phpstan-var array<ChunkPosHash, array<ChunkBlockPosHash, Vector3>>
|
* @phpstan-var array<ChunkPosHash, array<ChunkBlockPosHash, Vector3>>
|
||||||
@ -625,6 +631,7 @@ class World implements ChunkManager{
|
|||||||
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
||||||
$this->unloadChunk($chunkX, $chunkZ, false);
|
$this->unloadChunk($chunkX, $chunkZ, false);
|
||||||
}
|
}
|
||||||
|
$this->knownUngeneratedChunks = [];
|
||||||
foreach($this->entitiesByChunk as $chunkHash => $entities){
|
foreach($this->entitiesByChunk as $chunkHash => $entities){
|
||||||
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
self::getXZ($chunkHash, $chunkX, $chunkZ);
|
||||||
|
|
||||||
@ -2667,6 +2674,7 @@ class World implements ChunkManager{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->chunks[$chunkHash] = $chunk;
|
$this->chunks[$chunkHash] = $chunk;
|
||||||
|
unset($this->knownUngeneratedChunks[$chunkHash]);
|
||||||
|
|
||||||
$this->blockCacheSize -= count($this->blockCache[$chunkHash] ?? []);
|
$this->blockCacheSize -= count($this->blockCache[$chunkHash] ?? []);
|
||||||
unset($this->blockCache[$chunkHash]);
|
unset($this->blockCache[$chunkHash]);
|
||||||
@ -2931,6 +2939,9 @@ class World implements ChunkManager{
|
|||||||
if(isset($this->chunks[$chunkHash = World::chunkHash($x, $z)])){
|
if(isset($this->chunks[$chunkHash = World::chunkHash($x, $z)])){
|
||||||
return $this->chunks[$chunkHash];
|
return $this->chunks[$chunkHash];
|
||||||
}
|
}
|
||||||
|
if(isset($this->knownUngeneratedChunks[$chunkHash])){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$this->timings->syncChunkLoad->startTiming();
|
$this->timings->syncChunkLoad->startTiming();
|
||||||
|
|
||||||
@ -2950,6 +2961,7 @@ class World implements ChunkManager{
|
|||||||
|
|
||||||
if($loadedChunkData === null){
|
if($loadedChunkData === null){
|
||||||
$this->timings->syncChunkLoad->stopTiming();
|
$this->timings->syncChunkLoad->stopTiming();
|
||||||
|
$this->knownUngeneratedChunks[$chunkHash] = true;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user