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);
if($oldChunk !== null and $oldChunk !== $chunk){
if($deleteEntitiesAndTiles){
foreach($oldChunk->getEntities() as $player){
if(!($player instanceof Player)){
continue;
foreach($oldChunk->getEntities() as $entity){
if($entity instanceof Player){
$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
$this->unloadChunk($chunkX, $chunkZ, false, false);
foreach($oldChunk->getTiles() as $tile){
$tile->close();
}
}else{
foreach($oldChunk->getEntities() as $entity){
$chunk->addEntity($entity);