Fixed some issues with world generation and not creating chunks, closes #3008

This commit is contained in:
Shoghi Cervantes 2015-05-11 23:53:01 +02:00
parent de0f653027
commit aa38a4885f
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
5 changed files with 14 additions and 18 deletions

View File

@ -1880,7 +1880,7 @@ class Level implements ChunkManager, Metadatable{
public function getChunk($x, $z, $create = false){
if(isset($this->chunks[$index = Level::chunkHash($x, $z)])){
return $this->chunks[$index];
}elseif($this->loadChunk($x, $z, $create) and $this->chunks[$index] !== null){
}elseif($this->loadChunk($x, $z, $create)){
return $this->chunks[$index];
}
@ -2159,21 +2159,16 @@ class Level implements ChunkManager, Metadatable{
$this->cancelUnloadChunkRequest($x, $z);
$chunk = $this->provider->getChunk($x, $z, $generate);
if($chunk !== null){
$this->chunks[$index] = $chunk;
$chunk->initChunk();
}else{
$this->provider->loadChunk($x, $z, $generate);
if(($chunk = $this->provider->getChunk($x, $z)) !== null){
$this->chunks[$index] = $chunk;
$chunk->initChunk();
}else{
$this->timings->syncChunkLoadTimer->stopTiming();
return false;
if($chunk === null){
if($generate){
throw new \InvalidStateException("Could not create new Chunk");
}
return false;
}
$this->chunks[$index] = $chunk;
$chunk->initChunk();
if($chunk->getProvider() !== null){
$this->server->getPluginManager()->callEvent(new ChunkLoadEvent($chunk, !$chunk->isGenerated()));
}else{

View File

@ -120,7 +120,7 @@ class Anvil extends McRegion{
}
public function isChunkGenerated($chunkX, $chunkZ){
if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) instanceof RegionLoader){
if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) !== null){
return $region->chunkExists($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32) and $this->getChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32, true)->isGenerated();
}

View File

@ -284,7 +284,7 @@ class McRegion extends BaseLevelProvider{
}
public function isChunkGenerated($chunkX, $chunkZ){
if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) instanceof RegionLoader){
if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) !== null){
return $region->chunkExists($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32) and $this->getChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32, true)->isGenerated();
}
@ -293,7 +293,7 @@ class McRegion extends BaseLevelProvider{
public function isChunkPopulated($chunkX, $chunkZ){
$chunk = $this->getChunk($chunkX, $chunkZ);
if($chunk instanceof FullChunk){
if($chunk !== null){
return $chunk->isPopulated();
}else{
return false;

View File

@ -67,7 +67,7 @@ class GenerationTask extends AsyncTask{
$generator->generateChunk($chunk->getX(), $chunk->getZ());
$chunk = $manager->getChunk($chunk->getX(), $chunk->getZ());
$chunk->setGenerated(true);
$chunk->setGenerated();
$this->chunk = $chunk->toFastBinary();
$manager->setChunk($chunk->getX(), $chunk->getZ(), null);

View File

@ -112,6 +112,7 @@ class PopulationTask extends AsyncTask{
$manager->setChunk($c->getX(), $c->getZ(), $c);
if(!$c->isGenerated()){
$generator->generateChunk($c->getX(), $c->getZ());
$c = $manager->getChunk($c->getX(), $c->getZ());
$c->setGenerated();
}
}
@ -175,7 +176,7 @@ class PopulationTask extends AsyncTask{
}
$c = $this->{"chunk$i"};
if($c !== null){
$c = $chunkC::fromFastBinary($c);
$c = $chunkC::fromFastBinary($c, $level->getProvider());
$level->generateChunkCallback($c->getX(), $c->getZ(), $c);
}
}