Ejemplo n.º 1
0
 /**
  * Init the default level data
  *
  * @param Server $server
  * @param string $name
  * @param string $path
  * @param string $provider Class that extends LevelProvider
  *
  * @throws \Exception
  */
 public function __construct(Server $server, $name, $path, $provider)
 {
     $this->blockStates = Block::$fullList;
     $this->levelId = static::$levelIdCounter++;
     $this->blockMetadata = new BlockMetadataStore($this);
     $this->server = $server;
     $this->autoSave = $server->getAutoSave();
     /** Weather Config Loader **/
     $this->rainprob = $this->getServer()->getProperty("weather.rain.possibility", 10);
     $this->raintime[] = $this->getServer()->getProperty("weather.rain.time.min", 30);
     $this->raintime[] = $this->getServer()->getProperty("weather.rain.time.max", 120);
     $this->rainfall[] = $this->getServer()->getProperty("weather.rain.rainfall.min", 1000);
     $this->rainfall[] = $this->getServer()->getProperty("weather.rain.rainfall.max", 100000);
     /** @var LevelProvider $provider */
     if (is_subclass_of($provider, LevelProvider::class, true)) {
         $this->provider = new $provider($this, $path);
     } else {
         throw new LevelException("Provider is not a subclass of LevelProvider");
     }
     $this->server->getLogger()->info($this->server->getLanguage()->translateString("BukkitPE.level.preparing", [$this->provider->getName()]));
     $this->generator = Generator::getGenerator($this->provider->getGenerator());
     $this->blockOrder = $provider::getProviderOrder();
     $this->useSections = $provider::usesChunkSection();
     $this->folderName = $name;
     $this->updateQueue = new ReversePriorityQueue();
     $this->updateQueue->setExtractFlags(\SplPriorityQueue::EXTR_BOTH);
     $this->time = (int) $this->provider->getTime();
     foreach ($this->getServer()->getProperty("disable-block-ticking", []) as $id) {
         $ticked = isset($this->randomTickBlocks[$id]);
         if ($ticked === true) {
             unset($this->randomTickBlocks[$id]);
         }
     }
     $this->updateRedstoneQueue = new ReversePriorityQueue();
     $this->updateRedstoneQueue->setExtractFlags(\SplPriorityQueue::EXTR_BOTH);
     $this->chunkTickRadius = min($this->server->getViewDistance(), max(1, (int) $this->server->getProperty("chunk-ticking.tick-radius", 4)));
     $this->chunksPerTick = (int) $this->server->getProperty("chunk-ticking.per-tick", 40);
     $this->chunkGenerationQueueSize = (int) $this->server->getProperty("chunk-generation.queue-size", 8);
     $this->chunkPopulationQueueSize = (int) $this->server->getProperty("chunk-generation.population-queue-size", 2);
     $this->chunkTickList = [];
     $this->clearChunksOnTick = (bool) $this->server->getProperty("chunk-ticking.clear-tick-list", true);
     $this->cacheChunks = (bool) $this->server->getProperty("chunk-sending.cache-chunks", false);
     $this->timings = new LevelTimings($this);
     $this->temporalPosition = new Position(0, 0, 0, $this);
     $this->temporalVector = new Vector3(0, 0, 0);
     $this->tickRate = 1;
 }