move entity spawning logic back to Player

This commit is contained in:
Dylan K. Taylor
2019-05-07 18:35:04 +01:00
parent d7a7ab5102
commit c1a483a36d
2 changed files with 32 additions and 18 deletions

View File

@ -977,12 +977,27 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
assert(isset($this->usedChunks[World::chunkHash($x, $z)]));
$this->usedChunks[World::chunkHash($x, $z)] = true;
$spawn = $this->spawnChunkLoadCount++ === $this->spawnThreshold;
$this->networkSession->startUsingChunk($x, $z, $spawn);
$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;
if($spawn){
//TODO: not sure this should be here
$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()){
$entity->spawnTo($this);
}
}
}