World: fixed false unload events firing on chunk replacement when tiles and entities are deleted

This commit is contained in:
Dylan K. Taylor 2020-11-01 17:41:58 +00:00
parent 61112e4912
commit 2e9b2d4aae

View File

@ -2023,16 +2023,18 @@ class World implements ChunkManager{
$oldChunk = $this->getOrLoadChunk($chunkX, $chunkZ, false); $oldChunk = $this->getOrLoadChunk($chunkX, $chunkZ, false);
if($oldChunk !== null and $oldChunk !== $chunk){ if($oldChunk !== null and $oldChunk !== $chunk){
if($deleteEntitiesAndTiles){ if($deleteEntitiesAndTiles){
foreach($oldChunk->getEntities() as $player){ foreach($oldChunk->getEntities() as $entity){
if(!($player instanceof Player)){ if($entity instanceof Player){
continue; $chunk->addEntity($entity);
$oldChunk->removeEntity($entity);
$entity->chunk = $chunk;
}else{
$entity->close();
} }
$chunk->addEntity($player);
$oldChunk->removeEntity($player);
$player->chunk = $chunk;
} }
//TODO: this causes chunkloaders to receive false "unloaded" notifications foreach($oldChunk->getTiles() as $tile){
$this->unloadChunk($chunkX, $chunkZ, false, false); $tile->close();
}
}else{ }else{
foreach($oldChunk->getEntities() as $entity){ foreach($oldChunk->getEntities() as $entity){
$chunk->addEntity($entity); $chunk->addEntity($entity);