mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-23 19:34:15 +00:00
Possible fix for #1661
This commit is contained in:
parent
6cb7e36f8a
commit
ef3674a296
@ -1519,14 +1519,19 @@ class Level implements ChunkManager, Metadatable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setChunk($x, $z, FullChunk $chunk){
|
public function setChunk($x, $z, FullChunk $chunk, $unload = true){
|
||||||
$index = Level::chunkHash($x, $z);
|
$index = Level::chunkHash($x, $z);
|
||||||
|
if($unload){
|
||||||
foreach($this->getUsingChunk($x, $z) as $player){
|
foreach($this->getUsingChunk($x, $z) as $player){
|
||||||
$player->unloadChunk($x, $z);
|
$player->unloadChunk($x, $z);
|
||||||
}
|
}
|
||||||
unset($this->chunks[$index]);
|
unset($this->chunks[$index]);
|
||||||
$this->provider->setChunk($x, $z, $chunk);
|
$this->provider->setChunk($x, $z, $chunk);
|
||||||
$this->loadChunk($x, $z);
|
$this->loadChunk($x, $z);
|
||||||
|
}else{
|
||||||
|
$this->provider->setChunk($x, $z, $chunk);
|
||||||
|
$this->chunks[$index] = $chunk;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1800,10 +1805,8 @@ class Level implements ChunkManager, Metadatable{
|
|||||||
|
|
||||||
$this->timings->doChunkUnload->startTiming();
|
$this->timings->doChunkUnload->startTiming();
|
||||||
|
|
||||||
if($this->getAutoSave()){
|
if($chunk instanceof FullChunk and $this->getAutoSave()){
|
||||||
if(isset($this->chunks[$index])){
|
$this->provider->setChunk($x, $z, $chunk);
|
||||||
$this->provider->setChunk($x, $z, $this->chunks[$index]);
|
|
||||||
}
|
|
||||||
$this->provider->saveChunk($x, $z);
|
$this->provider->saveChunk($x, $z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,20 +98,12 @@ class Anvil extends McRegion{
|
|||||||
|
|
||||||
$chunk->setProvider($this);
|
$chunk->setProvider($this);
|
||||||
|
|
||||||
if($chunk->isPopulated() === false){
|
|
||||||
$this->unloadChunk($chunkX, $chunkZ, false);
|
|
||||||
$regionX = $regionZ = null;
|
|
||||||
self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ);
|
self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ);
|
||||||
$this->loadRegion($regionX, $regionZ);
|
$this->loadRegion($regionX, $regionZ);
|
||||||
$region = $this->getRegion($regionX, $regionZ);
|
|
||||||
$region->removeChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32);
|
|
||||||
$this->loadChunk($chunkX, $chunkZ);
|
|
||||||
}else{
|
|
||||||
$chunk->setX($chunkX);
|
$chunk->setX($chunkX);
|
||||||
$chunk->setZ($chunkZ);
|
$chunk->setZ($chunkZ);
|
||||||
$this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk;
|
$this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk;
|
||||||
//$this->saveChunk($chunkX, $chunkZ);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function createChunkSection($Y){
|
public static function createChunkSection($Y){
|
||||||
|
@ -182,11 +182,9 @@ class Chunk extends BaseChunk{
|
|||||||
|
|
||||||
$tiles = [];
|
$tiles = [];
|
||||||
foreach($this->getTiles() as $tile){
|
foreach($this->getTiles() as $tile){
|
||||||
if($tile->closed !== true){
|
|
||||||
$tile->saveNBT();
|
$tile->saveNBT();
|
||||||
$tiles[] = $tile->namedtag;
|
$tiles[] = $tile->namedtag;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$nbt->Entities = new Enum("TileEntities", $tiles);
|
$nbt->Entities = new Enum("TileEntities", $tiles);
|
||||||
$nbt->Entities->setTagType(NBT::TAG_Compound);
|
$nbt->Entities->setTagType(NBT::TAG_Compound);
|
||||||
|
@ -288,11 +288,9 @@ class Chunk extends BaseFullChunk{
|
|||||||
|
|
||||||
$tiles = [];
|
$tiles = [];
|
||||||
foreach($this->getTiles() as $tile){
|
foreach($this->getTiles() as $tile){
|
||||||
if($tile->closed !== true){
|
|
||||||
$tile->saveNBT();
|
$tile->saveNBT();
|
||||||
$tiles[] = $tile->namedtag;
|
$tiles[] = $tile->namedtag;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$nbt->Entities = new Enum("TileEntities", $tiles);
|
$nbt->Entities = new Enum("TileEntities", $tiles);
|
||||||
$nbt->Entities->setTagType(NBT::TAG_Compound);
|
$nbt->Entities->setTagType(NBT::TAG_Compound);
|
||||||
|
@ -262,20 +262,12 @@ class McRegion extends BaseLevelProvider{
|
|||||||
|
|
||||||
$chunk->setProvider($this);
|
$chunk->setProvider($this);
|
||||||
|
|
||||||
if($chunk->isPopulated() === false){
|
|
||||||
$this->unloadChunk($chunkX, $chunkZ, false);
|
|
||||||
$regionX = $regionZ = null;
|
|
||||||
self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ);
|
self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ);
|
||||||
$this->loadRegion($regionX, $regionZ);
|
$this->loadRegion($regionX, $regionZ);
|
||||||
$region = $this->getRegion($regionX, $regionZ);
|
|
||||||
$region->removeChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32);
|
|
||||||
$this->loadChunk($chunkX, $chunkZ);
|
|
||||||
}else{
|
|
||||||
$chunk->setX($chunkX);
|
$chunk->setX($chunkX);
|
||||||
$chunk->setZ($chunkZ);
|
$chunk->setZ($chunkZ);
|
||||||
$this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk;
|
$this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk;
|
||||||
//$this->saveChunk($chunkX, $chunkZ);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function createChunkSection($Y){
|
public static function createChunkSection($Y){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user