Пример #1
0
 public static function generate($path, $name, $seed, $generator, array $options = [])
 {
     if (!file_exists($path)) {
         mkdir($path, 0777, true);
     }
     if (!file_exists($path . "/region")) {
         mkdir($path . "/region", 0777);
     }
     //TODO, add extra details
     $rules = new GameRules();
     $levelData = new CompoundTag("Data", ["hardcore" => new ByteTag("hardcore", 0), "initialized" => new ByteTag("initialized", 1), "GameType" => new IntTag("GameType", 0), "generatorVersion" => new IntTag("generatorVersion", 1), "SpawnX" => new IntTag("SpawnX", 128), "SpawnY" => new IntTag("SpawnY", 70), "SpawnZ" => new IntTag("SpawnZ", 128), "version" => new IntTag("version", 19133), "DayTime" => new IntTag("DayTime", 0), "LastPlayed" => new LongTag("LastPlayed", microtime(true) * 1000), "RandomSeed" => new LongTag("RandomSeed", $seed), "SizeOnDisk" => new LongTag("SizeOnDisk", 0), "Time" => new LongTag("Time", 0), "generatorName" => new StringTag("generatorName", Generator::getGeneratorName($generator)), "generatorOptions" => new StringTag("generatorOptions", isset($options["preset"]) ? $options["preset"] : ""), "LevelName" => new StringTag("LevelName", $name), "GameRules" => $rules->getRules()]);
     $nbt = new NBT(NBT::BIG_ENDIAN);
     $nbt->setData(new CompoundTag("", ["Data" => $levelData]));
     $buffer = $nbt->writeCompressed();
     file_put_contents($path . "level.dat", $buffer);
 }
Пример #2
0
 public static function generate($path, $name, $seed, $generator, array $options = [])
 {
     if (!file_exists($path)) {
         mkdir($path, 0777, true);
     }
     if (!file_exists($path . "/db")) {
         mkdir($path . "/db", 0777, true);
     }
     //TODO, add extra details
     $rules = new GameRules();
     $levelData = new CompoundTag("", ["hardcore" => new ByteTag("hardcore", 0), "initialized" => new ByteTag("initialized", 1), "GameType" => new IntTag("GameType", 0), "generatorVersion" => new IntTag("generatorVersion", 1), "SpawnX" => new IntTag("SpawnX", 128), "SpawnY" => new IntTag("SpawnY", 70), "SpawnZ" => new IntTag("SpawnZ", 128), "version" => new IntTag("version", 19133), "DayTime" => new IntTag("DayTime", 0), "LastPlayed" => new LongTag("LastPlayed", microtime(true) * 1000), "RandomSeed" => new LongTag("RandomSeed", $seed), "SizeOnDisk" => new LongTag("SizeOnDisk", 0), "Time" => new LongTag("Time", 0), "generatorName" => new StringTag("generatorName", Generator::getGeneratorName($generator)), "generatorOptions" => new StringTag("generatorOptions", isset($options["preset"]) ? $options["preset"] : ""), "LevelName" => new StringTag("LevelName", $name), "GameRules" => $rules->getRules()]);
     $nbt = new NBT(NBT::LITTLE_ENDIAN);
     $nbt->setData($levelData);
     $buffer = $nbt->write();
     file_put_contents($path . "level.dat", Binary::writeLInt(3) . Binary::writeLInt(strlen($buffer)) . $buffer);
     // Changed behaviour in leveldb.c instead. No need to open/close here
     //$db = new \LevelDB($path . "db");
     //$db->close();
 }
Пример #3
0
 /**
  * @param bool $force
  *
  * @return bool
  */
 public function save(bool $force = false)
 {
     if (!$this->getAutoSave() and !$force) {
         return false;
     }
     $this->server->getPluginManager()->callEvent(new LevelSaveEvent($this));
     $this->gamerules->save($this);
     $this->provider->setTime((int) $this->time);
     $this->saveChunks();
     if ($this->provider instanceof BaseLevelProvider) {
         $this->provider->saveLevelData();
     }
     return true;
 }