From eddb2b7fdd0a087d4593838f662cbb5783b75446 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 5 Jul 2020 16:52:42 +0100 Subject: [PATCH] Moved some legacyID mapping code to a separate BlockLegacyIdHelper this makes the code more reusable and will facilitate getting rid of legacy IDs from within the core code. --- src/block/BlockFactory.php | 78 ++------------- src/block/BlockLegacyIdHelper.php | 161 ++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 71 deletions(-) create mode 100644 src/block/BlockLegacyIdHelper.php diff --git a/src/block/BlockFactory.php b/src/block/BlockFactory.php index 7306fd088..2c68bd706 100644 --- a/src/block/BlockFactory.php +++ b/src/block/BlockFactory.php @@ -41,7 +41,6 @@ use pocketmine\block\tile\Hopper as TileHopper; use pocketmine\block\tile\ItemFrame as TileItemFrame; use pocketmine\block\tile\MonsterSpawner as TileMonsterSpawner; use pocketmine\block\tile\Note as TileNote; -use pocketmine\block\tile\Sign as TileSign; use pocketmine\block\tile\Skull as TileSkull; use pocketmine\block\utils\DyeColor; use pocketmine\block\utils\InvalidBlockStateException; @@ -409,69 +408,6 @@ class BlockFactory{ $this->register(new WeightedPressurePlateLight(new BID(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE), "Weighted Pressure Plate Light")); $this->register(new Wheat(new BID(Ids::WHEAT_BLOCK), "Wheat Block")); - //region ugly treetype -> blockID mapping tables - $woodenStairIds = [ - TreeType::OAK()->id() => Ids::OAK_STAIRS, - TreeType::SPRUCE()->id() => Ids::SPRUCE_STAIRS, - TreeType::BIRCH()->id() => Ids::BIRCH_STAIRS, - TreeType::JUNGLE()->id() => Ids::JUNGLE_STAIRS, - TreeType::ACACIA()->id() => Ids::ACACIA_STAIRS, - TreeType::DARK_OAK()->id() => Ids::DARK_OAK_STAIRS - ]; - $fenceGateIds = [ - TreeType::OAK()->id() => Ids::OAK_FENCE_GATE, - TreeType::SPRUCE()->id() => Ids::SPRUCE_FENCE_GATE, - TreeType::BIRCH()->id() => Ids::BIRCH_FENCE_GATE, - TreeType::JUNGLE()->id() => Ids::JUNGLE_FENCE_GATE, - TreeType::ACACIA()->id() => Ids::ACACIA_FENCE_GATE, - TreeType::DARK_OAK()->id() => Ids::DARK_OAK_FENCE_GATE - ]; - - /** @var BID[] $woodenDoorIds */ - $woodenDoorIds = [ - TreeType::OAK()->id() => new BID(Ids::OAK_DOOR_BLOCK, 0, ItemIds::OAK_DOOR), - TreeType::SPRUCE()->id() => new BID(Ids::SPRUCE_DOOR_BLOCK, 0, ItemIds::SPRUCE_DOOR), - TreeType::BIRCH()->id() => new BID(Ids::BIRCH_DOOR_BLOCK, 0, ItemIds::BIRCH_DOOR), - TreeType::JUNGLE()->id() => new BID(Ids::JUNGLE_DOOR_BLOCK, 0, ItemIds::JUNGLE_DOOR), - TreeType::ACACIA()->id() => new BID(Ids::ACACIA_DOOR_BLOCK, 0, ItemIds::ACACIA_DOOR), - TreeType::DARK_OAK()->id() => new BID(Ids::DARK_OAK_DOOR_BLOCK, 0, ItemIds::DARK_OAK_DOOR) - ]; - $woodenPressurePlateIds = [ - TreeType::OAK()->id() => Ids::WOODEN_PRESSURE_PLATE, - TreeType::SPRUCE()->id() => Ids::SPRUCE_PRESSURE_PLATE, - TreeType::BIRCH()->id() => Ids::BIRCH_PRESSURE_PLATE, - TreeType::JUNGLE()->id() => Ids::JUNGLE_PRESSURE_PLATE, - TreeType::ACACIA()->id() => Ids::ACACIA_PRESSURE_PLATE, - TreeType::DARK_OAK()->id() => Ids::DARK_OAK_PRESSURE_PLATE - ]; - $woodenButtonIds = [ - TreeType::OAK()->id() => Ids::WOODEN_BUTTON, - TreeType::SPRUCE()->id() => Ids::SPRUCE_BUTTON, - TreeType::BIRCH()->id() => Ids::BIRCH_BUTTON, - TreeType::JUNGLE()->id() => Ids::JUNGLE_BUTTON, - TreeType::ACACIA()->id() => Ids::ACACIA_BUTTON, - TreeType::DARK_OAK()->id() => Ids::DARK_OAK_BUTTON - ]; - $woodenTrapdoorIds = [ - TreeType::OAK()->id() => Ids::WOODEN_TRAPDOOR, - TreeType::SPRUCE()->id() => Ids::SPRUCE_TRAPDOOR, - TreeType::BIRCH()->id() => Ids::BIRCH_TRAPDOOR, - TreeType::JUNGLE()->id() => Ids::JUNGLE_TRAPDOOR, - TreeType::ACACIA()->id() => Ids::ACACIA_TRAPDOOR, - TreeType::DARK_OAK()->id() => Ids::DARK_OAK_TRAPDOOR - ]; - - /** @var BIDFlattened[] $woodenSignIds */ - $woodenSignIds = [ - TreeType::OAK()->id() => new BIDFlattened(Ids::SIGN_POST, Ids::WALL_SIGN, 0, ItemIds::SIGN, TileSign::class), - TreeType::SPRUCE()->id() => new BIDFlattened(Ids::SPRUCE_STANDING_SIGN, Ids::SPRUCE_WALL_SIGN, 0, ItemIds::SPRUCE_SIGN, TileSign::class), - TreeType::BIRCH()->id() => new BIDFlattened(Ids::BIRCH_STANDING_SIGN, Ids::BIRCH_WALL_SIGN, 0, ItemIds::BIRCH_SIGN, TileSign::class), - TreeType::JUNGLE()->id() => new BIDFlattened(Ids::JUNGLE_STANDING_SIGN, Ids::JUNGLE_WALL_SIGN, 0, ItemIds::JUNGLE_SIGN, TileSign::class), - TreeType::ACACIA()->id() => new BIDFlattened(Ids::ACACIA_STANDING_SIGN, Ids::ACACIA_WALL_SIGN, 0, ItemIds::ACACIA_SIGN, TileSign::class), - TreeType::DARK_OAK()->id() => new BIDFlattened(Ids::DARKOAK_STANDING_SIGN, Ids::DARKOAK_WALL_SIGN, 0, ItemIds::DARKOAK_SIGN, TileSign::class) - ]; - //endregion - foreach(TreeType::getAll() as $treeType){ $magicNumber = $treeType->getMagicNumber(); $name = $treeType->getDisplayName(); @@ -488,15 +424,15 @@ class BlockFactory{ $this->register($wood); $this->remap($magicNumber >= 4 ? Ids::LOG2 : Ids::LOG, ($magicNumber & 0x03) | 0b1100, $wood); - $this->register(new FenceGate(new BID($fenceGateIds[$treeType->id()]), $treeType->getDisplayName() . " Fence Gate")); - $this->register(new WoodenStairs(new BID($woodenStairIds[$treeType->id()]), $treeType->getDisplayName() . " Stairs")); - $this->register(new WoodenDoor($woodenDoorIds[$treeType->id()], $treeType->getDisplayName() . " Door")); + $this->register(new FenceGate(BlockLegacyIdHelper::getWoodenFenceIdentifier($treeType), $treeType->getDisplayName() . " Fence Gate")); + $this->register(new WoodenStairs(BlockLegacyIdHelper::getWoodenStairsIdentifier($treeType), $treeType->getDisplayName() . " Stairs")); + $this->register(new WoodenDoor(BlockLegacyIdHelper::getWoodenDoorIdentifier($treeType), $treeType->getDisplayName() . " Door")); - $this->register(new WoodenButton(new BID($woodenButtonIds[$treeType->id()]), $treeType->getDisplayName() . " Button")); - $this->register(new WoodenPressurePlate(new BID($woodenPressurePlateIds[$treeType->id()]), $treeType->getDisplayName() . " Pressure Plate")); - $this->register(new WoodenTrapdoor(new BID($woodenTrapdoorIds[$treeType->id()]), $treeType->getDisplayName() . " Trapdoor")); + $this->register(new WoodenButton(BlockLegacyIdHelper::getWoodenButtonIdentifier($treeType), $treeType->getDisplayName() . " Button")); + $this->register(new WoodenPressurePlate(BlockLegacyIdHelper::getWoodenPressurePlateIdentifier($treeType), $treeType->getDisplayName() . " Pressure Plate")); + $this->register(new WoodenTrapdoor(BlockLegacyIdHelper::getWoodenTrapdoorIdentifier($treeType), $treeType->getDisplayName() . " Trapdoor")); - $this->register(new Sign($woodenSignIds[$treeType->id()], $treeType->getDisplayName() . " Sign")); + $this->register(new Sign(BlockLegacyIdHelper::getWoodenSignIdentifier($treeType), $treeType->getDisplayName() . " Sign")); } static $sandstoneTypes = [ diff --git a/src/block/BlockLegacyIdHelper.php b/src/block/BlockLegacyIdHelper.php new file mode 100644 index 000000000..6288afa39 --- /dev/null +++ b/src/block/BlockLegacyIdHelper.php @@ -0,0 +1,161 @@ +id()){ + case TreeType::OAK()->id(): + return new BIDFlattened(Ids::SIGN_POST, Ids::WALL_SIGN, 0, ItemIds::SIGN, TileSign::class); + case TreeType::SPRUCE()->id(): + return new BIDFlattened(Ids::SPRUCE_STANDING_SIGN, Ids::SPRUCE_WALL_SIGN, 0, ItemIds::SPRUCE_SIGN, TileSign::class); + case TreeType::BIRCH()->id(): + return new BIDFlattened(Ids::BIRCH_STANDING_SIGN, Ids::BIRCH_WALL_SIGN, 0, ItemIds::BIRCH_SIGN, TileSign::class); + case TreeType::JUNGLE()->id(): + return new BIDFlattened(Ids::JUNGLE_STANDING_SIGN, Ids::JUNGLE_WALL_SIGN, 0, ItemIds::JUNGLE_SIGN, TileSign::class); + case TreeType::ACACIA()->id(): + return new BIDFlattened(Ids::ACACIA_STANDING_SIGN, Ids::ACACIA_WALL_SIGN, 0, ItemIds::ACACIA_SIGN, TileSign::class); + case TreeType::DARK_OAK()->id(): + return new BIDFlattened(Ids::DARKOAK_STANDING_SIGN, Ids::DARKOAK_WALL_SIGN, 0, ItemIds::DARKOAK_SIGN, TileSign::class); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenTrapdoorIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BlockIdentifier(Ids::WOODEN_TRAPDOOR); + case TreeType::SPRUCE()->id(): + return new BlockIdentifier(Ids::SPRUCE_TRAPDOOR); + case TreeType::BIRCH()->id(): + return new BlockIdentifier(Ids::BIRCH_TRAPDOOR); + case TreeType::JUNGLE()->id(): + return new BlockIdentifier(Ids::JUNGLE_TRAPDOOR); + case TreeType::ACACIA()->id(): + return new BlockIdentifier(Ids::ACACIA_TRAPDOOR); + case TreeType::DARK_OAK()->id(): + return new BlockIdentifier(Ids::DARK_OAK_TRAPDOOR); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenButtonIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BlockIdentifier(Ids::WOODEN_BUTTON); + case TreeType::SPRUCE()->id(): + return new BlockIdentifier(Ids::SPRUCE_BUTTON); + case TreeType::BIRCH()->id(): + return new BlockIdentifier(Ids::BIRCH_BUTTON); + case TreeType::JUNGLE()->id(): + return new BlockIdentifier(Ids::JUNGLE_BUTTON); + case TreeType::ACACIA()->id(): + return new BlockIdentifier(Ids::ACACIA_BUTTON); + case TreeType::DARK_OAK()->id(): + return new BlockIdentifier(Ids::DARK_OAK_BUTTON); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenPressurePlateIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BlockIdentifier(Ids::WOODEN_PRESSURE_PLATE); + case TreeType::SPRUCE()->id(): + return new BlockIdentifier(Ids::SPRUCE_PRESSURE_PLATE); + case TreeType::BIRCH()->id(): + return new BlockIdentifier(Ids::BIRCH_PRESSURE_PLATE); + case TreeType::JUNGLE()->id(): + return new BlockIdentifier(Ids::JUNGLE_PRESSURE_PLATE); + case TreeType::ACACIA()->id(): + return new BlockIdentifier(Ids::ACACIA_PRESSURE_PLATE); + case TreeType::DARK_OAK()->id(): + return new BlockIdentifier(Ids::DARK_OAK_PRESSURE_PLATE); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenDoorIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BID(Ids::OAK_DOOR_BLOCK, 0, ItemIds::OAK_DOOR); + case TreeType::SPRUCE()->id(): + return new BID(Ids::SPRUCE_DOOR_BLOCK, 0, ItemIds::SPRUCE_DOOR); + case TreeType::BIRCH()->id(): + return new BID(Ids::BIRCH_DOOR_BLOCK, 0, ItemIds::BIRCH_DOOR); + case TreeType::JUNGLE()->id(): + return new BID(Ids::JUNGLE_DOOR_BLOCK, 0, ItemIds::JUNGLE_DOOR); + case TreeType::ACACIA()->id(): + return new BID(Ids::ACACIA_DOOR_BLOCK, 0, ItemIds::ACACIA_DOOR); + case TreeType::DARK_OAK()->id(): + return new BID(Ids::DARK_OAK_DOOR_BLOCK, 0, ItemIds::DARK_OAK_DOOR); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenFenceIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BlockIdentifier(Ids::OAK_FENCE_GATE); + case TreeType::SPRUCE()->id(): + return new BlockIdentifier(Ids::SPRUCE_FENCE_GATE); + case TreeType::BIRCH()->id(): + return new BlockIdentifier(Ids::BIRCH_FENCE_GATE); + case TreeType::JUNGLE()->id(): + return new BlockIdentifier(Ids::JUNGLE_FENCE_GATE); + case TreeType::ACACIA()->id(): + return new BlockIdentifier(Ids::ACACIA_FENCE_GATE); + case TreeType::DARK_OAK()->id(): + return new BlockIdentifier(Ids::DARK_OAK_FENCE_GATE); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } + + public static function getWoodenStairsIdentifier(TreeType $treeType) : BlockIdentifier{ + switch($treeType->id()){ + case TreeType::OAK()->id(): + return new BlockIdentifier(Ids::OAK_STAIRS); + case TreeType::SPRUCE()->id(): + return new BlockIdentifier(Ids::SPRUCE_STAIRS); + case TreeType::BIRCH()->id(): + return new BlockIdentifier(Ids::BIRCH_STAIRS); + case TreeType::JUNGLE()->id(): + return new BlockIdentifier(Ids::JUNGLE_STAIRS); + case TreeType::ACACIA()->id(): + return new BlockIdentifier(Ids::ACACIA_STAIRS); + case TreeType::DARK_OAK()->id(): + return new BlockIdentifier(Ids::DARK_OAK_STAIRS); + } + throw new AssumptionFailedError("Switch should cover all wood types"); + } +}