public function generateChunkCallback(int $x, int $z, FullChunk $chunk)
{
Timings::$generationCallbackTimer->startTiming();
if (isset($this->chunkPopulationQueue[$index = Level::chunkHash($x, $z)])) {
$oldChunk = $this->getChunk($x, $z, false);
for ($xx = -1; $xx <= 1; ++$xx) {
for ($zz = -1; $zz <= 1; ++$zz) {
unset($this->chunkPopulationLock[Level::chunkHash($x + $xx, $z + $zz)]);
}
}
unset($this->chunkPopulationQueue[$index]);
$chunk->setProvider($this->provider);
$this->setChunk($x, $z, $chunk, false);
$chunk = $this->getChunk($x, $z, false);
if ($chunk !== null and ($oldChunk === null or $oldChunk->isPopulated() === false) and $chunk->isPopulated() and $chunk->getProvider() !== null) {
$this->server->getPluginManager()->callEvent(new ChunkPopulateEvent($chunk));
foreach ($this->getChunkLoaders($x, $z) as $loader) {
$loader->onChunkPopulated($chunk);
}
}
} elseif (isset($this->chunkGenerationQueue[$index]) or isset($this->chunkPopulationLock[$index])) {
unset($this->chunkGenerationQueue[$index]);
unset($this->chunkPopulationLock[$index]);
$chunk->setProvider($this->provider);
$this->setChunk($x, $z, $chunk, false);
} else {
$chunk->setProvider($this->provider);
$this->setChunk($x, $z, $chunk, false);
}
Timings::$generationCallbackTimer->stopTiming();
}