mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-06 11:57:10 +00:00
Improved chunk generation queue
This commit is contained in:
parent
7cdf5a73eb
commit
0db009b08f
@ -1064,8 +1064,10 @@ class Server{
|
||||
|
||||
$this->getPluginManager()->callEvent(new LevelLoadEvent($level));
|
||||
|
||||
for($Z = 5; $Z <= 11; ++$Z){
|
||||
for($X = 5; $X <= 11; ++$X){
|
||||
$this->getLogger()->notice("Spawn terrain for level \"$name\" is being generated in the background");
|
||||
|
||||
for($Z = 0; $Z <= 16; ++$Z){
|
||||
for($X = 0; $X <= 16; ++$X){
|
||||
$level->generateChunk($X, $Z);
|
||||
}
|
||||
}
|
||||
|
@ -129,6 +129,8 @@ class Level implements ChunkManager, Metadatable{
|
||||
private $chunkSendQueue = [];
|
||||
private $chunkSendTasks = [];
|
||||
|
||||
private $chunkGenerationQueue = [];
|
||||
|
||||
private $autoSave = true;
|
||||
|
||||
/** @var BlockMetadataStore */
|
||||
@ -1273,6 +1275,11 @@ class Level implements ChunkManager, Metadatable{
|
||||
}
|
||||
}
|
||||
|
||||
public function generateChunkCallback($x, $z, SimpleChunk $chunk){
|
||||
unset($this->chunkGenerationQueue["$x:$z"]);
|
||||
$this->setChunk($x, $z, $chunk);
|
||||
}
|
||||
|
||||
public function setChunk($x, $z, SimpleChunk $chunk){
|
||||
$index = Level::chunkHash($x, $z);
|
||||
foreach($this->getUsingChunk($x, $z) as $player){
|
||||
@ -1693,7 +1700,10 @@ class Level implements ChunkManager, Metadatable{
|
||||
|
||||
|
||||
public function generateChunk($x, $z){
|
||||
$this->server->getGenerationManager()->requestChunk($this, $x, $z);
|
||||
if(!isset($this->chunkGenerationQueue["$x:$z"])){
|
||||
$this->chunkGenerationQueue["$x:$z"] = true;
|
||||
$this->server->getGenerationManager()->requestChunk($this, $x, $z);
|
||||
}
|
||||
}
|
||||
|
||||
public function regenerateChunk($x, $z){
|
||||
|
@ -98,7 +98,7 @@ class GenerationRequestManager{
|
||||
|
||||
protected function receiveChunk($levelID, SimpleChunk $chunk){
|
||||
if(($level = $this->server->getLevel($levelID)) instanceof Level){
|
||||
$level->setChunk($chunk->getX(), $chunk->getZ(), $chunk);
|
||||
$level->generateChunkCallback($chunk->getX(), $chunk->getZ(), $chunk);
|
||||
}else{
|
||||
$buffer = chr(GenerationManager::PACKET_CLOSE_LEVEL) . Binary::writeInt($levelID);
|
||||
@socket_write($this->socket, Binary::writeInt(strlen($buffer)) . $buffer);
|
||||
|
Loading…
x
Reference in New Issue
Block a user