WorldManager: use ChunkSelector to find stuff to pre-generate

This commit is contained in:
Dylan K. Taylor 2020-07-10 20:06:26 +01:00
parent c762ec1319
commit 91b028c208

View File

@ -27,6 +27,7 @@ use pocketmine\entity\Entity;
use pocketmine\event\world\WorldInitEvent; use pocketmine\event\world\WorldInitEvent;
use pocketmine\event\world\WorldLoadEvent; use pocketmine\event\world\WorldLoadEvent;
use pocketmine\event\world\WorldUnloadEvent; use pocketmine\event\world\WorldUnloadEvent;
use pocketmine\player\ChunkSelector;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings; use pocketmine\timings\Timings;
use pocketmine\utils\Limits; use pocketmine\utils\Limits;
@ -42,7 +43,6 @@ use pocketmine\world\generator\GeneratorManager;
use pocketmine\world\generator\normal\Normal; use pocketmine\world\generator\normal\Normal;
use function array_keys; use function array_keys;
use function array_shift; use function array_shift;
use function asort;
use function assert; use function assert;
use function count; use function count;
use function implode; use function implode;
@ -282,21 +282,7 @@ class WorldManager{
$centerX = $spawnLocation->getFloorX() >> 4; $centerX = $spawnLocation->getFloorX() >> 4;
$centerZ = $spawnLocation->getFloorZ() >> 4; $centerZ = $spawnLocation->getFloorZ() >> 4;
$order = []; foreach((new ChunkSelector())->selectChunks(3, $centerX, $centerZ) as $index){
for($X = -3; $X <= 3; ++$X){
for($Z = -3; $Z <= 3; ++$Z){
$distance = $X ** 2 + $Z ** 2;
$chunkX = $X + $centerX;
$chunkZ = $Z + $centerZ;
$index = World::chunkHash($chunkX, $chunkZ);
$order[$index] = $distance;
}
}
asort($order);
foreach($order as $index => $distance){
World::getXZ($index, $chunkX, $chunkZ); World::getXZ($index, $chunkX, $chunkZ);
$world->populateChunk($chunkX, $chunkZ, true); $world->populateChunk($chunkX, $chunkZ, true);
} }