pocketmine\level\Level::unloadChunk PHP Method

unloadChunk() public method

public unloadChunk ( integer $x, integer $z, boolean $safe = true, boolean $trySave = true ) : boolean
$x integer
$z integer
$safe boolean
$trySave boolean
return boolean
    public function unloadChunk(int $x, int $z, bool $safe = true, bool $trySave = true) : bool
    {
        if ($safe === true and $this->isChunkInUse($x, $z)) {
            return false;
        }
        if (!$this->isChunkLoaded($x, $z)) {
            return true;
        }
        $this->timings->doChunkUnload->startTiming();
        $index = Level::chunkHash($x, $z);
        $chunk = $this->getChunk($x, $z);
        if ($chunk !== null and $chunk->getProvider() !== null) {
            $this->server->getPluginManager()->callEvent($ev = new ChunkUnloadEvent($chunk));
            if ($ev->isCancelled()) {
                $this->timings->doChunkUnload->stopTiming();
                return false;
            }
        }
        try {
            if ($chunk !== null) {
                if ($trySave and $this->getAutoSave()) {
                    $entities = 0;
                    foreach ($chunk->getEntities() as $e) {
                        if ($e instanceof Player) {
                            continue;
                        }
                        ++$entities;
                    }
                    if ($chunk->hasChanged() or count($chunk->getTiles()) > 0 or $entities > 0) {
                        $this->provider->setChunk($x, $z, $chunk);
                        $this->provider->saveChunk($x, $z);
                    }
                }
                foreach ($this->getChunkLoaders($x, $z) as $loader) {
                    $loader->onChunkUnloaded($chunk);
                }
            }
            $this->provider->unloadChunk($x, $z, $safe);
        } catch (\Throwable $e) {
            $logger = $this->server->getLogger();
            $logger->error($this->server->getLanguage()->translateString("pocketmine.level.chunkUnloadError", [$e->getMessage()]));
            if ($logger instanceof MainLogger) {
                $logger->logException($e);
            }
        }
        unset($this->chunks[$index]);
        unset($this->chunkTickList[$index]);
        unset($this->chunkCache[$index]);
        $this->timings->doChunkUnload->stopTiming();
        return true;
    }
Level