1
0
mirror of https://github.com/pmmp/PocketMine-MP.git synced 2025-05-31 09:17:42 +00:00

Proper chunk unloading in case of generation/loading without players

This commit is contained in:
Shoghi Cervantes 2015-05-16 15:43:34 +02:00
parent d6ebff412c
commit 419abdaad6
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89

@ -568,6 +568,8 @@ class Level implements ChunkManager, Metadatable{
++$this->loaders[$hash]; ++$this->loaders[$hash];
} }
$this->cancelUnloadChunkRequest($chunkX, $chunkZ);
if($autoLoad){ if($autoLoad){
$this->loadChunk($chunkX, $chunkZ); $this->loadChunk($chunkX, $chunkZ);
} }
@ -634,9 +636,6 @@ class Level implements ChunkManager, Metadatable{
$this->unloadChunks(); $this->unloadChunks();
$X = null;
$Z = null;
//Do block updates //Do block updates
$this->timings->doTickPending->startTiming(); $this->timings->doTickPending->startTiming();
while($this->updateQueue->count() > 0 and $this->updateQueue->current()["priority"] <= $currentTick){ while($this->updateQueue->count() > 0 and $this->updateQueue->current()["priority"] <= $currentTick){
@ -2047,10 +2046,14 @@ class Level implements ChunkManager, Metadatable{
unset($this->chunkCache[$index]); unset($this->chunkCache[$index]);
$chunk->setChanged(); $chunk->setChanged();
if(!$this->isChunkInUse($chunkX, $chunkZ)){
$this->unloadChunkRequest($chunkX, $chunkZ);
}else{
foreach($this->getChunkLoaders($chunkX, $chunkZ) as $loader){ foreach($this->getChunkLoaders($chunkX, $chunkZ) as $loader){
$loader->onChunkChanged($chunk); $loader->onChunkChanged($chunk);
} }
} }
}
/** /**
* Gets the highest block Y value at a specific $x and $z * Gets the highest block Y value at a specific $x and $z
@ -2286,9 +2289,13 @@ class Level implements ChunkManager, Metadatable{
$chunk->setChanged(false); $chunk->setChanged(false);
if($this->isChunkInUse($x, $z)){
foreach($this->getChunkLoaders($x, $z) as $loader){ foreach($this->getChunkLoaders($x, $z) as $loader){
$loader->onChunkLoaded($chunk); $loader->onChunkLoaded($chunk);
} }
}else{
$this->unloadChunkRequest($x, $z);
}
$this->timings->syncChunkLoadTimer->stopTiming(); $this->timings->syncChunkLoadTimer->stopTiming();