public function doChunkGarbageCollection()
{
$this->timings->doChunkGC->startTiming();
$X = null;
$Z = null;
foreach ($this->chunks as $index => $chunk) {
if (!isset($this->unloadQueue[$index])) {
Level::getXZ($index, $X, $Z);
if (!$this->isSpawnChunk($X, $Z)) {
$this->unloadChunkRequest($X, $Z, true);
}
}
}
foreach ($this->provider->getLoadedChunks() as $chunk) {
if (!isset($this->chunks[Level::chunkHash($chunk->getX(), $chunk->getZ())])) {
$this->provider->unloadChunk($chunk->getX(), $chunk->getZ(), false);
}
}
$this->provider->doGarbageCollection();
$this->timings->doChunkGC->stopTiming();
}