mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 01:46:04 +00:00
WorldManager::createWorld() now accepts WorldCreationOptions instead of mixed[]
This commit is contained in:
@ -26,6 +26,7 @@ namespace pocketmine\world\format\io;
|
||||
use pocketmine\utils\Filesystem;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\world\generator\GeneratorManager;
|
||||
use pocketmine\world\WorldCreationOptions;
|
||||
use function basename;
|
||||
use function crc32;
|
||||
use function file_exists;
|
||||
@ -105,7 +106,13 @@ class FormatConverter{
|
||||
$this->logger->info("Found previous conversion attempt, deleting...");
|
||||
Filesystem::recursiveUnlink($convertedOutput);
|
||||
}
|
||||
$this->newProvider::generate($convertedOutput, $data->getName(), $data->getSeed(), GeneratorManager::getInstance()->getGenerator($data->getGenerator()), ["preset" => $data->getGeneratorOptions()]);
|
||||
$this->newProvider::generate($convertedOutput, $data->getName(), WorldCreationOptions::create()
|
||||
->setGeneratorClass(GeneratorManager::getInstance()->getGenerator($data->getGenerator()))
|
||||
->setGeneratorOptions($data->getGeneratorOptions())
|
||||
->setSeed($data->getSeed())
|
||||
->setSpawnPosition($data->getSpawn())
|
||||
->setDifficulty($data->getDifficulty())
|
||||
);
|
||||
|
||||
/**
|
||||
* @see WritableWorldProvider::__construct()
|
||||
|
@ -24,17 +24,13 @@ declare(strict_types=1);
|
||||
namespace pocketmine\world\format\io;
|
||||
|
||||
use pocketmine\world\format\Chunk;
|
||||
use pocketmine\world\generator\Generator;
|
||||
use pocketmine\world\WorldCreationOptions;
|
||||
|
||||
interface WritableWorldProvider extends WorldProvider{
|
||||
/**
|
||||
* Generate the needed files in the path given
|
||||
*
|
||||
* @param mixed[] $options
|
||||
* @phpstan-param class-string<Generator> $generator
|
||||
* @phpstan-param array<string, mixed> $options
|
||||
*/
|
||||
public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void;
|
||||
public static function generate(string $path, string $name, ?WorldCreationOptions $options = null) : void;
|
||||
|
||||
/**
|
||||
* Saves a chunk (usually to disk).
|
||||
|
@ -32,13 +32,13 @@ use pocketmine\nbt\TreeRoot;
|
||||
use pocketmine\network\mcpe\protocol\ProtocolInfo;
|
||||
use pocketmine\utils\Binary;
|
||||
use pocketmine\utils\Limits;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\world\format\io\exception\CorruptedWorldException;
|
||||
use pocketmine\world\format\io\exception\UnsupportedWorldFormatException;
|
||||
use pocketmine\world\generator\Flat;
|
||||
use pocketmine\world\generator\Generator;
|
||||
use pocketmine\world\generator\GeneratorManager;
|
||||
use pocketmine\world\World;
|
||||
use pocketmine\world\WorldCreationOptions;
|
||||
use function file_get_contents;
|
||||
use function file_put_contents;
|
||||
use function strlen;
|
||||
@ -53,14 +53,9 @@ class BedrockWorldData extends BaseNbtWorldData{
|
||||
public const GENERATOR_INFINITE = 1;
|
||||
public const GENERATOR_FLAT = 2;
|
||||
|
||||
/**
|
||||
* @param mixed[] $options
|
||||
* @phpstan-param class-string<Generator> $generator
|
||||
* @phpstan-param array<string, mixed> $options
|
||||
*/
|
||||
public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void{
|
||||
Utils::testValidInstance($generator, Generator::class);
|
||||
switch($generator){
|
||||
public static function generate(string $path, string $name, ?WorldCreationOptions $options = null) : void{
|
||||
$options ??= WorldCreationOptions::create();
|
||||
switch($options->getGeneratorClass()){
|
||||
case Flat::class:
|
||||
$generatorType = self::GENERATOR_FLAT;
|
||||
break;
|
||||
@ -72,7 +67,7 @@ class BedrockWorldData extends BaseNbtWorldData{
|
||||
$worldData = CompoundTag::create()
|
||||
//Vanilla fields
|
||||
->setInt("DayCycleStopTime", -1)
|
||||
->setInt("Difficulty", World::getDifficultyFromString((string) ($options["difficulty"] ?? "normal")))
|
||||
->setInt("Difficulty", $options->getDifficulty())
|
||||
->setByte("ForceGameType", 0)
|
||||
->setInt("GameType", 0)
|
||||
->setInt("Generator", $generatorType)
|
||||
@ -80,10 +75,10 @@ class BedrockWorldData extends BaseNbtWorldData{
|
||||
->setString("LevelName", $name)
|
||||
->setInt("NetworkVersion", ProtocolInfo::CURRENT_PROTOCOL)
|
||||
//->setInt("Platform", 2) //TODO: find out what the possible values are for
|
||||
->setLong("RandomSeed", $seed)
|
||||
->setInt("SpawnX", 0)
|
||||
->setInt("SpawnY", 32767)
|
||||
->setInt("SpawnZ", 0)
|
||||
->setLong("RandomSeed", $options->getSeed())
|
||||
->setInt("SpawnX", $options->getSpawnPosition()->getFloorX())
|
||||
->setInt("SpawnY", $options->getSpawnPosition()->getFloorY())
|
||||
->setInt("SpawnZ", $options->getSpawnPosition()->getFloorZ())
|
||||
->setInt("StorageVersion", self::CURRENT_STORAGE_VERSION)
|
||||
->setLong("Time", 0)
|
||||
->setByte("eduLevel", 0)
|
||||
@ -101,9 +96,9 @@ class BedrockWorldData extends BaseNbtWorldData{
|
||||
|
||||
//Additional PocketMine-MP fields
|
||||
->setTag("GameRules", new CompoundTag())
|
||||
->setByte("hardcore", ($options["hardcore"] ?? false) === true ? 1 : 0)
|
||||
->setString("generatorName", GeneratorManager::getInstance()->getGeneratorName($generator))
|
||||
->setString("generatorOptions", $options["preset"] ?? "");
|
||||
->setByte("hardcore", 0)
|
||||
->setString("generatorName", GeneratorManager::getInstance()->getGeneratorName($options->getGeneratorClass()))
|
||||
->setString("generatorOptions", $options->getGeneratorOptions());
|
||||
|
||||
$nbt = new LittleEndianNbtSerializer();
|
||||
$buffer = $nbt->write(new TreeRoot($worldData));
|
||||
|
@ -29,11 +29,10 @@ use pocketmine\nbt\tag\CompoundTag;
|
||||
use pocketmine\nbt\tag\FloatTag;
|
||||
use pocketmine\nbt\tag\StringTag;
|
||||
use pocketmine\nbt\TreeRoot;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\world\format\io\exception\CorruptedWorldException;
|
||||
use pocketmine\world\generator\Generator;
|
||||
use pocketmine\world\generator\GeneratorManager;
|
||||
use pocketmine\world\World;
|
||||
use pocketmine\world\WorldCreationOptions;
|
||||
use function ceil;
|
||||
use function file_get_contents;
|
||||
use function file_put_contents;
|
||||
@ -44,31 +43,27 @@ use const ZLIB_ENCODING_GZIP;
|
||||
|
||||
class JavaWorldData extends BaseNbtWorldData{
|
||||
|
||||
/**
|
||||
* @param mixed[] $options
|
||||
* @phpstan-param class-string<Generator> $generator
|
||||
* @phpstan-param array<string, mixed> $options
|
||||
*/
|
||||
public static function generate(string $path, string $name, int $seed, string $generator, array $options = [], int $version = 19133) : void{
|
||||
Utils::testValidInstance($generator, Generator::class);
|
||||
public static function generate(string $path, string $name, ?WorldCreationOptions $options = null, int $version = 19133) : void{
|
||||
//TODO, add extra details
|
||||
|
||||
$options ??= WorldCreationOptions::create();
|
||||
$worldData = CompoundTag::create()
|
||||
->setByte("hardcore", ($options["hardcore"] ?? false) === true ? 1 : 0)
|
||||
->setByte("Difficulty", World::getDifficultyFromString((string) ($options["difficulty"] ?? "normal")))
|
||||
->setByte("hardcore", 0)
|
||||
->setByte("Difficulty", $options->getDifficulty())
|
||||
->setByte("initialized", 1)
|
||||
->setInt("GameType", 0)
|
||||
->setInt("generatorVersion", 1) //2 in MCPE
|
||||
->setInt("SpawnX", 256)
|
||||
->setInt("SpawnY", 70)
|
||||
->setInt("SpawnZ", 256)
|
||||
->setInt("SpawnX", $options->getSpawnPosition()->getFloorX())
|
||||
->setInt("SpawnY", $options->getSpawnPosition()->getFloorY())
|
||||
->setInt("SpawnZ", $options->getSpawnPosition()->getFloorZ())
|
||||
->setInt("version", $version)
|
||||
->setInt("DayTime", 0)
|
||||
->setLong("LastPlayed", (int) (microtime(true) * 1000))
|
||||
->setLong("RandomSeed", $seed)
|
||||
->setLong("RandomSeed", $options->getSeed())
|
||||
->setLong("SizeOnDisk", 0)
|
||||
->setLong("Time", 0)
|
||||
->setString("generatorName", GeneratorManager::getInstance()->getGeneratorName($generator))
|
||||
->setString("generatorOptions", $options["preset"] ?? "")
|
||||
->setString("generatorName", GeneratorManager::getInstance()->getGeneratorName($options->getGeneratorClass()))
|
||||
->setString("generatorOptions", $options->getGeneratorOptions())
|
||||
->setString("LevelName", $name)
|
||||
->setTag("GameRules", new CompoundTag());
|
||||
|
||||
|
@ -32,7 +32,6 @@ use pocketmine\nbt\TreeRoot;
|
||||
use pocketmine\utils\Binary;
|
||||
use pocketmine\utils\BinaryDataException;
|
||||
use pocketmine\utils\BinaryStream;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\world\format\BiomeArray;
|
||||
use pocketmine\world\format\Chunk;
|
||||
use pocketmine\world\format\io\BaseWorldProvider;
|
||||
@ -46,7 +45,7 @@ use pocketmine\world\format\io\WorldData;
|
||||
use pocketmine\world\format\io\WritableWorldProvider;
|
||||
use pocketmine\world\format\PalettedBlockArray;
|
||||
use pocketmine\world\format\SubChunk;
|
||||
use pocketmine\world\generator\Generator;
|
||||
use pocketmine\world\WorldCreationOptions;
|
||||
use function array_map;
|
||||
use function array_values;
|
||||
use function chr;
|
||||
@ -144,15 +143,14 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
|
||||
return file_exists($path . "/level.dat") and is_dir($path . "/db/");
|
||||
}
|
||||
|
||||
public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void{
|
||||
Utils::testValidInstance($generator, Generator::class);
|
||||
public static function generate(string $path, string $name, ?WorldCreationOptions $options = null) : void{
|
||||
self::checkForLevelDBExtension();
|
||||
|
||||
if(!file_exists($path . "/db")){
|
||||
mkdir($path . "/db", 0777, true);
|
||||
}
|
||||
|
||||
BedrockWorldData::generate($path, $name, $seed, $generator, $options);
|
||||
BedrockWorldData::generate($path, $name, $options);
|
||||
}
|
||||
|
||||
protected function deserializePaletted(BinaryStream $stream) : PalettedBlockArray{
|
||||
|
@ -90,7 +90,7 @@ abstract class RegionWorldProvider extends BaseWorldProvider{
|
||||
mkdir($path . "/region", 0777);
|
||||
}
|
||||
|
||||
JavaWorldData::generate($path, $name, $seed, $generator, $options, static::getPcWorldFormatVersion());
|
||||
JavaWorldData::generate($path, $name, null, static::getPcWorldFormatVersion());
|
||||
}
|
||||
|
||||
/** @var RegionLoader[] */
|
||||
|
Reference in New Issue
Block a user