mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-09 11:16:57 +00:00
Reduce complexity of chunk sending system
This commit is contained in:
@ -969,30 +969,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
unset($this->loadQueue[$index]);
|
||||
}
|
||||
|
||||
public function onChunkReady(int $x, int $z){
|
||||
if(!$this->isConnected()){
|
||||
return;
|
||||
}
|
||||
|
||||
assert(isset($this->usedChunks[World::chunkHash($x, $z)]));
|
||||
$this->usedChunks[World::chunkHash($x, $z)] = true;
|
||||
|
||||
$this->networkSession->startUsingChunk($x, $z, function(int $chunkX, int $chunkZ) : void{
|
||||
if($this->spawned){
|
||||
$this->spawnEntitiesOnChunk($chunkX, $chunkZ);
|
||||
}elseif($this->spawnChunkLoadCount++ === $this->spawnThreshold){
|
||||
$this->spawned = true;
|
||||
|
||||
foreach($this->usedChunks as $chunkHash => $_){
|
||||
World::getXZ($chunkHash, $_x, $_z);
|
||||
$this->spawnEntitiesOnChunk($_x, $_z);
|
||||
}
|
||||
|
||||
$this->networkSession->onTerrainReady();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected function spawnEntitiesOnChunk(int $chunkX, int $chunkZ) : void{
|
||||
foreach($this->world->getChunkEntities($chunkX, $chunkZ) as $entity){
|
||||
if($entity !== $this and !$entity->isClosed() and !$entity->isFlaggedForDespawn()){
|
||||
@ -1030,7 +1006,22 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
}
|
||||
|
||||
unset($this->loadQueue[$index]);
|
||||
$this->world->requestChunk($X, $Z, $this);
|
||||
$this->usedChunks[$index] = true;
|
||||
|
||||
$this->networkSession->startUsingChunk($X, $Z, function(int $chunkX, int $chunkZ) : void{
|
||||
if($this->spawned){
|
||||
$this->spawnEntitiesOnChunk($chunkX, $chunkZ);
|
||||
}elseif($this->spawnChunkLoadCount++ === $this->spawnThreshold){
|
||||
$this->spawned = true;
|
||||
|
||||
foreach($this->usedChunks as $chunkHash => $_){
|
||||
World::getXZ($chunkHash, $_x, $_z);
|
||||
$this->spawnEntitiesOnChunk($_x, $_z);
|
||||
}
|
||||
|
||||
$this->networkSession->onTerrainReady();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Timings::$playerChunkSendTimer->stopTiming();
|
||||
|
Reference in New Issue
Block a user