From 2795ad674b08d9d2255580fc7dc1cb2b3c14e661 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 5 Mar 2019 09:36:22 +0000 Subject: [PATCH] add boilerplate code to check for generator validity perhaps we should use an enum for this...? --- src/pocketmine/level/format/io/data/BedrockLevelData.php | 3 +++ src/pocketmine/level/format/io/data/JavaLevelData.php | 3 +++ src/pocketmine/level/format/io/leveldb/LevelDB.php | 3 +++ src/pocketmine/level/format/io/region/RegionLevelProvider.php | 3 +++ src/pocketmine/level/generator/GeneratorManager.php | 1 + 5 files changed, 13 insertions(+) diff --git a/src/pocketmine/level/format/io/data/BedrockLevelData.php b/src/pocketmine/level/format/io/data/BedrockLevelData.php index 946f284a4..7f8025af7 100644 --- a/src/pocketmine/level/format/io/data/BedrockLevelData.php +++ b/src/pocketmine/level/format/io/data/BedrockLevelData.php @@ -25,6 +25,7 @@ namespace pocketmine\level\format\io\data; use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\generator\Flat; +use pocketmine\level\generator\Generator; use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; use pocketmine\nbt\LittleEndianNbtSerializer; @@ -36,6 +37,7 @@ use pocketmine\nbt\tag\LongTag; use pocketmine\nbt\tag\StringTag; use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\utils\Binary; +use pocketmine\utils\Utils; use function file_get_contents; use function file_put_contents; use function strlen; @@ -51,6 +53,7 @@ class BedrockLevelData extends BaseNbtLevelData{ public const GENERATOR_FLAT = 2; public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void{ + Utils::testValidInstance($generator, Generator::class); switch($generator){ case Flat::class: $generatorType = self::GENERATOR_FLAT; diff --git a/src/pocketmine/level/format/io/data/JavaLevelData.php b/src/pocketmine/level/format/io/data/JavaLevelData.php index 893d7cef0..ac1aa39f2 100644 --- a/src/pocketmine/level/format/io/data/JavaLevelData.php +++ b/src/pocketmine/level/format/io/data/JavaLevelData.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\level\format\io\data; +use pocketmine\level\generator\Generator; use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; use pocketmine\nbt\BigEndianNbtSerializer; @@ -32,6 +33,7 @@ use pocketmine\nbt\tag\FloatTag; use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\LongTag; use pocketmine\nbt\tag\StringTag; +use pocketmine\utils\Utils; use function ceil; use function file_get_contents; use function file_put_contents; @@ -40,6 +42,7 @@ use function microtime; class JavaLevelData extends BaseNbtLevelData{ public static function generate(string $path, string $name, int $seed, string $generator, array $options = [], int $version = 19133) : void{ + Utils::testValidInstance($generator, Generator::class); //TODO, add extra details $levelData = new CompoundTag("Data", [ new ByteTag("hardcore", ($options["hardcore"] ?? false) === true ? 1 : 0), diff --git a/src/pocketmine/level/format/io/leveldb/LevelDB.php b/src/pocketmine/level/format/io/leveldb/LevelDB.php index 2c7b6e385..c15098de8 100644 --- a/src/pocketmine/level/format/io/leveldb/LevelDB.php +++ b/src/pocketmine/level/format/io/leveldb/LevelDB.php @@ -32,12 +32,14 @@ use pocketmine\level\format\io\exception\UnsupportedChunkFormatException; use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\format\io\LevelData; use pocketmine\level\format\SubChunk; +use pocketmine\level\generator\Generator; use pocketmine\nbt\LittleEndianNbtSerializer; use pocketmine\nbt\NbtDataException; use pocketmine\nbt\tag\CompoundTag; use pocketmine\utils\Binary; use pocketmine\utils\BinaryDataException; use pocketmine\utils\BinaryStream; +use pocketmine\utils\Utils; use function array_values; use function chr; use function defined; @@ -119,6 +121,7 @@ class LevelDB extends BaseLevelProvider{ } public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void{ + Utils::testValidInstance($generator, Generator::class); self::checkForLevelDBExtension(); if(!file_exists($path . "/db")){ diff --git a/src/pocketmine/level/format/io/region/RegionLevelProvider.php b/src/pocketmine/level/format/io/region/RegionLevelProvider.php index 671cedb02..2a356ec13 100644 --- a/src/pocketmine/level/format/io/region/RegionLevelProvider.php +++ b/src/pocketmine/level/format/io/region/RegionLevelProvider.php @@ -28,7 +28,9 @@ use pocketmine\level\format\io\BaseLevelProvider; use pocketmine\level\format\io\data\JavaLevelData; use pocketmine\level\format\io\exception\CorruptedChunkException; use pocketmine\level\format\io\LevelData; +use pocketmine\level\generator\Generator; use pocketmine\level\Level; +use pocketmine\utils\Utils; use function assert; use function file_exists; use function is_dir; @@ -69,6 +71,7 @@ abstract class RegionLevelProvider extends BaseLevelProvider{ } public static function generate(string $path, string $name, int $seed, string $generator, array $options = []) : void{ + Utils::testValidInstance($generator, Generator::class); if(!file_exists($path)){ mkdir($path, 0777, true); } diff --git a/src/pocketmine/level/generator/GeneratorManager.php b/src/pocketmine/level/generator/GeneratorManager.php index edd38d599..ee61cecd0 100644 --- a/src/pocketmine/level/generator/GeneratorManager.php +++ b/src/pocketmine/level/generator/GeneratorManager.php @@ -94,6 +94,7 @@ final class GeneratorManager{ * @throws \InvalidArgumentException if the class type cannot be matched to a known alias */ public static function getGeneratorName(string $class) : string{ + Utils::testValidInstance($class, Generator::class); foreach(self::$list as $name => $c){ if($c === $class){ return $name;