diff --git a/src/data/bedrock/blockstate/BlockStateDeserializer.php b/src/data/bedrock/blockstate/BlockStateDeserializer.php index 068fcbc23..69972564f 100644 --- a/src/data/bedrock/blockstate/BlockStateDeserializer.php +++ b/src/data/bedrock/blockstate/BlockStateDeserializer.php @@ -31,8 +31,10 @@ use pocketmine\block\utils\BrewingStandSlot; use pocketmine\block\utils\CoralType; use pocketmine\block\utils\LeverFacing; use pocketmine\block\utils\SlabType; -use pocketmine\block\VanillaBlocks; +use pocketmine\block\VanillaBlocks as Blocks; use pocketmine\data\bedrock\blockstate\BlockStateDeserializerHelper as Helper; +use pocketmine\data\bedrock\blockstate\BlockStateNames as StateNames; +use pocketmine\data\bedrock\blockstate\BlockStateReader as Reader; use pocketmine\data\bedrock\blockstate\BlockStateStringValues as StringValues; use pocketmine\data\bedrock\blockstate\BlockTypeNames as Ids; use pocketmine\math\Axis; @@ -44,11 +46,11 @@ final class BlockStateDeserializer{ /** * @var \Closure[] - * @phpstan-var array + * @phpstan-var array */ private array $deserializeFuncs = []; - /** @phpstan-param \Closure(BlockStateReader) : Block $c */ + /** @phpstan-param \Closure(Reader) : Block $c */ private function map(string $id, \Closure $c) : void{ if(array_key_exists($id, $this->deserializeFuncs)){ throw new \InvalidArgumentException("Deserializer is already assigned for \"$id\""); @@ -57,522 +59,522 @@ final class BlockStateDeserializer{ } public function __construct(){ - $this->map(Ids::ACACIA_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::ACACIA_BUTTON(), $in)); - $this->map(Ids::ACACIA_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::ACACIA_DOOR(), $in)); - $this->map(Ids::ACACIA_FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::ACACIA_FENCE_GATE(), $in)); - $this->map(Ids::ACACIA_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::ACACIA_PRESSURE_PLATE(), $in)); - $this->map(Ids::ACACIA_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::ACACIA_STAIRS(), $in)); - $this->map(Ids::ACACIA_STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::ACACIA_SIGN(), $in)); - $this->map(Ids::ACACIA_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::ACACIA_TRAPDOOR(), $in)); - $this->map(Ids::ACACIA_WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::ACACIA_WALL_SIGN(), $in)); - $this->map(Ids::ACTIVATOR_RAIL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::ACTIVATOR_RAIL() - ->setPowered($in->readBool(BlockStateNames::RAIL_DATA_BIT)) - ->setShape($in->readBoundedInt(BlockStateNames::RAIL_DIRECTION, 0, 5)); + $this->map(Ids::ACACIA_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::ACACIA_BUTTON(), $in)); + $this->map(Ids::ACACIA_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::ACACIA_DOOR(), $in)); + $this->map(Ids::ACACIA_FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::ACACIA_FENCE_GATE(), $in)); + $this->map(Ids::ACACIA_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::ACACIA_PRESSURE_PLATE(), $in)); + $this->map(Ids::ACACIA_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::ACACIA_STAIRS(), $in)); + $this->map(Ids::ACACIA_STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::ACACIA_SIGN(), $in)); + $this->map(Ids::ACACIA_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::ACACIA_TRAPDOOR(), $in)); + $this->map(Ids::ACACIA_WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::ACACIA_WALL_SIGN(), $in)); + $this->map(Ids::ACTIVATOR_RAIL, function(Reader $in) : Block{ + return Blocks::ACTIVATOR_RAIL() + ->setPowered($in->readBool(StateNames::RAIL_DATA_BIT)) + ->setShape($in->readBoundedInt(StateNames::RAIL_DIRECTION, 0, 5)); }); - $this->map(Ids::AIR, fn() => VanillaBlocks::AIR()); - $this->map(Ids::ANDESITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::ANDESITE_STAIRS(), $in)); - $this->map(Ids::ANVIL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::ANVIL() - ->setDamage(match($value = $in->readString(BlockStateNames::DAMAGE)){ + $this->map(Ids::AIR, fn() => Blocks::AIR()); + $this->map(Ids::ANDESITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::ANDESITE_STAIRS(), $in)); + $this->map(Ids::ANVIL, function(Reader $in) : Block{ + return Blocks::ANVIL() + ->setDamage(match($value = $in->readString(StateNames::DAMAGE)){ StringValues::DAMAGE_UNDAMAGED => 0, StringValues::DAMAGE_SLIGHTLY_DAMAGED => 1, StringValues::DAMAGE_VERY_DAMAGED => 2, StringValues::DAMAGE_BROKEN => 0, - default => throw $in->badValueException(BlockStateNames::DAMAGE, $value), + default => throw $in->badValueException(StateNames::DAMAGE, $value), }) ->setFacing($in->readLegacyHorizontalFacing()); }); - $this->map(Ids::BAMBOO, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BAMBOO() - ->setLeafSize(match($value = $in->readString(BlockStateNames::BAMBOO_LEAF_SIZE)){ + $this->map(Ids::BAMBOO, function(Reader $in) : Block{ + return Blocks::BAMBOO() + ->setLeafSize(match($value = $in->readString(StateNames::BAMBOO_LEAF_SIZE)){ StringValues::BAMBOO_LEAF_SIZE_NO_LEAVES => Bamboo::NO_LEAVES, StringValues::BAMBOO_LEAF_SIZE_SMALL_LEAVES => Bamboo::SMALL_LEAVES, StringValues::BAMBOO_LEAF_SIZE_LARGE_LEAVES => Bamboo::LARGE_LEAVES, - default => throw $in->badValueException(BlockStateNames::BAMBOO_LEAF_SIZE, $value), + default => throw $in->badValueException(StateNames::BAMBOO_LEAF_SIZE, $value), }) - ->setReady($in->readBool(BlockStateNames::AGE_BIT)) - ->setThick(match($value = $in->readString(BlockStateNames::BAMBOO_STALK_THICKNESS)){ + ->setReady($in->readBool(StateNames::AGE_BIT)) + ->setThick(match($value = $in->readString(StateNames::BAMBOO_STALK_THICKNESS)){ StringValues::BAMBOO_STALK_THICKNESS_THIN => false, StringValues::BAMBOO_STALK_THICKNESS_THICK => true, - default => throw $in->badValueException(BlockStateNames::BAMBOO_STALK_THICKNESS, $value), + default => throw $in->badValueException(StateNames::BAMBOO_STALK_THICKNESS, $value), }); }); - $this->map(Ids::BAMBOO_SAPLING, function(BlockStateReader $in) : Block{ + $this->map(Ids::BAMBOO_SAPLING, function(Reader $in) : Block{ //TODO: sapling_type intentionally ignored (its presence is a bug) - return VanillaBlocks::BAMBOO_SAPLING()->setReady($in->readBool(BlockStateNames::AGE_BIT)); + return Blocks::BAMBOO_SAPLING()->setReady($in->readBool(StateNames::AGE_BIT)); }); - $this->map(Ids::BARREL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BARREL() + $this->map(Ids::BARREL, function(Reader $in) : Block{ + return Blocks::BARREL() ->setFacing($in->readFacingDirection()) - ->setOpen($in->readBool(BlockStateNames::OPEN_BIT)); + ->setOpen($in->readBool(StateNames::OPEN_BIT)); }); - $this->map(Ids::BARRIER, fn() => VanillaBlocks::BARRIER()); - $this->map(Ids::BEACON, fn() => VanillaBlocks::BEACON()); - $this->map(Ids::BED, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BED() + $this->map(Ids::BARRIER, fn() => Blocks::BARRIER()); + $this->map(Ids::BEACON, fn() => Blocks::BEACON()); + $this->map(Ids::BED, function(Reader $in) : Block{ + return Blocks::BED() ->setFacing($in->readLegacyHorizontalFacing()) - ->setHead($in->readBool(BlockStateNames::HEAD_PIECE_BIT)) - ->setOccupied($in->readBool(BlockStateNames::OCCUPIED_BIT)); + ->setHead($in->readBool(StateNames::HEAD_PIECE_BIT)) + ->setOccupied($in->readBool(StateNames::OCCUPIED_BIT)); }); - $this->map(Ids::BEDROCK, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BEDROCK() - ->setBurnsForever($in->readBool(BlockStateNames::INFINIBURN_BIT)); + $this->map(Ids::BEDROCK, function(Reader $in) : Block{ + return Blocks::BEDROCK() + ->setBurnsForever($in->readBool(StateNames::INFINIBURN_BIT)); }); - $this->map(Ids::BEETROOT, fn(BlockStateReader $in) => Helper::decodeCrops(VanillaBlocks::BEETROOTS(), $in)); - $this->map(Ids::BELL, function(BlockStateReader $in) : Block{ + $this->map(Ids::BEETROOT, fn(Reader $in) => Helper::decodeCrops(Blocks::BEETROOTS(), $in)); + $this->map(Ids::BELL, function(Reader $in) : Block{ //TODO: ignored toggle_bit (appears to be internally used in MCPE only, useless for us) - return VanillaBlocks::BELL() + return Blocks::BELL() ->setFacing($in->readLegacyHorizontalFacing()) ->setAttachmentType($in->readBellAttachmentType()); }); - $this->map(Ids::BIRCH_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::BIRCH_BUTTON(), $in)); - $this->map(Ids::BIRCH_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::BIRCH_DOOR(), $in)); - $this->map(Ids::BIRCH_FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::BIRCH_FENCE_GATE(), $in)); - $this->map(Ids::BIRCH_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::BIRCH_PRESSURE_PLATE(), $in)); - $this->map(Ids::BIRCH_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::BIRCH_STAIRS(), $in)); - $this->map(Ids::BIRCH_STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::BIRCH_SIGN(), $in)); - $this->map(Ids::BIRCH_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::BIRCH_TRAPDOOR(), $in)); - $this->map(Ids::BIRCH_WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::BIRCH_WALL_SIGN(), $in)); - $this->map(Ids::BLACK_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::BLACK_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::BLAST_FURNACE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BLAST_FURNACE() + $this->map(Ids::BIRCH_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::BIRCH_BUTTON(), $in)); + $this->map(Ids::BIRCH_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::BIRCH_DOOR(), $in)); + $this->map(Ids::BIRCH_FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::BIRCH_FENCE_GATE(), $in)); + $this->map(Ids::BIRCH_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::BIRCH_PRESSURE_PLATE(), $in)); + $this->map(Ids::BIRCH_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::BIRCH_STAIRS(), $in)); + $this->map(Ids::BIRCH_STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::BIRCH_SIGN(), $in)); + $this->map(Ids::BIRCH_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::BIRCH_TRAPDOOR(), $in)); + $this->map(Ids::BIRCH_WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::BIRCH_WALL_SIGN(), $in)); + $this->map(Ids::BLACK_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::BLACK_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::BLAST_FURNACE, function(Reader $in) : Block{ + return Blocks::BLAST_FURNACE() ->setFacing($in->readHorizontalFacing()) ->setLit(false); }); - $this->map(Ids::BLUE_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::BLUE_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::BLUE_ICE, fn() => VanillaBlocks::BLUE_ICE()); - $this->map(Ids::BONE_BLOCK, function(BlockStateReader $in) : Block{ + $this->map(Ids::BLUE_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::BLUE_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::BLUE_ICE, fn() => Blocks::BLUE_ICE()); + $this->map(Ids::BONE_BLOCK, function(Reader $in) : Block{ //TODO: intentionally ignored "deprecated" blockstate (useless) - return VanillaBlocks::BONE_BLOCK()->setAxis($in->readPillarAxis()); + return Blocks::BONE_BLOCK()->setAxis($in->readPillarAxis()); }); - $this->map(Ids::BOOKSHELF, fn() => VanillaBlocks::BOOKSHELF()); - $this->map(Ids::BREWING_STAND, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BREWING_STAND() - ->setSlot(BrewingStandSlot::EAST(), $in->readBool(BlockStateNames::BREWING_STAND_SLOT_A_BIT)) - ->setSlot(BrewingStandSlot::SOUTHWEST(), $in->readBool(BlockStateNames::BREWING_STAND_SLOT_B_BIT)) - ->setSlot(BrewingStandSlot::NORTHWEST(), $in->readBool(BlockStateNames::BREWING_STAND_SLOT_C_BIT)); + $this->map(Ids::BOOKSHELF, fn() => Blocks::BOOKSHELF()); + $this->map(Ids::BREWING_STAND, function(Reader $in) : Block{ + return Blocks::BREWING_STAND() + ->setSlot(BrewingStandSlot::EAST(), $in->readBool(StateNames::BREWING_STAND_SLOT_A_BIT)) + ->setSlot(BrewingStandSlot::SOUTHWEST(), $in->readBool(StateNames::BREWING_STAND_SLOT_B_BIT)) + ->setSlot(BrewingStandSlot::NORTHWEST(), $in->readBool(StateNames::BREWING_STAND_SLOT_C_BIT)); }); - $this->map(Ids::BRICK_BLOCK, fn() => VanillaBlocks::BRICKS()); - $this->map(Ids::BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::BRICK_STAIRS(), $in)); - $this->map(Ids::BROWN_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::BROWN_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::BROWN_MUSHROOM, fn() => VanillaBlocks::BROWN_MUSHROOM()); - $this->map(Ids::BROWN_MUSHROOM_BLOCK, fn(BlockStateReader $in) => Helper::decodeMushroomBlock(VanillaBlocks::BROWN_MUSHROOM_BLOCK(), $in)); - $this->map(Ids::CACTUS, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CACTUS() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 15)); + $this->map(Ids::BRICK_BLOCK, fn() => Blocks::BRICKS()); + $this->map(Ids::BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::BRICK_STAIRS(), $in)); + $this->map(Ids::BROWN_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::BROWN_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::BROWN_MUSHROOM, fn() => Blocks::BROWN_MUSHROOM()); + $this->map(Ids::BROWN_MUSHROOM_BLOCK, fn(Reader $in) => Helper::decodeMushroomBlock(Blocks::BROWN_MUSHROOM_BLOCK(), $in)); + $this->map(Ids::CACTUS, function(Reader $in) : Block{ + return Blocks::CACTUS() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 15)); }); - $this->map(Ids::CAKE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CAKE() - ->setBites($in->readBoundedInt(BlockStateNames::BITE_COUNTER, 0, 6)); + $this->map(Ids::CAKE, function(Reader $in) : Block{ + return Blocks::CAKE() + ->setBites($in->readBoundedInt(StateNames::BITE_COUNTER, 0, 6)); }); - $this->map(Ids::CARPET, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CARPET() + $this->map(Ids::CARPET, function(Reader $in) : Block{ + return Blocks::CARPET() ->setColor($in->readColor()); }); - $this->map(Ids::CARROTS, fn(BlockStateReader $in) => Helper::decodeCrops(VanillaBlocks::CARROTS(), $in)); - $this->map(Ids::CARVED_PUMPKIN, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CARVED_PUMPKIN() + $this->map(Ids::CARROTS, fn(Reader $in) => Helper::decodeCrops(Blocks::CARROTS(), $in)); + $this->map(Ids::CARVED_PUMPKIN, function(Reader $in) : Block{ + return Blocks::CARVED_PUMPKIN() ->setFacing($in->readLegacyHorizontalFacing()); }); - $this->map(Ids::CHEMICAL_HEAT, fn() => VanillaBlocks::CHEMICAL_HEAT()); - $this->map(Ids::CHEMISTRY_TABLE, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::CHEMISTRY_TABLE_TYPE)){ - StringValues::CHEMISTRY_TABLE_TYPE_COMPOUND_CREATOR => VanillaBlocks::COMPOUND_CREATOR(), - StringValues::CHEMISTRY_TABLE_TYPE_ELEMENT_CONSTRUCTOR => VanillaBlocks::ELEMENT_CONSTRUCTOR(), - StringValues::CHEMISTRY_TABLE_TYPE_LAB_TABLE => VanillaBlocks::LAB_TABLE(), - StringValues::CHEMISTRY_TABLE_TYPE_MATERIAL_REDUCER => VanillaBlocks::MATERIAL_REDUCER(), - default => throw $in->badValueException(BlockStateNames::CHEMISTRY_TABLE_TYPE, $type), + $this->map(Ids::CHEMICAL_HEAT, fn() => Blocks::CHEMICAL_HEAT()); + $this->map(Ids::CHEMISTRY_TABLE, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::CHEMISTRY_TABLE_TYPE)){ + StringValues::CHEMISTRY_TABLE_TYPE_COMPOUND_CREATOR => Blocks::COMPOUND_CREATOR(), + StringValues::CHEMISTRY_TABLE_TYPE_ELEMENT_CONSTRUCTOR => Blocks::ELEMENT_CONSTRUCTOR(), + StringValues::CHEMISTRY_TABLE_TYPE_LAB_TABLE => Blocks::LAB_TABLE(), + StringValues::CHEMISTRY_TABLE_TYPE_MATERIAL_REDUCER => Blocks::MATERIAL_REDUCER(), + default => throw $in->badValueException(StateNames::CHEMISTRY_TABLE_TYPE, $type), })->setFacing(Facing::opposite($in->readLegacyHorizontalFacing())); }); - $this->map(Ids::CHEST, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CHEST() + $this->map(Ids::CHEST, function(Reader $in) : Block{ + return Blocks::CHEST() ->setFacing($in->readHorizontalFacing()); }); - $this->map(Ids::CLAY, fn() => VanillaBlocks::CLAY()); - $this->map(Ids::COAL_BLOCK, fn() => VanillaBlocks::COAL()); - $this->map(Ids::COAL_ORE, fn() => VanillaBlocks::COAL_ORE()); - $this->map(Ids::COBBLESTONE, fn() => VanillaBlocks::COBBLESTONE()); - $this->map(Ids::COBBLESTONE_WALL, fn(BlockStateReader $in) => Helper::mapLegacyWallType($in)); - $this->map(Ids::COCOA, function(BlockStateReader $in) : Block{ - return VanillaBlocks::COCOA_POD() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 2)) + $this->map(Ids::CLAY, fn() => Blocks::CLAY()); + $this->map(Ids::COAL_BLOCK, fn() => Blocks::COAL()); + $this->map(Ids::COAL_ORE, fn() => Blocks::COAL_ORE()); + $this->map(Ids::COBBLESTONE, fn() => Blocks::COBBLESTONE()); + $this->map(Ids::COBBLESTONE_WALL, fn(Reader $in) => Helper::mapLegacyWallType($in)); + $this->map(Ids::COCOA, function(Reader $in) : Block{ + return Blocks::COCOA_POD() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 2)) ->setFacing(Facing::opposite($in->readLegacyHorizontalFacing())); }); - $this->map(Ids::COLORED_TORCH_BP, function(BlockStateReader $in) : Block{ - return $in->readBool(BlockStateNames::COLOR_BIT) ? - VanillaBlocks::PURPLE_TORCH()->setFacing($in->readTorchFacing()) : - VanillaBlocks::BLUE_TORCH()->setFacing($in->readTorchFacing()); + $this->map(Ids::COLORED_TORCH_BP, function(Reader $in) : Block{ + return $in->readBool(StateNames::COLOR_BIT) ? + Blocks::PURPLE_TORCH()->setFacing($in->readTorchFacing()) : + Blocks::BLUE_TORCH()->setFacing($in->readTorchFacing()); }); - $this->map(Ids::COLORED_TORCH_RG, function(BlockStateReader $in) : Block{ - return $in->readBool(BlockStateNames::COLOR_BIT) ? - VanillaBlocks::GREEN_TORCH()->setFacing($in->readTorchFacing()) : - VanillaBlocks::RED_TORCH()->setFacing($in->readTorchFacing()); + $this->map(Ids::COLORED_TORCH_RG, function(Reader $in) : Block{ + return $in->readBool(StateNames::COLOR_BIT) ? + Blocks::GREEN_TORCH()->setFacing($in->readTorchFacing()) : + Blocks::RED_TORCH()->setFacing($in->readTorchFacing()); }); - $this->map(Ids::CONCRETE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CONCRETE() + $this->map(Ids::CONCRETE, function(Reader $in) : Block{ + return Blocks::CONCRETE() ->setColor($in->readColor()); }); - $this->map(Ids::CONCRETEPOWDER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CONCRETE_POWDER() + $this->map(Ids::CONCRETEPOWDER, function(Reader $in) : Block{ + return Blocks::CONCRETE_POWDER() ->setColor($in->readColor()); }); - $this->map(Ids::CORAL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CORAL() + $this->map(Ids::CORAL, function(Reader $in) : Block{ + return Blocks::CORAL() ->setCoralType($in->readCoralType()) - ->setDead($in->readBool(BlockStateNames::DEAD_BIT)); + ->setDead($in->readBool(StateNames::DEAD_BIT)); }); - $this->map(Ids::CORAL_BLOCK, function(BlockStateReader $in) : Block{ - return VanillaBlocks::CORAL_BLOCK() + $this->map(Ids::CORAL_BLOCK, function(Reader $in) : Block{ + return Blocks::CORAL_BLOCK() ->setCoralType($in->readCoralType()) - ->setDead($in->readBool(BlockStateNames::DEAD_BIT)); + ->setDead($in->readBool(StateNames::DEAD_BIT)); }); - $this->map(Ids::CORAL_FAN, fn(BlockStateReader $in) => Helper::decodeFloorCoralFan(VanillaBlocks::CORAL_FAN(), $in) + $this->map(Ids::CORAL_FAN, fn(Reader $in) => Helper::decodeFloorCoralFan(Blocks::CORAL_FAN(), $in) ->setDead(false)); - $this->map(Ids::CORAL_FAN_DEAD, fn(BlockStateReader $in) => Helper::decodeFloorCoralFan(VanillaBlocks::CORAL_FAN(), $in) + $this->map(Ids::CORAL_FAN_DEAD, fn(Reader $in) => Helper::decodeFloorCoralFan(Blocks::CORAL_FAN(), $in) ->setDead(true)); - $this->map(Ids::CORAL_FAN_HANG, fn(BlockStateReader $in) => Helper::decodeWallCoralFan(VanillaBlocks::WALL_CORAL_FAN(), $in) - ->setCoralType($in->readBool(BlockStateNames::CORAL_HANG_TYPE_BIT) ? CoralType::BRAIN() : CoralType::TUBE())); - $this->map(Ids::CORAL_FAN_HANG2, fn(BlockStateReader $in) => Helper::decodeWallCoralFan(VanillaBlocks::WALL_CORAL_FAN(), $in) - ->setCoralType($in->readBool(BlockStateNames::CORAL_HANG_TYPE_BIT) ? CoralType::FIRE() : CoralType::BUBBLE())); - $this->map(Ids::CORAL_FAN_HANG3, fn(BlockStateReader $in) => Helper::decodeWallCoralFan(VanillaBlocks::WALL_CORAL_FAN(), $in) + $this->map(Ids::CORAL_FAN_HANG, fn(Reader $in) => Helper::decodeWallCoralFan(Blocks::WALL_CORAL_FAN(), $in) + ->setCoralType($in->readBool(StateNames::CORAL_HANG_TYPE_BIT) ? CoralType::BRAIN() : CoralType::TUBE())); + $this->map(Ids::CORAL_FAN_HANG2, fn(Reader $in) => Helper::decodeWallCoralFan(Blocks::WALL_CORAL_FAN(), $in) + ->setCoralType($in->readBool(StateNames::CORAL_HANG_TYPE_BIT) ? CoralType::FIRE() : CoralType::BUBBLE())); + $this->map(Ids::CORAL_FAN_HANG3, fn(Reader $in) => Helper::decodeWallCoralFan(Blocks::WALL_CORAL_FAN(), $in) ->setCoralType(CoralType::HORN())); - $this->map(Ids::CRAFTING_TABLE, fn() => VanillaBlocks::CRAFTING_TABLE()); - $this->map(Ids::CYAN_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::CYAN_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::DARK_OAK_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::DARK_OAK_BUTTON(), $in)); - $this->map(Ids::DARK_OAK_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::DARK_OAK_DOOR(), $in)); - $this->map(Ids::DARK_OAK_FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::DARK_OAK_FENCE_GATE(), $in)); - $this->map(Ids::DARK_OAK_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::DARK_OAK_PRESSURE_PLATE(), $in)); - $this->map(Ids::DARK_OAK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::DARK_OAK_STAIRS(), $in)); - $this->map(Ids::DARK_OAK_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::DARK_OAK_TRAPDOOR(), $in)); - $this->map(Ids::DARK_PRISMARINE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::DARK_PRISMARINE_STAIRS(), $in)); - $this->map(Ids::DARKOAK_STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::DARK_OAK_SIGN(), $in)); - $this->map(Ids::DARKOAK_WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::DARK_OAK_WALL_SIGN(), $in)); - $this->map(Ids::DAYLIGHT_DETECTOR, fn(BlockStateReader $in) => Helper::decodeDaylightSensor(VanillaBlocks::DAYLIGHT_SENSOR(), $in) + $this->map(Ids::CRAFTING_TABLE, fn() => Blocks::CRAFTING_TABLE()); + $this->map(Ids::CYAN_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::CYAN_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::DARK_OAK_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::DARK_OAK_BUTTON(), $in)); + $this->map(Ids::DARK_OAK_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::DARK_OAK_DOOR(), $in)); + $this->map(Ids::DARK_OAK_FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::DARK_OAK_FENCE_GATE(), $in)); + $this->map(Ids::DARK_OAK_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::DARK_OAK_PRESSURE_PLATE(), $in)); + $this->map(Ids::DARK_OAK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::DARK_OAK_STAIRS(), $in)); + $this->map(Ids::DARK_OAK_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::DARK_OAK_TRAPDOOR(), $in)); + $this->map(Ids::DARK_PRISMARINE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::DARK_PRISMARINE_STAIRS(), $in)); + $this->map(Ids::DARKOAK_STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::DARK_OAK_SIGN(), $in)); + $this->map(Ids::DARKOAK_WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::DARK_OAK_WALL_SIGN(), $in)); + $this->map(Ids::DAYLIGHT_DETECTOR, fn(Reader $in) => Helper::decodeDaylightSensor(Blocks::DAYLIGHT_SENSOR(), $in) ->setInverted(false)); - $this->map(Ids::DAYLIGHT_DETECTOR_INVERTED, fn(BlockStateReader $in) => Helper::decodeDaylightSensor(VanillaBlocks::DAYLIGHT_SENSOR(), $in) + $this->map(Ids::DAYLIGHT_DETECTOR_INVERTED, fn(Reader $in) => Helper::decodeDaylightSensor(Blocks::DAYLIGHT_SENSOR(), $in) ->setInverted(true)); - $this->map(Ids::DEADBUSH, fn() => VanillaBlocks::DEAD_BUSH()); - $this->map(Ids::DETECTOR_RAIL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::DETECTOR_RAIL() - ->setActivated($in->readBool(BlockStateNames::RAIL_DATA_BIT)) - ->setShape($in->readBoundedInt(BlockStateNames::RAIL_DIRECTION, 0, 5)); + $this->map(Ids::DEADBUSH, fn() => Blocks::DEAD_BUSH()); + $this->map(Ids::DETECTOR_RAIL, function(Reader $in) : Block{ + return Blocks::DETECTOR_RAIL() + ->setActivated($in->readBool(StateNames::RAIL_DATA_BIT)) + ->setShape($in->readBoundedInt(StateNames::RAIL_DIRECTION, 0, 5)); }); - $this->map(Ids::DIAMOND_BLOCK, fn() => VanillaBlocks::DIAMOND()); - $this->map(Ids::DIAMOND_ORE, fn() => VanillaBlocks::DIAMOND_ORE()); - $this->map(Ids::DIORITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::DIORITE_STAIRS(), $in)); - $this->map(Ids::DIRT, function(BlockStateReader $in) : Block{ - return VanillaBlocks::DIRT() - ->setCoarse(match($value = $in->readString(BlockStateNames::DIRT_TYPE)){ + $this->map(Ids::DIAMOND_BLOCK, fn() => Blocks::DIAMOND()); + $this->map(Ids::DIAMOND_ORE, fn() => Blocks::DIAMOND_ORE()); + $this->map(Ids::DIORITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::DIORITE_STAIRS(), $in)); + $this->map(Ids::DIRT, function(Reader $in) : Block{ + return Blocks::DIRT() + ->setCoarse(match($value = $in->readString(StateNames::DIRT_TYPE)){ StringValues::DIRT_TYPE_NORMAL => false, StringValues::DIRT_TYPE_COARSE => true, - default => throw $in->badValueException(BlockStateNames::DIRT_TYPE, $value), + default => throw $in->badValueException(StateNames::DIRT_TYPE, $value), }); }); - $this->map(Ids::DOUBLE_PLANT, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::DOUBLE_PLANT_TYPE)){ - StringValues::DOUBLE_PLANT_TYPE_FERN => VanillaBlocks::LARGE_FERN(), - StringValues::DOUBLE_PLANT_TYPE_GRASS => VanillaBlocks::DOUBLE_TALLGRASS(), - StringValues::DOUBLE_PLANT_TYPE_PAEONIA => VanillaBlocks::PEONY(), - StringValues::DOUBLE_PLANT_TYPE_ROSE => VanillaBlocks::ROSE_BUSH(), - StringValues::DOUBLE_PLANT_TYPE_SUNFLOWER => VanillaBlocks::SUNFLOWER(), - StringValues::DOUBLE_PLANT_TYPE_SYRINGA => VanillaBlocks::LILAC(), - default => throw $in->badValueException(BlockStateNames::DOUBLE_PLANT_TYPE, $type), - })->setTop($in->readBool(BlockStateNames::UPPER_BLOCK_BIT)); + $this->map(Ids::DOUBLE_PLANT, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::DOUBLE_PLANT_TYPE)){ + StringValues::DOUBLE_PLANT_TYPE_FERN => Blocks::LARGE_FERN(), + StringValues::DOUBLE_PLANT_TYPE_GRASS => Blocks::DOUBLE_TALLGRASS(), + StringValues::DOUBLE_PLANT_TYPE_PAEONIA => Blocks::PEONY(), + StringValues::DOUBLE_PLANT_TYPE_ROSE => Blocks::ROSE_BUSH(), + StringValues::DOUBLE_PLANT_TYPE_SUNFLOWER => Blocks::SUNFLOWER(), + StringValues::DOUBLE_PLANT_TYPE_SYRINGA => Blocks::LILAC(), + default => throw $in->badValueException(StateNames::DOUBLE_PLANT_TYPE, $type), + })->setTop($in->readBool(StateNames::UPPER_BLOCK_BIT)); }); - $this->map(Ids::DOUBLE_STONE_SLAB, function(BlockStateReader $in) : Block{ + $this->map(Ids::DOUBLE_STONE_SLAB, function(Reader $in) : Block{ return Helper::mapStoneSlab1Type($in)->setSlabType(SlabType::DOUBLE()); }); - $this->map(Ids::DOUBLE_STONE_SLAB2, function(BlockStateReader $in) : Block{ + $this->map(Ids::DOUBLE_STONE_SLAB2, function(Reader $in) : Block{ return Helper::mapStoneSlab2Type($in)->setSlabType(SlabType::DOUBLE()); }); - $this->map(Ids::DOUBLE_STONE_SLAB3, function(BlockStateReader $in) : Block{ + $this->map(Ids::DOUBLE_STONE_SLAB3, function(Reader $in) : Block{ return Helper::mapStoneSlab3Type($in)->setSlabType(SlabType::DOUBLE()); }); - $this->map(Ids::DOUBLE_STONE_SLAB4, function(BlockStateReader $in) : Block{ + $this->map(Ids::DOUBLE_STONE_SLAB4, function(Reader $in) : Block{ return Helper::mapStoneSlab4Type($in)->setSlabType(SlabType::DOUBLE()); }); - $this->map(Ids::DOUBLE_WOODEN_SLAB, function(BlockStateReader $in) : Block{ + $this->map(Ids::DOUBLE_WOODEN_SLAB, function(Reader $in) : Block{ return Helper::mapWoodenSlabType($in)->setSlabType(SlabType::DOUBLE()); }); - $this->map(Ids::DRAGON_EGG, fn() => VanillaBlocks::DRAGON_EGG()); - $this->map(Ids::DRIED_KELP_BLOCK, fn() => VanillaBlocks::DRIED_KELP()); - $this->map(Ids::ELEMENT_0, fn() => VanillaBlocks::ELEMENT_ZERO()); - $this->map(Ids::ELEMENT_1, fn() => VanillaBlocks::ELEMENT_HYDROGEN()); - $this->map(Ids::ELEMENT_10, fn() => VanillaBlocks::ELEMENT_NEON()); - $this->map(Ids::ELEMENT_100, fn() => VanillaBlocks::ELEMENT_FERMIUM()); - $this->map(Ids::ELEMENT_101, fn() => VanillaBlocks::ELEMENT_MENDELEVIUM()); - $this->map(Ids::ELEMENT_102, fn() => VanillaBlocks::ELEMENT_NOBELIUM()); - $this->map(Ids::ELEMENT_103, fn() => VanillaBlocks::ELEMENT_LAWRENCIUM()); - $this->map(Ids::ELEMENT_104, fn() => VanillaBlocks::ELEMENT_RUTHERFORDIUM()); - $this->map(Ids::ELEMENT_105, fn() => VanillaBlocks::ELEMENT_DUBNIUM()); - $this->map(Ids::ELEMENT_106, fn() => VanillaBlocks::ELEMENT_SEABORGIUM()); - $this->map(Ids::ELEMENT_107, fn() => VanillaBlocks::ELEMENT_BOHRIUM()); - $this->map(Ids::ELEMENT_108, fn() => VanillaBlocks::ELEMENT_HASSIUM()); - $this->map(Ids::ELEMENT_109, fn() => VanillaBlocks::ELEMENT_MEITNERIUM()); - $this->map(Ids::ELEMENT_11, fn() => VanillaBlocks::ELEMENT_SODIUM()); - $this->map(Ids::ELEMENT_110, fn() => VanillaBlocks::ELEMENT_DARMSTADTIUM()); - $this->map(Ids::ELEMENT_111, fn() => VanillaBlocks::ELEMENT_ROENTGENIUM()); - $this->map(Ids::ELEMENT_112, fn() => VanillaBlocks::ELEMENT_COPERNICIUM()); - $this->map(Ids::ELEMENT_113, fn() => VanillaBlocks::ELEMENT_NIHONIUM()); - $this->map(Ids::ELEMENT_114, fn() => VanillaBlocks::ELEMENT_FLEROVIUM()); - $this->map(Ids::ELEMENT_115, fn() => VanillaBlocks::ELEMENT_MOSCOVIUM()); - $this->map(Ids::ELEMENT_116, fn() => VanillaBlocks::ELEMENT_LIVERMORIUM()); - $this->map(Ids::ELEMENT_117, fn() => VanillaBlocks::ELEMENT_TENNESSINE()); - $this->map(Ids::ELEMENT_118, fn() => VanillaBlocks::ELEMENT_OGANESSON()); - $this->map(Ids::ELEMENT_12, fn() => VanillaBlocks::ELEMENT_MAGNESIUM()); - $this->map(Ids::ELEMENT_13, fn() => VanillaBlocks::ELEMENT_ALUMINUM()); - $this->map(Ids::ELEMENT_14, fn() => VanillaBlocks::ELEMENT_SILICON()); - $this->map(Ids::ELEMENT_15, fn() => VanillaBlocks::ELEMENT_PHOSPHORUS()); - $this->map(Ids::ELEMENT_16, fn() => VanillaBlocks::ELEMENT_SULFUR()); - $this->map(Ids::ELEMENT_17, fn() => VanillaBlocks::ELEMENT_CHLORINE()); - $this->map(Ids::ELEMENT_18, fn() => VanillaBlocks::ELEMENT_ARGON()); - $this->map(Ids::ELEMENT_19, fn() => VanillaBlocks::ELEMENT_POTASSIUM()); - $this->map(Ids::ELEMENT_2, fn() => VanillaBlocks::ELEMENT_HELIUM()); - $this->map(Ids::ELEMENT_20, fn() => VanillaBlocks::ELEMENT_CALCIUM()); - $this->map(Ids::ELEMENT_21, fn() => VanillaBlocks::ELEMENT_SCANDIUM()); - $this->map(Ids::ELEMENT_22, fn() => VanillaBlocks::ELEMENT_TITANIUM()); - $this->map(Ids::ELEMENT_23, fn() => VanillaBlocks::ELEMENT_VANADIUM()); - $this->map(Ids::ELEMENT_24, fn() => VanillaBlocks::ELEMENT_CHROMIUM()); - $this->map(Ids::ELEMENT_25, fn() => VanillaBlocks::ELEMENT_MANGANESE()); - $this->map(Ids::ELEMENT_26, fn() => VanillaBlocks::ELEMENT_IRON()); - $this->map(Ids::ELEMENT_27, fn() => VanillaBlocks::ELEMENT_COBALT()); - $this->map(Ids::ELEMENT_28, fn() => VanillaBlocks::ELEMENT_NICKEL()); - $this->map(Ids::ELEMENT_29, fn() => VanillaBlocks::ELEMENT_COPPER()); - $this->map(Ids::ELEMENT_3, fn() => VanillaBlocks::ELEMENT_LITHIUM()); - $this->map(Ids::ELEMENT_30, fn() => VanillaBlocks::ELEMENT_ZINC()); - $this->map(Ids::ELEMENT_31, fn() => VanillaBlocks::ELEMENT_GALLIUM()); - $this->map(Ids::ELEMENT_32, fn() => VanillaBlocks::ELEMENT_GERMANIUM()); - $this->map(Ids::ELEMENT_33, fn() => VanillaBlocks::ELEMENT_ARSENIC()); - $this->map(Ids::ELEMENT_34, fn() => VanillaBlocks::ELEMENT_SELENIUM()); - $this->map(Ids::ELEMENT_35, fn() => VanillaBlocks::ELEMENT_BROMINE()); - $this->map(Ids::ELEMENT_36, fn() => VanillaBlocks::ELEMENT_KRYPTON()); - $this->map(Ids::ELEMENT_37, fn() => VanillaBlocks::ELEMENT_RUBIDIUM()); - $this->map(Ids::ELEMENT_38, fn() => VanillaBlocks::ELEMENT_STRONTIUM()); - $this->map(Ids::ELEMENT_39, fn() => VanillaBlocks::ELEMENT_YTTRIUM()); - $this->map(Ids::ELEMENT_4, fn() => VanillaBlocks::ELEMENT_BERYLLIUM()); - $this->map(Ids::ELEMENT_40, fn() => VanillaBlocks::ELEMENT_ZIRCONIUM()); - $this->map(Ids::ELEMENT_41, fn() => VanillaBlocks::ELEMENT_NIOBIUM()); - $this->map(Ids::ELEMENT_42, fn() => VanillaBlocks::ELEMENT_MOLYBDENUM()); - $this->map(Ids::ELEMENT_43, fn() => VanillaBlocks::ELEMENT_TECHNETIUM()); - $this->map(Ids::ELEMENT_44, fn() => VanillaBlocks::ELEMENT_RUTHENIUM()); - $this->map(Ids::ELEMENT_45, fn() => VanillaBlocks::ELEMENT_RHODIUM()); - $this->map(Ids::ELEMENT_46, fn() => VanillaBlocks::ELEMENT_PALLADIUM()); - $this->map(Ids::ELEMENT_47, fn() => VanillaBlocks::ELEMENT_SILVER()); - $this->map(Ids::ELEMENT_48, fn() => VanillaBlocks::ELEMENT_CADMIUM()); - $this->map(Ids::ELEMENT_49, fn() => VanillaBlocks::ELEMENT_INDIUM()); - $this->map(Ids::ELEMENT_5, fn() => VanillaBlocks::ELEMENT_BORON()); - $this->map(Ids::ELEMENT_50, fn() => VanillaBlocks::ELEMENT_TIN()); - $this->map(Ids::ELEMENT_51, fn() => VanillaBlocks::ELEMENT_ANTIMONY()); - $this->map(Ids::ELEMENT_52, fn() => VanillaBlocks::ELEMENT_TELLURIUM()); - $this->map(Ids::ELEMENT_53, fn() => VanillaBlocks::ELEMENT_IODINE()); - $this->map(Ids::ELEMENT_54, fn() => VanillaBlocks::ELEMENT_XENON()); - $this->map(Ids::ELEMENT_55, fn() => VanillaBlocks::ELEMENT_CESIUM()); - $this->map(Ids::ELEMENT_56, fn() => VanillaBlocks::ELEMENT_BARIUM()); - $this->map(Ids::ELEMENT_57, fn() => VanillaBlocks::ELEMENT_LANTHANUM()); - $this->map(Ids::ELEMENT_58, fn() => VanillaBlocks::ELEMENT_CERIUM()); - $this->map(Ids::ELEMENT_59, fn() => VanillaBlocks::ELEMENT_PRASEODYMIUM()); - $this->map(Ids::ELEMENT_6, fn() => VanillaBlocks::ELEMENT_CARBON()); - $this->map(Ids::ELEMENT_60, fn() => VanillaBlocks::ELEMENT_NEODYMIUM()); - $this->map(Ids::ELEMENT_61, fn() => VanillaBlocks::ELEMENT_PROMETHIUM()); - $this->map(Ids::ELEMENT_62, fn() => VanillaBlocks::ELEMENT_SAMARIUM()); - $this->map(Ids::ELEMENT_63, fn() => VanillaBlocks::ELEMENT_EUROPIUM()); - $this->map(Ids::ELEMENT_64, fn() => VanillaBlocks::ELEMENT_GADOLINIUM()); - $this->map(Ids::ELEMENT_65, fn() => VanillaBlocks::ELEMENT_TERBIUM()); - $this->map(Ids::ELEMENT_66, fn() => VanillaBlocks::ELEMENT_DYSPROSIUM()); - $this->map(Ids::ELEMENT_67, fn() => VanillaBlocks::ELEMENT_HOLMIUM()); - $this->map(Ids::ELEMENT_68, fn() => VanillaBlocks::ELEMENT_ERBIUM()); - $this->map(Ids::ELEMENT_69, fn() => VanillaBlocks::ELEMENT_THULIUM()); - $this->map(Ids::ELEMENT_7, fn() => VanillaBlocks::ELEMENT_NITROGEN()); - $this->map(Ids::ELEMENT_70, fn() => VanillaBlocks::ELEMENT_YTTERBIUM()); - $this->map(Ids::ELEMENT_71, fn() => VanillaBlocks::ELEMENT_LUTETIUM()); - $this->map(Ids::ELEMENT_72, fn() => VanillaBlocks::ELEMENT_HAFNIUM()); - $this->map(Ids::ELEMENT_73, fn() => VanillaBlocks::ELEMENT_TANTALUM()); - $this->map(Ids::ELEMENT_74, fn() => VanillaBlocks::ELEMENT_TUNGSTEN()); - $this->map(Ids::ELEMENT_75, fn() => VanillaBlocks::ELEMENT_RHENIUM()); - $this->map(Ids::ELEMENT_76, fn() => VanillaBlocks::ELEMENT_OSMIUM()); - $this->map(Ids::ELEMENT_77, fn() => VanillaBlocks::ELEMENT_IRIDIUM()); - $this->map(Ids::ELEMENT_78, fn() => VanillaBlocks::ELEMENT_PLATINUM()); - $this->map(Ids::ELEMENT_79, fn() => VanillaBlocks::ELEMENT_GOLD()); - $this->map(Ids::ELEMENT_8, fn() => VanillaBlocks::ELEMENT_OXYGEN()); - $this->map(Ids::ELEMENT_80, fn() => VanillaBlocks::ELEMENT_MERCURY()); - $this->map(Ids::ELEMENT_81, fn() => VanillaBlocks::ELEMENT_THALLIUM()); - $this->map(Ids::ELEMENT_82, fn() => VanillaBlocks::ELEMENT_LEAD()); - $this->map(Ids::ELEMENT_83, fn() => VanillaBlocks::ELEMENT_BISMUTH()); - $this->map(Ids::ELEMENT_84, fn() => VanillaBlocks::ELEMENT_POLONIUM()); - $this->map(Ids::ELEMENT_85, fn() => VanillaBlocks::ELEMENT_ASTATINE()); - $this->map(Ids::ELEMENT_86, fn() => VanillaBlocks::ELEMENT_RADON()); - $this->map(Ids::ELEMENT_87, fn() => VanillaBlocks::ELEMENT_FRANCIUM()); - $this->map(Ids::ELEMENT_88, fn() => VanillaBlocks::ELEMENT_RADIUM()); - $this->map(Ids::ELEMENT_89, fn() => VanillaBlocks::ELEMENT_ACTINIUM()); - $this->map(Ids::ELEMENT_9, fn() => VanillaBlocks::ELEMENT_FLUORINE()); - $this->map(Ids::ELEMENT_90, fn() => VanillaBlocks::ELEMENT_THORIUM()); - $this->map(Ids::ELEMENT_91, fn() => VanillaBlocks::ELEMENT_PROTACTINIUM()); - $this->map(Ids::ELEMENT_92, fn() => VanillaBlocks::ELEMENT_URANIUM()); - $this->map(Ids::ELEMENT_93, fn() => VanillaBlocks::ELEMENT_NEPTUNIUM()); - $this->map(Ids::ELEMENT_94, fn() => VanillaBlocks::ELEMENT_PLUTONIUM()); - $this->map(Ids::ELEMENT_95, fn() => VanillaBlocks::ELEMENT_AMERICIUM()); - $this->map(Ids::ELEMENT_96, fn() => VanillaBlocks::ELEMENT_CURIUM()); - $this->map(Ids::ELEMENT_97, fn() => VanillaBlocks::ELEMENT_BERKELIUM()); - $this->map(Ids::ELEMENT_98, fn() => VanillaBlocks::ELEMENT_CALIFORNIUM()); - $this->map(Ids::ELEMENT_99, fn() => VanillaBlocks::ELEMENT_EINSTEINIUM()); - $this->map(Ids::EMERALD_BLOCK, fn() => VanillaBlocks::EMERALD()); - $this->map(Ids::EMERALD_ORE, fn() => VanillaBlocks::EMERALD_ORE()); - $this->map(Ids::ENCHANTING_TABLE, fn() => VanillaBlocks::ENCHANTING_TABLE()); - $this->map(Ids::END_BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::END_STONE_BRICK_STAIRS(), $in)); - $this->map(Ids::END_BRICKS, fn() => VanillaBlocks::END_STONE_BRICKS()); - $this->map(Ids::END_PORTAL_FRAME, function(BlockStateReader $in) : Block{ - return VanillaBlocks::END_PORTAL_FRAME() - ->setEye($in->readBool(BlockStateNames::END_PORTAL_EYE_BIT)) + $this->map(Ids::DRAGON_EGG, fn() => Blocks::DRAGON_EGG()); + $this->map(Ids::DRIED_KELP_BLOCK, fn() => Blocks::DRIED_KELP()); + $this->map(Ids::ELEMENT_0, fn() => Blocks::ELEMENT_ZERO()); + $this->map(Ids::ELEMENT_1, fn() => Blocks::ELEMENT_HYDROGEN()); + $this->map(Ids::ELEMENT_10, fn() => Blocks::ELEMENT_NEON()); + $this->map(Ids::ELEMENT_100, fn() => Blocks::ELEMENT_FERMIUM()); + $this->map(Ids::ELEMENT_101, fn() => Blocks::ELEMENT_MENDELEVIUM()); + $this->map(Ids::ELEMENT_102, fn() => Blocks::ELEMENT_NOBELIUM()); + $this->map(Ids::ELEMENT_103, fn() => Blocks::ELEMENT_LAWRENCIUM()); + $this->map(Ids::ELEMENT_104, fn() => Blocks::ELEMENT_RUTHERFORDIUM()); + $this->map(Ids::ELEMENT_105, fn() => Blocks::ELEMENT_DUBNIUM()); + $this->map(Ids::ELEMENT_106, fn() => Blocks::ELEMENT_SEABORGIUM()); + $this->map(Ids::ELEMENT_107, fn() => Blocks::ELEMENT_BOHRIUM()); + $this->map(Ids::ELEMENT_108, fn() => Blocks::ELEMENT_HASSIUM()); + $this->map(Ids::ELEMENT_109, fn() => Blocks::ELEMENT_MEITNERIUM()); + $this->map(Ids::ELEMENT_11, fn() => Blocks::ELEMENT_SODIUM()); + $this->map(Ids::ELEMENT_110, fn() => Blocks::ELEMENT_DARMSTADTIUM()); + $this->map(Ids::ELEMENT_111, fn() => Blocks::ELEMENT_ROENTGENIUM()); + $this->map(Ids::ELEMENT_112, fn() => Blocks::ELEMENT_COPERNICIUM()); + $this->map(Ids::ELEMENT_113, fn() => Blocks::ELEMENT_NIHONIUM()); + $this->map(Ids::ELEMENT_114, fn() => Blocks::ELEMENT_FLEROVIUM()); + $this->map(Ids::ELEMENT_115, fn() => Blocks::ELEMENT_MOSCOVIUM()); + $this->map(Ids::ELEMENT_116, fn() => Blocks::ELEMENT_LIVERMORIUM()); + $this->map(Ids::ELEMENT_117, fn() => Blocks::ELEMENT_TENNESSINE()); + $this->map(Ids::ELEMENT_118, fn() => Blocks::ELEMENT_OGANESSON()); + $this->map(Ids::ELEMENT_12, fn() => Blocks::ELEMENT_MAGNESIUM()); + $this->map(Ids::ELEMENT_13, fn() => Blocks::ELEMENT_ALUMINUM()); + $this->map(Ids::ELEMENT_14, fn() => Blocks::ELEMENT_SILICON()); + $this->map(Ids::ELEMENT_15, fn() => Blocks::ELEMENT_PHOSPHORUS()); + $this->map(Ids::ELEMENT_16, fn() => Blocks::ELEMENT_SULFUR()); + $this->map(Ids::ELEMENT_17, fn() => Blocks::ELEMENT_CHLORINE()); + $this->map(Ids::ELEMENT_18, fn() => Blocks::ELEMENT_ARGON()); + $this->map(Ids::ELEMENT_19, fn() => Blocks::ELEMENT_POTASSIUM()); + $this->map(Ids::ELEMENT_2, fn() => Blocks::ELEMENT_HELIUM()); + $this->map(Ids::ELEMENT_20, fn() => Blocks::ELEMENT_CALCIUM()); + $this->map(Ids::ELEMENT_21, fn() => Blocks::ELEMENT_SCANDIUM()); + $this->map(Ids::ELEMENT_22, fn() => Blocks::ELEMENT_TITANIUM()); + $this->map(Ids::ELEMENT_23, fn() => Blocks::ELEMENT_VANADIUM()); + $this->map(Ids::ELEMENT_24, fn() => Blocks::ELEMENT_CHROMIUM()); + $this->map(Ids::ELEMENT_25, fn() => Blocks::ELEMENT_MANGANESE()); + $this->map(Ids::ELEMENT_26, fn() => Blocks::ELEMENT_IRON()); + $this->map(Ids::ELEMENT_27, fn() => Blocks::ELEMENT_COBALT()); + $this->map(Ids::ELEMENT_28, fn() => Blocks::ELEMENT_NICKEL()); + $this->map(Ids::ELEMENT_29, fn() => Blocks::ELEMENT_COPPER()); + $this->map(Ids::ELEMENT_3, fn() => Blocks::ELEMENT_LITHIUM()); + $this->map(Ids::ELEMENT_30, fn() => Blocks::ELEMENT_ZINC()); + $this->map(Ids::ELEMENT_31, fn() => Blocks::ELEMENT_GALLIUM()); + $this->map(Ids::ELEMENT_32, fn() => Blocks::ELEMENT_GERMANIUM()); + $this->map(Ids::ELEMENT_33, fn() => Blocks::ELEMENT_ARSENIC()); + $this->map(Ids::ELEMENT_34, fn() => Blocks::ELEMENT_SELENIUM()); + $this->map(Ids::ELEMENT_35, fn() => Blocks::ELEMENT_BROMINE()); + $this->map(Ids::ELEMENT_36, fn() => Blocks::ELEMENT_KRYPTON()); + $this->map(Ids::ELEMENT_37, fn() => Blocks::ELEMENT_RUBIDIUM()); + $this->map(Ids::ELEMENT_38, fn() => Blocks::ELEMENT_STRONTIUM()); + $this->map(Ids::ELEMENT_39, fn() => Blocks::ELEMENT_YTTRIUM()); + $this->map(Ids::ELEMENT_4, fn() => Blocks::ELEMENT_BERYLLIUM()); + $this->map(Ids::ELEMENT_40, fn() => Blocks::ELEMENT_ZIRCONIUM()); + $this->map(Ids::ELEMENT_41, fn() => Blocks::ELEMENT_NIOBIUM()); + $this->map(Ids::ELEMENT_42, fn() => Blocks::ELEMENT_MOLYBDENUM()); + $this->map(Ids::ELEMENT_43, fn() => Blocks::ELEMENT_TECHNETIUM()); + $this->map(Ids::ELEMENT_44, fn() => Blocks::ELEMENT_RUTHENIUM()); + $this->map(Ids::ELEMENT_45, fn() => Blocks::ELEMENT_RHODIUM()); + $this->map(Ids::ELEMENT_46, fn() => Blocks::ELEMENT_PALLADIUM()); + $this->map(Ids::ELEMENT_47, fn() => Blocks::ELEMENT_SILVER()); + $this->map(Ids::ELEMENT_48, fn() => Blocks::ELEMENT_CADMIUM()); + $this->map(Ids::ELEMENT_49, fn() => Blocks::ELEMENT_INDIUM()); + $this->map(Ids::ELEMENT_5, fn() => Blocks::ELEMENT_BORON()); + $this->map(Ids::ELEMENT_50, fn() => Blocks::ELEMENT_TIN()); + $this->map(Ids::ELEMENT_51, fn() => Blocks::ELEMENT_ANTIMONY()); + $this->map(Ids::ELEMENT_52, fn() => Blocks::ELEMENT_TELLURIUM()); + $this->map(Ids::ELEMENT_53, fn() => Blocks::ELEMENT_IODINE()); + $this->map(Ids::ELEMENT_54, fn() => Blocks::ELEMENT_XENON()); + $this->map(Ids::ELEMENT_55, fn() => Blocks::ELEMENT_CESIUM()); + $this->map(Ids::ELEMENT_56, fn() => Blocks::ELEMENT_BARIUM()); + $this->map(Ids::ELEMENT_57, fn() => Blocks::ELEMENT_LANTHANUM()); + $this->map(Ids::ELEMENT_58, fn() => Blocks::ELEMENT_CERIUM()); + $this->map(Ids::ELEMENT_59, fn() => Blocks::ELEMENT_PRASEODYMIUM()); + $this->map(Ids::ELEMENT_6, fn() => Blocks::ELEMENT_CARBON()); + $this->map(Ids::ELEMENT_60, fn() => Blocks::ELEMENT_NEODYMIUM()); + $this->map(Ids::ELEMENT_61, fn() => Blocks::ELEMENT_PROMETHIUM()); + $this->map(Ids::ELEMENT_62, fn() => Blocks::ELEMENT_SAMARIUM()); + $this->map(Ids::ELEMENT_63, fn() => Blocks::ELEMENT_EUROPIUM()); + $this->map(Ids::ELEMENT_64, fn() => Blocks::ELEMENT_GADOLINIUM()); + $this->map(Ids::ELEMENT_65, fn() => Blocks::ELEMENT_TERBIUM()); + $this->map(Ids::ELEMENT_66, fn() => Blocks::ELEMENT_DYSPROSIUM()); + $this->map(Ids::ELEMENT_67, fn() => Blocks::ELEMENT_HOLMIUM()); + $this->map(Ids::ELEMENT_68, fn() => Blocks::ELEMENT_ERBIUM()); + $this->map(Ids::ELEMENT_69, fn() => Blocks::ELEMENT_THULIUM()); + $this->map(Ids::ELEMENT_7, fn() => Blocks::ELEMENT_NITROGEN()); + $this->map(Ids::ELEMENT_70, fn() => Blocks::ELEMENT_YTTERBIUM()); + $this->map(Ids::ELEMENT_71, fn() => Blocks::ELEMENT_LUTETIUM()); + $this->map(Ids::ELEMENT_72, fn() => Blocks::ELEMENT_HAFNIUM()); + $this->map(Ids::ELEMENT_73, fn() => Blocks::ELEMENT_TANTALUM()); + $this->map(Ids::ELEMENT_74, fn() => Blocks::ELEMENT_TUNGSTEN()); + $this->map(Ids::ELEMENT_75, fn() => Blocks::ELEMENT_RHENIUM()); + $this->map(Ids::ELEMENT_76, fn() => Blocks::ELEMENT_OSMIUM()); + $this->map(Ids::ELEMENT_77, fn() => Blocks::ELEMENT_IRIDIUM()); + $this->map(Ids::ELEMENT_78, fn() => Blocks::ELEMENT_PLATINUM()); + $this->map(Ids::ELEMENT_79, fn() => Blocks::ELEMENT_GOLD()); + $this->map(Ids::ELEMENT_8, fn() => Blocks::ELEMENT_OXYGEN()); + $this->map(Ids::ELEMENT_80, fn() => Blocks::ELEMENT_MERCURY()); + $this->map(Ids::ELEMENT_81, fn() => Blocks::ELEMENT_THALLIUM()); + $this->map(Ids::ELEMENT_82, fn() => Blocks::ELEMENT_LEAD()); + $this->map(Ids::ELEMENT_83, fn() => Blocks::ELEMENT_BISMUTH()); + $this->map(Ids::ELEMENT_84, fn() => Blocks::ELEMENT_POLONIUM()); + $this->map(Ids::ELEMENT_85, fn() => Blocks::ELEMENT_ASTATINE()); + $this->map(Ids::ELEMENT_86, fn() => Blocks::ELEMENT_RADON()); + $this->map(Ids::ELEMENT_87, fn() => Blocks::ELEMENT_FRANCIUM()); + $this->map(Ids::ELEMENT_88, fn() => Blocks::ELEMENT_RADIUM()); + $this->map(Ids::ELEMENT_89, fn() => Blocks::ELEMENT_ACTINIUM()); + $this->map(Ids::ELEMENT_9, fn() => Blocks::ELEMENT_FLUORINE()); + $this->map(Ids::ELEMENT_90, fn() => Blocks::ELEMENT_THORIUM()); + $this->map(Ids::ELEMENT_91, fn() => Blocks::ELEMENT_PROTACTINIUM()); + $this->map(Ids::ELEMENT_92, fn() => Blocks::ELEMENT_URANIUM()); + $this->map(Ids::ELEMENT_93, fn() => Blocks::ELEMENT_NEPTUNIUM()); + $this->map(Ids::ELEMENT_94, fn() => Blocks::ELEMENT_PLUTONIUM()); + $this->map(Ids::ELEMENT_95, fn() => Blocks::ELEMENT_AMERICIUM()); + $this->map(Ids::ELEMENT_96, fn() => Blocks::ELEMENT_CURIUM()); + $this->map(Ids::ELEMENT_97, fn() => Blocks::ELEMENT_BERKELIUM()); + $this->map(Ids::ELEMENT_98, fn() => Blocks::ELEMENT_CALIFORNIUM()); + $this->map(Ids::ELEMENT_99, fn() => Blocks::ELEMENT_EINSTEINIUM()); + $this->map(Ids::EMERALD_BLOCK, fn() => Blocks::EMERALD()); + $this->map(Ids::EMERALD_ORE, fn() => Blocks::EMERALD_ORE()); + $this->map(Ids::ENCHANTING_TABLE, fn() => Blocks::ENCHANTING_TABLE()); + $this->map(Ids::END_BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::END_STONE_BRICK_STAIRS(), $in)); + $this->map(Ids::END_BRICKS, fn() => Blocks::END_STONE_BRICKS()); + $this->map(Ids::END_PORTAL_FRAME, function(Reader $in) : Block{ + return Blocks::END_PORTAL_FRAME() + ->setEye($in->readBool(StateNames::END_PORTAL_EYE_BIT)) ->setFacing($in->readLegacyHorizontalFacing()); }); - $this->map(Ids::END_ROD, function(BlockStateReader $in) : Block{ - return VanillaBlocks::END_ROD() + $this->map(Ids::END_ROD, function(Reader $in) : Block{ + return Blocks::END_ROD() ->setFacing($in->readEndRodFacingDirection()); }); - $this->map(Ids::END_STONE, fn() => VanillaBlocks::END_STONE()); - $this->map(Ids::ENDER_CHEST, function(BlockStateReader $in) : Block{ - return VanillaBlocks::ENDER_CHEST() + $this->map(Ids::END_STONE, fn() => Blocks::END_STONE()); + $this->map(Ids::ENDER_CHEST, function(Reader $in) : Block{ + return Blocks::ENDER_CHEST() ->setFacing($in->readHorizontalFacing()); }); - $this->map(Ids::FARMLAND, function(BlockStateReader $in) : Block{ - return VanillaBlocks::FARMLAND() - ->setWetness($in->readBoundedInt(BlockStateNames::MOISTURIZED_AMOUNT, 0, 7)); + $this->map(Ids::FARMLAND, function(Reader $in) : Block{ + return Blocks::FARMLAND() + ->setWetness($in->readBoundedInt(StateNames::MOISTURIZED_AMOUNT, 0, 7)); }); - $this->map(Ids::FENCE, function(BlockStateReader $in) : Block{ - return match($woodName = $in->readString(BlockStateNames::WOOD_TYPE)){ - StringValues::WOOD_TYPE_OAK => VanillaBlocks::OAK_FENCE(), - StringValues::WOOD_TYPE_SPRUCE => VanillaBlocks::SPRUCE_FENCE(), - StringValues::WOOD_TYPE_BIRCH => VanillaBlocks::BIRCH_FENCE(), - StringValues::WOOD_TYPE_JUNGLE => VanillaBlocks::JUNGLE_FENCE(), - StringValues::WOOD_TYPE_ACACIA => VanillaBlocks::ACACIA_FENCE(), - StringValues::WOOD_TYPE_DARK_OAK => VanillaBlocks::DARK_OAK_FENCE(), - default => throw $in->badValueException(BlockStateNames::WOOD_TYPE, $woodName), + $this->map(Ids::FENCE, function(Reader $in) : Block{ + return match($woodName = $in->readString(StateNames::WOOD_TYPE)){ + StringValues::WOOD_TYPE_OAK => Blocks::OAK_FENCE(), + StringValues::WOOD_TYPE_SPRUCE => Blocks::SPRUCE_FENCE(), + StringValues::WOOD_TYPE_BIRCH => Blocks::BIRCH_FENCE(), + StringValues::WOOD_TYPE_JUNGLE => Blocks::JUNGLE_FENCE(), + StringValues::WOOD_TYPE_ACACIA => Blocks::ACACIA_FENCE(), + StringValues::WOOD_TYPE_DARK_OAK => Blocks::DARK_OAK_FENCE(), + default => throw $in->badValueException(StateNames::WOOD_TYPE, $woodName), }; }); - $this->map(Ids::FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::OAK_FENCE_GATE(), $in)); - $this->map(Ids::FIRE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::FIRE() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 15)); + $this->map(Ids::FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::OAK_FENCE_GATE(), $in)); + $this->map(Ids::FIRE, function(Reader $in) : Block{ + return Blocks::FIRE() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 15)); }); - $this->map(Ids::FLETCHING_TABLE, fn() => VanillaBlocks::FLETCHING_TABLE()); + $this->map(Ids::FLETCHING_TABLE, fn() => Blocks::FLETCHING_TABLE()); $this->map(Ids::FLOWER_POT, function() : Block{ //TODO: ignored update_bit (only useful on network to make the client actually render contents, not needed on disk) - return VanillaBlocks::FLOWER_POT(); + return Blocks::FLOWER_POT(); }); - $this->map(Ids::FLOWING_LAVA, fn(BlockStateReader $in) => Helper::decodeFlowingLiquid(VanillaBlocks::LAVA(), $in)); - $this->map(Ids::FLOWING_WATER, fn(BlockStateReader $in) => Helper::decodeFlowingLiquid(VanillaBlocks::WATER(), $in)); - $this->map(Ids::FRAME, function(BlockStateReader $in) : Block{ + $this->map(Ids::FLOWING_LAVA, fn(Reader $in) => Helper::decodeFlowingLiquid(Blocks::LAVA(), $in)); + $this->map(Ids::FLOWING_WATER, fn(Reader $in) => Helper::decodeFlowingLiquid(Blocks::WATER(), $in)); + $this->map(Ids::FRAME, function(Reader $in) : Block{ //TODO: in R13 this can be any side, not just horizontal - return VanillaBlocks::ITEM_FRAME() + return Blocks::ITEM_FRAME() ->setFacing($in->readHorizontalFacing()) - ->setHasMap($in->readBool(BlockStateNames::ITEM_FRAME_MAP_BIT)); + ->setHasMap($in->readBool(StateNames::ITEM_FRAME_MAP_BIT)); }); - $this->map(Ids::FROSTED_ICE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::FROSTED_ICE() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 3)); + $this->map(Ids::FROSTED_ICE, function(Reader $in) : Block{ + return Blocks::FROSTED_ICE() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 3)); }); - $this->map(Ids::FURNACE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::FURNACE() + $this->map(Ids::FURNACE, function(Reader $in) : Block{ + return Blocks::FURNACE() ->setFacing($in->readHorizontalFacing()) ->setLit(false); }); - $this->map(Ids::GLASS, fn() => VanillaBlocks::GLASS()); - $this->map(Ids::GLASS_PANE, fn() => VanillaBlocks::GLASS_PANE()); - $this->map(Ids::GLOWINGOBSIDIAN, fn() => VanillaBlocks::GLOWING_OBSIDIAN()); - $this->map(Ids::GLOWSTONE, fn() => VanillaBlocks::GLOWSTONE()); - $this->map(Ids::GOLD_BLOCK, fn() => VanillaBlocks::GOLD()); - $this->map(Ids::GOLD_ORE, fn() => VanillaBlocks::GOLD_ORE()); - $this->map(Ids::GOLDEN_RAIL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::POWERED_RAIL() - ->setPowered($in->readBool(BlockStateNames::RAIL_DATA_BIT)) - ->setShape($in->readBoundedInt(BlockStateNames::RAIL_DIRECTION, 0, 5)); + $this->map(Ids::GLASS, fn() => Blocks::GLASS()); + $this->map(Ids::GLASS_PANE, fn() => Blocks::GLASS_PANE()); + $this->map(Ids::GLOWINGOBSIDIAN, fn() => Blocks::GLOWING_OBSIDIAN()); + $this->map(Ids::GLOWSTONE, fn() => Blocks::GLOWSTONE()); + $this->map(Ids::GOLD_BLOCK, fn() => Blocks::GOLD()); + $this->map(Ids::GOLD_ORE, fn() => Blocks::GOLD_ORE()); + $this->map(Ids::GOLDEN_RAIL, function(Reader $in) : Block{ + return Blocks::POWERED_RAIL() + ->setPowered($in->readBool(StateNames::RAIL_DATA_BIT)) + ->setShape($in->readBoundedInt(StateNames::RAIL_DIRECTION, 0, 5)); }); - $this->map(Ids::GRANITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::GRANITE_STAIRS(), $in)); - $this->map(Ids::GRASS, fn() => VanillaBlocks::GRASS()); - $this->map(Ids::GRASS_PATH, fn() => VanillaBlocks::GRASS_PATH()); - $this->map(Ids::GRAVEL, fn() => VanillaBlocks::GRAVEL()); - $this->map(Ids::GRAY_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::GRAY_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::GREEN_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::GREEN_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::HARD_GLASS, fn() => VanillaBlocks::HARDENED_GLASS()); - $this->map(Ids::HARD_GLASS_PANE, fn() => VanillaBlocks::HARDENED_GLASS_PANE()); - $this->map(Ids::HARD_STAINED_GLASS, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STAINED_HARDENED_GLASS() + $this->map(Ids::GRANITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::GRANITE_STAIRS(), $in)); + $this->map(Ids::GRASS, fn() => Blocks::GRASS()); + $this->map(Ids::GRASS_PATH, fn() => Blocks::GRASS_PATH()); + $this->map(Ids::GRAVEL, fn() => Blocks::GRAVEL()); + $this->map(Ids::GRAY_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::GRAY_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::GREEN_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::GREEN_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::HARD_GLASS, fn() => Blocks::HARDENED_GLASS()); + $this->map(Ids::HARD_GLASS_PANE, fn() => Blocks::HARDENED_GLASS_PANE()); + $this->map(Ids::HARD_STAINED_GLASS, function(Reader $in) : Block{ + return Blocks::STAINED_HARDENED_GLASS() ->setColor($in->readColor()); }); - $this->map(Ids::HARD_STAINED_GLASS_PANE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STAINED_HARDENED_GLASS_PANE() + $this->map(Ids::HARD_STAINED_GLASS_PANE, function(Reader $in) : Block{ + return Blocks::STAINED_HARDENED_GLASS_PANE() ->setColor($in->readColor()); }); - $this->map(Ids::HARDENED_CLAY, fn() => VanillaBlocks::HARDENED_CLAY()); - $this->map(Ids::HAY_BLOCK, function(BlockStateReader $in) : Block{ + $this->map(Ids::HARDENED_CLAY, fn() => Blocks::HARDENED_CLAY()); + $this->map(Ids::HAY_BLOCK, function(Reader $in) : Block{ //TODO: intentionally ignored "deprecated" blockstate (useless) - return VanillaBlocks::HAY_BALE()->setAxis($in->readPillarAxis()); + return Blocks::HAY_BALE()->setAxis($in->readPillarAxis()); }); - $this->map(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeWeightedPressurePlate(VanillaBlocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), $in)); - $this->map(Ids::HOPPER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::HOPPER() + $this->map(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeWeightedPressurePlate(Blocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), $in)); + $this->map(Ids::HOPPER, function(Reader $in) : Block{ + return Blocks::HOPPER() ->setFacing($in->readFacingWithoutUp()) - ->setPowered($in->readBool(BlockStateNames::TOGGLE_BIT)); + ->setPowered($in->readBool(StateNames::TOGGLE_BIT)); }); - $this->map(Ids::ICE, fn() => VanillaBlocks::ICE()); - $this->map(Ids::INFO_UPDATE, fn() => VanillaBlocks::INFO_UPDATE()); - $this->map(Ids::INFO_UPDATE2, fn() => VanillaBlocks::INFO_UPDATE2()); - $this->map(Ids::INVISIBLEBEDROCK, fn() => VanillaBlocks::INVISIBLE_BEDROCK()); - $this->map(Ids::IRON_BARS, fn() => VanillaBlocks::IRON_BARS()); - $this->map(Ids::IRON_BLOCK, fn() => VanillaBlocks::IRON()); - $this->map(Ids::IRON_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::IRON_DOOR(), $in)); - $this->map(Ids::IRON_ORE, fn() => VanillaBlocks::IRON_ORE()); - $this->map(Ids::IRON_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::IRON_TRAPDOOR(), $in)); - $this->map(Ids::JUKEBOX, fn() => VanillaBlocks::JUKEBOX()); - $this->map(Ids::JUNGLE_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::JUNGLE_BUTTON(), $in)); - $this->map(Ids::JUNGLE_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::JUNGLE_DOOR(), $in)); - $this->map(Ids::JUNGLE_FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::JUNGLE_FENCE_GATE(), $in)); - $this->map(Ids::JUNGLE_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::JUNGLE_PRESSURE_PLATE(), $in)); - $this->map(Ids::JUNGLE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::JUNGLE_STAIRS(), $in)); - $this->map(Ids::JUNGLE_STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::JUNGLE_SIGN(), $in)); - $this->map(Ids::JUNGLE_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::JUNGLE_TRAPDOOR(), $in)); - $this->map(Ids::JUNGLE_WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::JUNGLE_WALL_SIGN(), $in)); - $this->map(Ids::LADDER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LADDER() + $this->map(Ids::ICE, fn() => Blocks::ICE()); + $this->map(Ids::INFO_UPDATE, fn() => Blocks::INFO_UPDATE()); + $this->map(Ids::INFO_UPDATE2, fn() => Blocks::INFO_UPDATE2()); + $this->map(Ids::INVISIBLEBEDROCK, fn() => Blocks::INVISIBLE_BEDROCK()); + $this->map(Ids::IRON_BARS, fn() => Blocks::IRON_BARS()); + $this->map(Ids::IRON_BLOCK, fn() => Blocks::IRON()); + $this->map(Ids::IRON_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::IRON_DOOR(), $in)); + $this->map(Ids::IRON_ORE, fn() => Blocks::IRON_ORE()); + $this->map(Ids::IRON_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::IRON_TRAPDOOR(), $in)); + $this->map(Ids::JUKEBOX, fn() => Blocks::JUKEBOX()); + $this->map(Ids::JUNGLE_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::JUNGLE_BUTTON(), $in)); + $this->map(Ids::JUNGLE_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::JUNGLE_DOOR(), $in)); + $this->map(Ids::JUNGLE_FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::JUNGLE_FENCE_GATE(), $in)); + $this->map(Ids::JUNGLE_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::JUNGLE_PRESSURE_PLATE(), $in)); + $this->map(Ids::JUNGLE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::JUNGLE_STAIRS(), $in)); + $this->map(Ids::JUNGLE_STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::JUNGLE_SIGN(), $in)); + $this->map(Ids::JUNGLE_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::JUNGLE_TRAPDOOR(), $in)); + $this->map(Ids::JUNGLE_WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::JUNGLE_WALL_SIGN(), $in)); + $this->map(Ids::LADDER, function(Reader $in) : Block{ + return Blocks::LADDER() ->setFacing($in->readHorizontalFacing()); }); - $this->map(Ids::LANTERN, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LANTERN() - ->setHanging($in->readBool(BlockStateNames::HANGING)); + $this->map(Ids::LANTERN, function(Reader $in) : Block{ + return Blocks::LANTERN() + ->setHanging($in->readBool(StateNames::HANGING)); }); - $this->map(Ids::LAPIS_BLOCK, fn() => VanillaBlocks::LAPIS_LAZULI()); - $this->map(Ids::LAPIS_ORE, fn() => VanillaBlocks::LAPIS_LAZULI_ORE()); - $this->map(Ids::LAVA, fn(BlockStateReader $in) => Helper::decodeStillLiquid(VanillaBlocks::LAVA(), $in)); - $this->map(Ids::LEAVES, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::OLD_LEAF_TYPE)){ - StringValues::OLD_LEAF_TYPE_BIRCH => VanillaBlocks::BIRCH_LEAVES(), - StringValues::OLD_LEAF_TYPE_JUNGLE => VanillaBlocks::JUNGLE_LEAVES(), - StringValues::OLD_LEAF_TYPE_OAK => VanillaBlocks::OAK_LEAVES(), - StringValues::OLD_LEAF_TYPE_SPRUCE => VanillaBlocks::SPRUCE_LEAVES(), - default => throw $in->badValueException(BlockStateNames::OLD_LEAF_TYPE, $type), + $this->map(Ids::LAPIS_BLOCK, fn() => Blocks::LAPIS_LAZULI()); + $this->map(Ids::LAPIS_ORE, fn() => Blocks::LAPIS_LAZULI_ORE()); + $this->map(Ids::LAVA, fn(Reader $in) => Helper::decodeStillLiquid(Blocks::LAVA(), $in)); + $this->map(Ids::LEAVES, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::OLD_LEAF_TYPE)){ + StringValues::OLD_LEAF_TYPE_BIRCH => Blocks::BIRCH_LEAVES(), + StringValues::OLD_LEAF_TYPE_JUNGLE => Blocks::JUNGLE_LEAVES(), + StringValues::OLD_LEAF_TYPE_OAK => Blocks::OAK_LEAVES(), + StringValues::OLD_LEAF_TYPE_SPRUCE => Blocks::SPRUCE_LEAVES(), + default => throw $in->badValueException(StateNames::OLD_LEAF_TYPE, $type), }) - ->setNoDecay($in->readBool(BlockStateNames::PERSISTENT_BIT)) - ->setCheckDecay($in->readBool(BlockStateNames::UPDATE_BIT)); + ->setNoDecay($in->readBool(StateNames::PERSISTENT_BIT)) + ->setCheckDecay($in->readBool(StateNames::UPDATE_BIT)); }); - $this->map(Ids::LEAVES2, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::NEW_LEAF_TYPE)){ - StringValues::NEW_LEAF_TYPE_ACACIA => VanillaBlocks::ACACIA_LEAVES(), - StringValues::NEW_LEAF_TYPE_DARK_OAK => VanillaBlocks::DARK_OAK_LEAVES(), - default => throw $in->badValueException(BlockStateNames::NEW_LEAF_TYPE, $type), + $this->map(Ids::LEAVES2, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::NEW_LEAF_TYPE)){ + StringValues::NEW_LEAF_TYPE_ACACIA => Blocks::ACACIA_LEAVES(), + StringValues::NEW_LEAF_TYPE_DARK_OAK => Blocks::DARK_OAK_LEAVES(), + default => throw $in->badValueException(StateNames::NEW_LEAF_TYPE, $type), }) - ->setNoDecay($in->readBool(BlockStateNames::PERSISTENT_BIT)) - ->setCheckDecay($in->readBool(BlockStateNames::UPDATE_BIT)); + ->setNoDecay($in->readBool(StateNames::PERSISTENT_BIT)) + ->setCheckDecay($in->readBool(StateNames::UPDATE_BIT)); }); - $this->map(Ids::LECTERN, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LECTERN() + $this->map(Ids::LECTERN, function(Reader $in) : Block{ + return Blocks::LECTERN() ->setFacing($in->readLegacyHorizontalFacing()) - ->setProducingSignal($in->readBool(BlockStateNames::POWERED_BIT)); + ->setProducingSignal($in->readBool(StateNames::POWERED_BIT)); }); - $this->map(Ids::LEVER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LEVER() - ->setActivated($in->readBool(BlockStateNames::OPEN_BIT)) - ->setFacing(match($value = $in->readString(BlockStateNames::LEVER_DIRECTION)){ + $this->map(Ids::LEVER, function(Reader $in) : Block{ + return Blocks::LEVER() + ->setActivated($in->readBool(StateNames::OPEN_BIT)) + ->setFacing(match($value = $in->readString(StateNames::LEVER_DIRECTION)){ StringValues::LEVER_DIRECTION_DOWN_NORTH_SOUTH => LeverFacing::DOWN_AXIS_Z(), StringValues::LEVER_DIRECTION_DOWN_EAST_WEST => LeverFacing::DOWN_AXIS_X(), StringValues::LEVER_DIRECTION_UP_NORTH_SOUTH => LeverFacing::UP_AXIS_Z(), @@ -581,516 +583,516 @@ final class BlockStateDeserializer{ StringValues::LEVER_DIRECTION_SOUTH => LeverFacing::SOUTH(), StringValues::LEVER_DIRECTION_WEST => LeverFacing::WEST(), StringValues::LEVER_DIRECTION_EAST => LeverFacing::EAST(), - default => throw $in->badValueException(BlockStateNames::LEVER_DIRECTION, $value), + default => throw $in->badValueException(StateNames::LEVER_DIRECTION, $value), }); }); - $this->map(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::LIGHT_BLUE_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeWeightedPressurePlate(VanillaBlocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), $in)); - $this->map(Ids::LIME_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::LIME_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::LIT_BLAST_FURNACE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BLAST_FURNACE() + $this->map(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::LIGHT_BLUE_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeWeightedPressurePlate(Blocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), $in)); + $this->map(Ids::LIME_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::LIME_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::LIT_BLAST_FURNACE, function(Reader $in) : Block{ + return Blocks::BLAST_FURNACE() ->setFacing($in->readHorizontalFacing()) ->setLit(true); }); - $this->map(Ids::LIT_FURNACE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::FURNACE() + $this->map(Ids::LIT_FURNACE, function(Reader $in) : Block{ + return Blocks::FURNACE() ->setFacing($in->readHorizontalFacing()) ->setLit(true); }); - $this->map(Ids::LIT_PUMPKIN, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LIT_PUMPKIN() + $this->map(Ids::LIT_PUMPKIN, function(Reader $in) : Block{ + return Blocks::LIT_PUMPKIN() ->setFacing($in->readLegacyHorizontalFacing()); }); $this->map(Ids::LIT_REDSTONE_LAMP, function() : Block{ - return VanillaBlocks::REDSTONE_LAMP() + return Blocks::REDSTONE_LAMP() ->setPowered(true); }); $this->map(Ids::LIT_REDSTONE_ORE, function() : Block{ - return VanillaBlocks::REDSTONE_ORE() + return Blocks::REDSTONE_ORE() ->setLit(true); }); - $this->map(Ids::LIT_SMOKER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::SMOKER() + $this->map(Ids::LIT_SMOKER, function(Reader $in) : Block{ + return Blocks::SMOKER() ->setFacing($in->readHorizontalFacing()) ->setLit(true); }); - $this->map(Ids::LOG, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::OLD_LOG_TYPE)){ - StringValues::OLD_LOG_TYPE_BIRCH => VanillaBlocks::BIRCH_LOG(), - StringValues::OLD_LOG_TYPE_JUNGLE => VanillaBlocks::JUNGLE_LOG(), - StringValues::OLD_LOG_TYPE_OAK => VanillaBlocks::OAK_LOG(), - StringValues::OLD_LOG_TYPE_SPRUCE => VanillaBlocks::SPRUCE_LOG(), - default => throw $in->badValueException(BlockStateNames::OLD_LOG_TYPE, $type), + $this->map(Ids::LOG, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::OLD_LOG_TYPE)){ + StringValues::OLD_LOG_TYPE_BIRCH => Blocks::BIRCH_LOG(), + StringValues::OLD_LOG_TYPE_JUNGLE => Blocks::JUNGLE_LOG(), + StringValues::OLD_LOG_TYPE_OAK => Blocks::OAK_LOG(), + StringValues::OLD_LOG_TYPE_SPRUCE => Blocks::SPRUCE_LOG(), + default => throw $in->badValueException(StateNames::OLD_LOG_TYPE, $type), }) ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::LOG2, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::NEW_LOG_TYPE)){ - StringValues::NEW_LOG_TYPE_ACACIA => VanillaBlocks::ACACIA_LOG(), - StringValues::NEW_LOG_TYPE_DARK_OAK => VanillaBlocks::DARK_OAK_LOG(), - default => throw $in->badValueException(BlockStateNames::NEW_LOG_TYPE, $type), + $this->map(Ids::LOG2, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::NEW_LOG_TYPE)){ + StringValues::NEW_LOG_TYPE_ACACIA => Blocks::ACACIA_LOG(), + StringValues::NEW_LOG_TYPE_DARK_OAK => Blocks::DARK_OAK_LOG(), + default => throw $in->badValueException(StateNames::NEW_LOG_TYPE, $type), }) ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::LOOM, function(BlockStateReader $in) : Block{ - return VanillaBlocks::LOOM() + $this->map(Ids::LOOM, function(Reader $in) : Block{ + return Blocks::LOOM() ->setFacing($in->readLegacyHorizontalFacing()); }); - $this->map(Ids::MAGENTA_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::MAGENTA_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::MAGMA, fn() => VanillaBlocks::MAGMA()); - $this->map(Ids::MELON_BLOCK, fn() => VanillaBlocks::MELON()); - $this->map(Ids::MELON_STEM, fn(BlockStateReader $in) => Helper::decodeStem(VanillaBlocks::MELON_STEM(), $in)); - $this->map(Ids::MOB_SPAWNER, fn() => VanillaBlocks::MONSTER_SPAWNER()); - $this->map(Ids::MONSTER_EGG, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::MONSTER_EGG_STONE_TYPE)){ - StringValues::MONSTER_EGG_STONE_TYPE_CHISELED_STONE_BRICK => VanillaBlocks::INFESTED_CHISELED_STONE_BRICK(), - StringValues::MONSTER_EGG_STONE_TYPE_COBBLESTONE => VanillaBlocks::INFESTED_COBBLESTONE(), - StringValues::MONSTER_EGG_STONE_TYPE_CRACKED_STONE_BRICK => VanillaBlocks::INFESTED_CRACKED_STONE_BRICK(), - StringValues::MONSTER_EGG_STONE_TYPE_MOSSY_STONE_BRICK => VanillaBlocks::INFESTED_MOSSY_STONE_BRICK(), - StringValues::MONSTER_EGG_STONE_TYPE_STONE => VanillaBlocks::INFESTED_STONE(), - StringValues::MONSTER_EGG_STONE_TYPE_STONE_BRICK => VanillaBlocks::INFESTED_STONE_BRICK(), - default => throw $in->badValueException(BlockStateNames::MONSTER_EGG_STONE_TYPE, $type), + $this->map(Ids::MAGENTA_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::MAGENTA_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::MAGMA, fn() => Blocks::MAGMA()); + $this->map(Ids::MELON_BLOCK, fn() => Blocks::MELON()); + $this->map(Ids::MELON_STEM, fn(Reader $in) => Helper::decodeStem(Blocks::MELON_STEM(), $in)); + $this->map(Ids::MOB_SPAWNER, fn() => Blocks::MONSTER_SPAWNER()); + $this->map(Ids::MONSTER_EGG, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::MONSTER_EGG_STONE_TYPE)){ + StringValues::MONSTER_EGG_STONE_TYPE_CHISELED_STONE_BRICK => Blocks::INFESTED_CHISELED_STONE_BRICK(), + StringValues::MONSTER_EGG_STONE_TYPE_COBBLESTONE => Blocks::INFESTED_COBBLESTONE(), + StringValues::MONSTER_EGG_STONE_TYPE_CRACKED_STONE_BRICK => Blocks::INFESTED_CRACKED_STONE_BRICK(), + StringValues::MONSTER_EGG_STONE_TYPE_MOSSY_STONE_BRICK => Blocks::INFESTED_MOSSY_STONE_BRICK(), + StringValues::MONSTER_EGG_STONE_TYPE_STONE => Blocks::INFESTED_STONE(), + StringValues::MONSTER_EGG_STONE_TYPE_STONE_BRICK => Blocks::INFESTED_STONE_BRICK(), + default => throw $in->badValueException(StateNames::MONSTER_EGG_STONE_TYPE, $type), }; }); - $this->map(Ids::MOSSY_COBBLESTONE, fn() => VanillaBlocks::MOSSY_COBBLESTONE()); - $this->map(Ids::MOSSY_COBBLESTONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::MOSSY_COBBLESTONE_STAIRS(), $in)); - $this->map(Ids::MOSSY_STONE_BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::MOSSY_STONE_BRICK_STAIRS(), $in)); - $this->map(Ids::MYCELIUM, fn() => VanillaBlocks::MYCELIUM()); - $this->map(Ids::NETHER_BRICK, fn() => VanillaBlocks::NETHER_BRICKS()); - $this->map(Ids::NETHER_BRICK_FENCE, fn() => VanillaBlocks::NETHER_BRICK_FENCE()); - $this->map(Ids::NETHER_BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::NETHER_BRICK_STAIRS(), $in)); - $this->map(Ids::NETHER_WART, function(BlockStateReader $in) : Block{ - return VanillaBlocks::NETHER_WART() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 3)); + $this->map(Ids::MOSSY_COBBLESTONE, fn() => Blocks::MOSSY_COBBLESTONE()); + $this->map(Ids::MOSSY_COBBLESTONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::MOSSY_COBBLESTONE_STAIRS(), $in)); + $this->map(Ids::MOSSY_STONE_BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::MOSSY_STONE_BRICK_STAIRS(), $in)); + $this->map(Ids::MYCELIUM, fn() => Blocks::MYCELIUM()); + $this->map(Ids::NETHER_BRICK, fn() => Blocks::NETHER_BRICKS()); + $this->map(Ids::NETHER_BRICK_FENCE, fn() => Blocks::NETHER_BRICK_FENCE()); + $this->map(Ids::NETHER_BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::NETHER_BRICK_STAIRS(), $in)); + $this->map(Ids::NETHER_WART, function(Reader $in) : Block{ + return Blocks::NETHER_WART() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 3)); }); - $this->map(Ids::NETHER_WART_BLOCK, fn() => VanillaBlocks::NETHER_WART_BLOCK()); - $this->map(Ids::NETHERRACK, fn() => VanillaBlocks::NETHERRACK()); - $this->map(Ids::NETHERREACTOR, fn() => VanillaBlocks::NETHER_REACTOR_CORE()); - $this->map(Ids::NORMAL_STONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::STONE_STAIRS(), $in)); - $this->map(Ids::NOTEBLOCK, fn() => VanillaBlocks::NOTE_BLOCK()); - $this->map(Ids::OAK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::OAK_STAIRS(), $in)); - $this->map(Ids::OBSIDIAN, fn() => VanillaBlocks::OBSIDIAN()); - $this->map(Ids::ORANGE_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::ORANGE_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::PACKED_ICE, fn() => VanillaBlocks::PACKED_ICE()); - $this->map(Ids::PINK_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::PINK_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::PLANKS, function(BlockStateReader $in) : Block{ - return match($woodName = $in->readString(BlockStateNames::WOOD_TYPE)){ - StringValues::WOOD_TYPE_OAK => VanillaBlocks::OAK_PLANKS(), - StringValues::WOOD_TYPE_SPRUCE => VanillaBlocks::SPRUCE_PLANKS(), - StringValues::WOOD_TYPE_BIRCH => VanillaBlocks::BIRCH_PLANKS(), - StringValues::WOOD_TYPE_JUNGLE => VanillaBlocks::JUNGLE_PLANKS(), - StringValues::WOOD_TYPE_ACACIA => VanillaBlocks::ACACIA_PLANKS(), - StringValues::WOOD_TYPE_DARK_OAK => VanillaBlocks::DARK_OAK_PLANKS(), - default => throw $in->badValueException(BlockStateNames::WOOD_TYPE, $woodName), + $this->map(Ids::NETHER_WART_BLOCK, fn() => Blocks::NETHER_WART_BLOCK()); + $this->map(Ids::NETHERRACK, fn() => Blocks::NETHERRACK()); + $this->map(Ids::NETHERREACTOR, fn() => Blocks::NETHER_REACTOR_CORE()); + $this->map(Ids::NORMAL_STONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::STONE_STAIRS(), $in)); + $this->map(Ids::NOTEBLOCK, fn() => Blocks::NOTE_BLOCK()); + $this->map(Ids::OAK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::OAK_STAIRS(), $in)); + $this->map(Ids::OBSIDIAN, fn() => Blocks::OBSIDIAN()); + $this->map(Ids::ORANGE_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::ORANGE_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::PACKED_ICE, fn() => Blocks::PACKED_ICE()); + $this->map(Ids::PINK_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::PINK_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::PLANKS, function(Reader $in) : Block{ + return match($woodName = $in->readString(StateNames::WOOD_TYPE)){ + StringValues::WOOD_TYPE_OAK => Blocks::OAK_PLANKS(), + StringValues::WOOD_TYPE_SPRUCE => Blocks::SPRUCE_PLANKS(), + StringValues::WOOD_TYPE_BIRCH => Blocks::BIRCH_PLANKS(), + StringValues::WOOD_TYPE_JUNGLE => Blocks::JUNGLE_PLANKS(), + StringValues::WOOD_TYPE_ACACIA => Blocks::ACACIA_PLANKS(), + StringValues::WOOD_TYPE_DARK_OAK => Blocks::DARK_OAK_PLANKS(), + default => throw $in->badValueException(StateNames::WOOD_TYPE, $woodName), }; }); - $this->map(Ids::PODZOL, fn() => VanillaBlocks::PODZOL()); - $this->map(Ids::POLISHED_ANDESITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::POLISHED_ANDESITE_STAIRS(), $in)); - $this->map(Ids::POLISHED_DIORITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::POLISHED_DIORITE_STAIRS(), $in)); - $this->map(Ids::POLISHED_GRANITE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::POLISHED_GRANITE_STAIRS(), $in)); - $this->map(Ids::PORTAL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::NETHER_PORTAL() - ->setAxis(match($value = $in->readString(BlockStateNames::PORTAL_AXIS)){ + $this->map(Ids::PODZOL, fn() => Blocks::PODZOL()); + $this->map(Ids::POLISHED_ANDESITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::POLISHED_ANDESITE_STAIRS(), $in)); + $this->map(Ids::POLISHED_DIORITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::POLISHED_DIORITE_STAIRS(), $in)); + $this->map(Ids::POLISHED_GRANITE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::POLISHED_GRANITE_STAIRS(), $in)); + $this->map(Ids::PORTAL, function(Reader $in) : Block{ + return Blocks::NETHER_PORTAL() + ->setAxis(match($value = $in->readString(StateNames::PORTAL_AXIS)){ StringValues::PORTAL_AXIS_UNKNOWN => Axis::X, StringValues::PORTAL_AXIS_X => Axis::X, StringValues::PORTAL_AXIS_Z => Axis::Z, - default => throw $in->badValueException(BlockStateNames::PORTAL_AXIS, $value), + default => throw $in->badValueException(StateNames::PORTAL_AXIS, $value), }); }); - $this->map(Ids::POTATOES, fn(BlockStateReader $in) => Helper::decodeCrops(VanillaBlocks::POTATOES(), $in)); - $this->map(Ids::POWERED_COMPARATOR, fn(BlockStateReader $in) => Helper::decodeComparator(VanillaBlocks::REDSTONE_COMPARATOR(), $in)); - $this->map(Ids::POWERED_REPEATER, fn(BlockStateReader $in) => Helper::decodeRepeater(VanillaBlocks::REDSTONE_REPEATER(), $in) + $this->map(Ids::POTATOES, fn(Reader $in) => Helper::decodeCrops(Blocks::POTATOES(), $in)); + $this->map(Ids::POWERED_COMPARATOR, fn(Reader $in) => Helper::decodeComparator(Blocks::REDSTONE_COMPARATOR(), $in)); + $this->map(Ids::POWERED_REPEATER, fn(Reader $in) => Helper::decodeRepeater(Blocks::REDSTONE_REPEATER(), $in) ->setPowered(true)); - $this->map(Ids::PRISMARINE, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::PRISMARINE_BLOCK_TYPE)){ - StringValues::PRISMARINE_BLOCK_TYPE_BRICKS => VanillaBlocks::PRISMARINE_BRICKS(), - StringValues::PRISMARINE_BLOCK_TYPE_DARK => VanillaBlocks::DARK_PRISMARINE(), - StringValues::PRISMARINE_BLOCK_TYPE_DEFAULT => VanillaBlocks::PRISMARINE(), - default => throw $in->badValueException(BlockStateNames::PRISMARINE_BLOCK_TYPE, $type), + $this->map(Ids::PRISMARINE, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::PRISMARINE_BLOCK_TYPE)){ + StringValues::PRISMARINE_BLOCK_TYPE_BRICKS => Blocks::PRISMARINE_BRICKS(), + StringValues::PRISMARINE_BLOCK_TYPE_DARK => Blocks::DARK_PRISMARINE(), + StringValues::PRISMARINE_BLOCK_TYPE_DEFAULT => Blocks::PRISMARINE(), + default => throw $in->badValueException(StateNames::PRISMARINE_BLOCK_TYPE, $type), }; }); - $this->map(Ids::PRISMARINE_BRICKS_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::PRISMARINE_BRICKS_STAIRS(), $in)); - $this->map(Ids::PRISMARINE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::PRISMARINE_STAIRS(), $in)); + $this->map(Ids::PRISMARINE_BRICKS_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::PRISMARINE_BRICKS_STAIRS(), $in)); + $this->map(Ids::PRISMARINE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::PRISMARINE_STAIRS(), $in)); $this->map(Ids::PUMPKIN, function() : Block{ //TODO: intentionally ignored "direction" property (obsolete) - return VanillaBlocks::PUMPKIN(); + return Blocks::PUMPKIN(); }); - $this->map(Ids::PUMPKIN_STEM, fn(BlockStateReader $in) => Helper::decodeStem(VanillaBlocks::PUMPKIN_STEM(), $in)); - $this->map(Ids::PURPLE_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::PURPLE_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::PURPUR_BLOCK, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::CHISEL_TYPE)){ + $this->map(Ids::PUMPKIN_STEM, fn(Reader $in) => Helper::decodeStem(Blocks::PUMPKIN_STEM(), $in)); + $this->map(Ids::PURPLE_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::PURPLE_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::PURPUR_BLOCK, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::CHISEL_TYPE)){ StringValues::CHISEL_TYPE_CHISELED, //TODO: bug in MCPE StringValues::CHISEL_TYPE_SMOOTH, //TODO: bug in MCPE - StringValues::CHISEL_TYPE_DEFAULT => VanillaBlocks::PURPUR(), //TODO: axis intentionally ignored (useless) - StringValues::CHISEL_TYPE_LINES => VanillaBlocks::PURPUR_PILLAR()->setAxis($in->readPillarAxis()), - default => throw $in->badValueException(BlockStateNames::CHISEL_TYPE, $type), + StringValues::CHISEL_TYPE_DEFAULT => Blocks::PURPUR(), //TODO: axis intentionally ignored (useless) + StringValues::CHISEL_TYPE_LINES => Blocks::PURPUR_PILLAR()->setAxis($in->readPillarAxis()), + default => throw $in->badValueException(StateNames::CHISEL_TYPE, $type), }; }); - $this->map(Ids::PURPUR_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::PURPUR_STAIRS(), $in)); - $this->map(Ids::QUARTZ_BLOCK, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::CHISEL_TYPE)){ - StringValues::CHISEL_TYPE_CHISELED => VanillaBlocks::CHISELED_QUARTZ()->setAxis($in->readPillarAxis()), - StringValues::CHISEL_TYPE_DEFAULT => VanillaBlocks::QUARTZ(), //TODO: axis intentionally ignored (useless) - StringValues::CHISEL_TYPE_LINES => VanillaBlocks::QUARTZ_PILLAR()->setAxis($in->readPillarAxis()), - StringValues::CHISEL_TYPE_SMOOTH => VanillaBlocks::SMOOTH_QUARTZ(), //TODO: axis intentionally ignored (useless) - default => throw $in->badValueException(BlockStateNames::CHISEL_TYPE, $type), + $this->map(Ids::PURPUR_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::PURPUR_STAIRS(), $in)); + $this->map(Ids::QUARTZ_BLOCK, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::CHISEL_TYPE)){ + StringValues::CHISEL_TYPE_CHISELED => Blocks::CHISELED_QUARTZ()->setAxis($in->readPillarAxis()), + StringValues::CHISEL_TYPE_DEFAULT => Blocks::QUARTZ(), //TODO: axis intentionally ignored (useless) + StringValues::CHISEL_TYPE_LINES => Blocks::QUARTZ_PILLAR()->setAxis($in->readPillarAxis()), + StringValues::CHISEL_TYPE_SMOOTH => Blocks::SMOOTH_QUARTZ(), //TODO: axis intentionally ignored (useless) + default => throw $in->badValueException(StateNames::CHISEL_TYPE, $type), }; }); - $this->map(Ids::QUARTZ_ORE, fn() => VanillaBlocks::NETHER_QUARTZ_ORE()); - $this->map(Ids::QUARTZ_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::QUARTZ_STAIRS(), $in)); - $this->map(Ids::RAIL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::RAIL() - ->setShape($in->readBoundedInt(BlockStateNames::RAIL_DIRECTION, 0, 9)); + $this->map(Ids::QUARTZ_ORE, fn() => Blocks::NETHER_QUARTZ_ORE()); + $this->map(Ids::QUARTZ_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::QUARTZ_STAIRS(), $in)); + $this->map(Ids::RAIL, function(Reader $in) : Block{ + return Blocks::RAIL() + ->setShape($in->readBoundedInt(StateNames::RAIL_DIRECTION, 0, 9)); }); - $this->map(Ids::RED_FLOWER, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::FLOWER_TYPE)){ - StringValues::FLOWER_TYPE_ALLIUM => VanillaBlocks::ALLIUM(), - StringValues::FLOWER_TYPE_CORNFLOWER => VanillaBlocks::CORNFLOWER(), - StringValues::FLOWER_TYPE_HOUSTONIA => VanillaBlocks::AZURE_BLUET(), //wtf ??? - StringValues::FLOWER_TYPE_LILY_OF_THE_VALLEY => VanillaBlocks::LILY_OF_THE_VALLEY(), - StringValues::FLOWER_TYPE_ORCHID => VanillaBlocks::BLUE_ORCHID(), - StringValues::FLOWER_TYPE_OXEYE => VanillaBlocks::OXEYE_DAISY(), - StringValues::FLOWER_TYPE_POPPY => VanillaBlocks::POPPY(), - StringValues::FLOWER_TYPE_TULIP_ORANGE => VanillaBlocks::ORANGE_TULIP(), - StringValues::FLOWER_TYPE_TULIP_PINK => VanillaBlocks::PINK_TULIP(), - StringValues::FLOWER_TYPE_TULIP_RED => VanillaBlocks::RED_TULIP(), - StringValues::FLOWER_TYPE_TULIP_WHITE => VanillaBlocks::WHITE_TULIP(), - default => throw $in->badValueException(BlockStateNames::FLOWER_TYPE, $type), + $this->map(Ids::RED_FLOWER, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::FLOWER_TYPE)){ + StringValues::FLOWER_TYPE_ALLIUM => Blocks::ALLIUM(), + StringValues::FLOWER_TYPE_CORNFLOWER => Blocks::CORNFLOWER(), + StringValues::FLOWER_TYPE_HOUSTONIA => Blocks::AZURE_BLUET(), //wtf ??? + StringValues::FLOWER_TYPE_LILY_OF_THE_VALLEY => Blocks::LILY_OF_THE_VALLEY(), + StringValues::FLOWER_TYPE_ORCHID => Blocks::BLUE_ORCHID(), + StringValues::FLOWER_TYPE_OXEYE => Blocks::OXEYE_DAISY(), + StringValues::FLOWER_TYPE_POPPY => Blocks::POPPY(), + StringValues::FLOWER_TYPE_TULIP_ORANGE => Blocks::ORANGE_TULIP(), + StringValues::FLOWER_TYPE_TULIP_PINK => Blocks::PINK_TULIP(), + StringValues::FLOWER_TYPE_TULIP_RED => Blocks::RED_TULIP(), + StringValues::FLOWER_TYPE_TULIP_WHITE => Blocks::WHITE_TULIP(), + default => throw $in->badValueException(StateNames::FLOWER_TYPE, $type), }; }); - $this->map(Ids::RED_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::RED_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::RED_MUSHROOM, fn() => VanillaBlocks::RED_MUSHROOM()); - $this->map(Ids::RED_MUSHROOM_BLOCK, fn(BlockStateReader $in) => Helper::decodeMushroomBlock(VanillaBlocks::RED_MUSHROOM_BLOCK(), $in)); - $this->map(Ids::RED_NETHER_BRICK, fn() => VanillaBlocks::RED_NETHER_BRICKS()); - $this->map(Ids::RED_NETHER_BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::RED_NETHER_BRICK_STAIRS(), $in)); - $this->map(Ids::RED_SANDSTONE, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::SAND_STONE_TYPE)){ - StringValues::SAND_STONE_TYPE_CUT => VanillaBlocks::CUT_RED_SANDSTONE(), - StringValues::SAND_STONE_TYPE_DEFAULT => VanillaBlocks::RED_SANDSTONE(), - StringValues::SAND_STONE_TYPE_HEIROGLYPHS => VanillaBlocks::CHISELED_RED_SANDSTONE(), - StringValues::SAND_STONE_TYPE_SMOOTH => VanillaBlocks::SMOOTH_RED_SANDSTONE(), - default => throw $in->badValueException(BlockStateNames::SAND_STONE_TYPE, $type), + $this->map(Ids::RED_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::RED_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::RED_MUSHROOM, fn() => Blocks::RED_MUSHROOM()); + $this->map(Ids::RED_MUSHROOM_BLOCK, fn(Reader $in) => Helper::decodeMushroomBlock(Blocks::RED_MUSHROOM_BLOCK(), $in)); + $this->map(Ids::RED_NETHER_BRICK, fn() => Blocks::RED_NETHER_BRICKS()); + $this->map(Ids::RED_NETHER_BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::RED_NETHER_BRICK_STAIRS(), $in)); + $this->map(Ids::RED_SANDSTONE, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::SAND_STONE_TYPE)){ + StringValues::SAND_STONE_TYPE_CUT => Blocks::CUT_RED_SANDSTONE(), + StringValues::SAND_STONE_TYPE_DEFAULT => Blocks::RED_SANDSTONE(), + StringValues::SAND_STONE_TYPE_HEIROGLYPHS => Blocks::CHISELED_RED_SANDSTONE(), + StringValues::SAND_STONE_TYPE_SMOOTH => Blocks::SMOOTH_RED_SANDSTONE(), + default => throw $in->badValueException(StateNames::SAND_STONE_TYPE, $type), }; }); - $this->map(Ids::RED_SANDSTONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::RED_SANDSTONE_STAIRS(), $in)); - $this->map(Ids::REDSTONE_BLOCK, fn() => VanillaBlocks::REDSTONE()); + $this->map(Ids::RED_SANDSTONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::RED_SANDSTONE_STAIRS(), $in)); + $this->map(Ids::REDSTONE_BLOCK, fn() => Blocks::REDSTONE()); $this->map(Ids::REDSTONE_LAMP, function() : Block{ - return VanillaBlocks::REDSTONE_LAMP() + return Blocks::REDSTONE_LAMP() ->setPowered(false); }); $this->map(Ids::REDSTONE_ORE, function() : Block{ - return VanillaBlocks::REDSTONE_ORE() + return Blocks::REDSTONE_ORE() ->setLit(false); }); - $this->map(Ids::REDSTONE_TORCH, function(BlockStateReader $in) : Block{ - return VanillaBlocks::REDSTONE_TORCH() + $this->map(Ids::REDSTONE_TORCH, function(Reader $in) : Block{ + return Blocks::REDSTONE_TORCH() ->setFacing($in->readTorchFacing()) ->setLit(true); }); - $this->map(Ids::REDSTONE_WIRE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::REDSTONE_WIRE() - ->setOutputSignalStrength($in->readBoundedInt(BlockStateNames::REDSTONE_SIGNAL, 0, 15)); + $this->map(Ids::REDSTONE_WIRE, function(Reader $in) : Block{ + return Blocks::REDSTONE_WIRE() + ->setOutputSignalStrength($in->readBoundedInt(StateNames::REDSTONE_SIGNAL, 0, 15)); }); - $this->map(Ids::REEDS, function(BlockStateReader $in) : Block{ - return VanillaBlocks::SUGARCANE() - ->setAge($in->readBoundedInt(BlockStateNames::AGE, 0, 15)); + $this->map(Ids::REEDS, function(Reader $in) : Block{ + return Blocks::SUGARCANE() + ->setAge($in->readBoundedInt(StateNames::AGE, 0, 15)); }); - $this->map(Ids::RESERVED6, fn() => VanillaBlocks::RESERVED6()); - $this->map(Ids::SAND, function(BlockStateReader $in) : Block{ - return match($value = $in->readString(BlockStateNames::SAND_TYPE)){ - StringValues::SAND_TYPE_NORMAL => VanillaBlocks::SAND(), - StringValues::SAND_TYPE_RED => VanillaBlocks::RED_SAND(), - default => throw $in->badValueException(BlockStateNames::SAND_TYPE, $value), + $this->map(Ids::RESERVED6, fn() => Blocks::RESERVED6()); + $this->map(Ids::SAND, function(Reader $in) : Block{ + return match($value = $in->readString(StateNames::SAND_TYPE)){ + StringValues::SAND_TYPE_NORMAL => Blocks::SAND(), + StringValues::SAND_TYPE_RED => Blocks::RED_SAND(), + default => throw $in->badValueException(StateNames::SAND_TYPE, $value), }; }); - $this->map(Ids::SANDSTONE, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::SAND_STONE_TYPE)){ - StringValues::SAND_STONE_TYPE_CUT => VanillaBlocks::CUT_SANDSTONE(), - StringValues::SAND_STONE_TYPE_DEFAULT => VanillaBlocks::SANDSTONE(), - StringValues::SAND_STONE_TYPE_HEIROGLYPHS => VanillaBlocks::CHISELED_SANDSTONE(), - StringValues::SAND_STONE_TYPE_SMOOTH => VanillaBlocks::SMOOTH_SANDSTONE(), - default => throw $in->badValueException(BlockStateNames::SAND_STONE_TYPE, $type), + $this->map(Ids::SANDSTONE, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::SAND_STONE_TYPE)){ + StringValues::SAND_STONE_TYPE_CUT => Blocks::CUT_SANDSTONE(), + StringValues::SAND_STONE_TYPE_DEFAULT => Blocks::SANDSTONE(), + StringValues::SAND_STONE_TYPE_HEIROGLYPHS => Blocks::CHISELED_SANDSTONE(), + StringValues::SAND_STONE_TYPE_SMOOTH => Blocks::SMOOTH_SANDSTONE(), + default => throw $in->badValueException(StateNames::SAND_STONE_TYPE, $type), }; }); - $this->map(Ids::SANDSTONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::SANDSTONE_STAIRS(), $in)); - $this->map(Ids::SAPLING, function(BlockStateReader $in) : Block{ - return (match($type = $in->readString(BlockStateNames::SAPLING_TYPE)){ - StringValues::SAPLING_TYPE_ACACIA => VanillaBlocks::ACACIA_SAPLING(), - StringValues::SAPLING_TYPE_BIRCH => VanillaBlocks::BIRCH_SAPLING(), - StringValues::SAPLING_TYPE_DARK_OAK => VanillaBlocks::DARK_OAK_SAPLING(), - StringValues::SAPLING_TYPE_JUNGLE => VanillaBlocks::JUNGLE_SAPLING(), - StringValues::SAPLING_TYPE_OAK => VanillaBlocks::OAK_SAPLING(), - StringValues::SAPLING_TYPE_SPRUCE => VanillaBlocks::SPRUCE_SAPLING(), - default => throw $in->badValueException(BlockStateNames::SAPLING_TYPE, $type), + $this->map(Ids::SANDSTONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::SANDSTONE_STAIRS(), $in)); + $this->map(Ids::SAPLING, function(Reader $in) : Block{ + return (match($type = $in->readString(StateNames::SAPLING_TYPE)){ + StringValues::SAPLING_TYPE_ACACIA => Blocks::ACACIA_SAPLING(), + StringValues::SAPLING_TYPE_BIRCH => Blocks::BIRCH_SAPLING(), + StringValues::SAPLING_TYPE_DARK_OAK => Blocks::DARK_OAK_SAPLING(), + StringValues::SAPLING_TYPE_JUNGLE => Blocks::JUNGLE_SAPLING(), + StringValues::SAPLING_TYPE_OAK => Blocks::OAK_SAPLING(), + StringValues::SAPLING_TYPE_SPRUCE => Blocks::SPRUCE_SAPLING(), + default => throw $in->badValueException(StateNames::SAPLING_TYPE, $type), }) - ->setReady($in->readBool(BlockStateNames::AGE_BIT)); + ->setReady($in->readBool(StateNames::AGE_BIT)); }); - $this->map(Ids::SEALANTERN, fn() => VanillaBlocks::SEA_LANTERN()); - $this->map(Ids::SEA_PICKLE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::SEA_PICKLE() - ->setCount($in->readBoundedInt(BlockStateNames::CLUSTER_COUNT, 0, 3) + 1) - ->setUnderwater(!$in->readBool(BlockStateNames::DEAD_BIT)); + $this->map(Ids::SEALANTERN, fn() => Blocks::SEA_LANTERN()); + $this->map(Ids::SEA_PICKLE, function(Reader $in) : Block{ + return Blocks::SEA_PICKLE() + ->setCount($in->readBoundedInt(StateNames::CLUSTER_COUNT, 0, 3) + 1) + ->setUnderwater(!$in->readBool(StateNames::DEAD_BIT)); }); - $this->map(Ids::SHULKER_BOX, function(BlockStateReader $in) : Block{ - return VanillaBlocks::DYED_SHULKER_BOX() + $this->map(Ids::SHULKER_BOX, function(Reader $in) : Block{ + return Blocks::DYED_SHULKER_BOX() ->setColor($in->readColor()); }); - $this->map(Ids::SILVER_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::LIGHT_GRAY_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::SKULL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::MOB_HEAD() + $this->map(Ids::SILVER_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::LIGHT_GRAY_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::SKULL, function(Reader $in) : Block{ + return Blocks::MOB_HEAD() ->setFacing($in->readFacingWithoutDown()) - ->setNoDrops($in->readBool(BlockStateNames::NO_DROP_BIT)); + ->setNoDrops($in->readBool(StateNames::NO_DROP_BIT)); }); - $this->map(Ids::SLIME, fn() => VanillaBlocks::SLIME()); - $this->map(Ids::SMOKER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::SMOKER() + $this->map(Ids::SLIME, fn() => Blocks::SLIME()); + $this->map(Ids::SMOKER, function(Reader $in) : Block{ + return Blocks::SMOKER() ->setFacing($in->readHorizontalFacing()) ->setLit(false); }); - $this->map(Ids::SMOOTH_QUARTZ_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::SMOOTH_QUARTZ_STAIRS(), $in)); - $this->map(Ids::SMOOTH_RED_SANDSTONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::SMOOTH_RED_SANDSTONE_STAIRS(), $in)); - $this->map(Ids::SMOOTH_SANDSTONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::SMOOTH_SANDSTONE_STAIRS(), $in)); - $this->map(Ids::SMOOTH_STONE, fn() => VanillaBlocks::SMOOTH_STONE()); - $this->map(Ids::SNOW, fn() => VanillaBlocks::SNOW()); - $this->map(Ids::SNOW_LAYER, function(BlockStateReader $in) : Block{ + $this->map(Ids::SMOOTH_QUARTZ_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::SMOOTH_QUARTZ_STAIRS(), $in)); + $this->map(Ids::SMOOTH_RED_SANDSTONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::SMOOTH_RED_SANDSTONE_STAIRS(), $in)); + $this->map(Ids::SMOOTH_SANDSTONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::SMOOTH_SANDSTONE_STAIRS(), $in)); + $this->map(Ids::SMOOTH_STONE, fn() => Blocks::SMOOTH_STONE()); + $this->map(Ids::SNOW, fn() => Blocks::SNOW()); + $this->map(Ids::SNOW_LAYER, function(Reader $in) : Block{ //TODO: intentionally ignored covered_bit property (appears useless and we don't track it) - return VanillaBlocks::SNOW_LAYER()->setLayers($in->readBoundedInt(BlockStateNames::HEIGHT, 0, 7) + 1); + return Blocks::SNOW_LAYER()->setLayers($in->readBoundedInt(StateNames::HEIGHT, 0, 7) + 1); }); - $this->map(Ids::SOUL_SAND, fn() => VanillaBlocks::SOUL_SAND()); - $this->map(Ids::SPONGE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::SPONGE()->setWet(match($type = $in->readString(BlockStateNames::SPONGE_TYPE)){ + $this->map(Ids::SOUL_SAND, fn() => Blocks::SOUL_SAND()); + $this->map(Ids::SPONGE, function(Reader $in) : Block{ + return Blocks::SPONGE()->setWet(match($type = $in->readString(StateNames::SPONGE_TYPE)){ StringValues::SPONGE_TYPE_DRY => false, StringValues::SPONGE_TYPE_WET => true, - default => throw $in->badValueException(BlockStateNames::SPONGE_TYPE, $type), + default => throw $in->badValueException(StateNames::SPONGE_TYPE, $type), }); }); - $this->map(Ids::SPRUCE_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::SPRUCE_BUTTON(), $in)); - $this->map(Ids::SPRUCE_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::SPRUCE_DOOR(), $in)); - $this->map(Ids::SPRUCE_FENCE_GATE, fn(BlockStateReader $in) => Helper::decodeFenceGate(VanillaBlocks::SPRUCE_FENCE_GATE(), $in)); - $this->map(Ids::SPRUCE_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::SPRUCE_PRESSURE_PLATE(), $in)); - $this->map(Ids::SPRUCE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::SPRUCE_STAIRS(), $in)); - $this->map(Ids::SPRUCE_STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::SPRUCE_SIGN(), $in)); - $this->map(Ids::SPRUCE_TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::SPRUCE_TRAPDOOR(), $in)); - $this->map(Ids::SPRUCE_WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::SPRUCE_WALL_SIGN(), $in)); - $this->map(Ids::STAINED_GLASS, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STAINED_GLASS() + $this->map(Ids::SPRUCE_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::SPRUCE_BUTTON(), $in)); + $this->map(Ids::SPRUCE_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::SPRUCE_DOOR(), $in)); + $this->map(Ids::SPRUCE_FENCE_GATE, fn(Reader $in) => Helper::decodeFenceGate(Blocks::SPRUCE_FENCE_GATE(), $in)); + $this->map(Ids::SPRUCE_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::SPRUCE_PRESSURE_PLATE(), $in)); + $this->map(Ids::SPRUCE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::SPRUCE_STAIRS(), $in)); + $this->map(Ids::SPRUCE_STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::SPRUCE_SIGN(), $in)); + $this->map(Ids::SPRUCE_TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::SPRUCE_TRAPDOOR(), $in)); + $this->map(Ids::SPRUCE_WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::SPRUCE_WALL_SIGN(), $in)); + $this->map(Ids::STAINED_GLASS, function(Reader $in) : Block{ + return Blocks::STAINED_GLASS() ->setColor($in->readColor()); }); - $this->map(Ids::STAINED_GLASS_PANE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STAINED_GLASS_PANE() + $this->map(Ids::STAINED_GLASS_PANE, function(Reader $in) : Block{ + return Blocks::STAINED_GLASS_PANE() ->setColor($in->readColor()); }); - $this->map(Ids::STAINED_HARDENED_CLAY, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STAINED_CLAY() + $this->map(Ids::STAINED_HARDENED_CLAY, function(Reader $in) : Block{ + return Blocks::STAINED_CLAY() ->setColor($in->readColor()); }); - $this->map(Ids::STANDING_BANNER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::BANNER() - ->setRotation($in->readBoundedInt(BlockStateNames::GROUND_SIGN_DIRECTION, 0, 15)); + $this->map(Ids::STANDING_BANNER, function(Reader $in) : Block{ + return Blocks::BANNER() + ->setRotation($in->readBoundedInt(StateNames::GROUND_SIGN_DIRECTION, 0, 15)); }); - $this->map(Ids::STANDING_SIGN, fn(BlockStateReader $in) => Helper::decodeFloorSign(VanillaBlocks::OAK_SIGN(), $in)); - $this->map(Ids::STONE, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::STONE_TYPE)){ - StringValues::STONE_TYPE_ANDESITE => VanillaBlocks::ANDESITE(), - StringValues::STONE_TYPE_ANDESITE_SMOOTH => VanillaBlocks::POLISHED_ANDESITE(), - StringValues::STONE_TYPE_DIORITE => VanillaBlocks::DIORITE(), - StringValues::STONE_TYPE_DIORITE_SMOOTH => VanillaBlocks::POLISHED_DIORITE(), - StringValues::STONE_TYPE_GRANITE => VanillaBlocks::GRANITE(), - StringValues::STONE_TYPE_GRANITE_SMOOTH => VanillaBlocks::POLISHED_GRANITE(), - StringValues::STONE_TYPE_STONE => VanillaBlocks::STONE(), - default => throw $in->badValueException(BlockStateNames::STONE_TYPE, $type), + $this->map(Ids::STANDING_SIGN, fn(Reader $in) => Helper::decodeFloorSign(Blocks::OAK_SIGN(), $in)); + $this->map(Ids::STONE, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::STONE_TYPE)){ + StringValues::STONE_TYPE_ANDESITE => Blocks::ANDESITE(), + StringValues::STONE_TYPE_ANDESITE_SMOOTH => Blocks::POLISHED_ANDESITE(), + StringValues::STONE_TYPE_DIORITE => Blocks::DIORITE(), + StringValues::STONE_TYPE_DIORITE_SMOOTH => Blocks::POLISHED_DIORITE(), + StringValues::STONE_TYPE_GRANITE => Blocks::GRANITE(), + StringValues::STONE_TYPE_GRANITE_SMOOTH => Blocks::POLISHED_GRANITE(), + StringValues::STONE_TYPE_STONE => Blocks::STONE(), + default => throw $in->badValueException(StateNames::STONE_TYPE, $type), }; }); - $this->map(Ids::STONE_BRICK_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::STONE_BRICK_STAIRS(), $in)); - $this->map(Ids::STONE_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::STONE_BUTTON(), $in)); - $this->map(Ids::STONE_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::STONE_PRESSURE_PLATE(), $in)); - $this->map(Ids::STONE_SLAB, fn(BlockStateReader $in) => Helper::mapStoneSlab1Type($in)->setSlabType($in->readSlabPosition())); - $this->map(Ids::STONE_SLAB2, fn(BlockStateReader $in) => Helper::mapStoneSlab2Type($in)->setSlabType($in->readSlabPosition())); - $this->map(Ids::STONE_SLAB3, fn(BlockStateReader $in) => Helper::mapStoneSlab3Type($in)->setSlabType($in->readSlabPosition())); - $this->map(Ids::STONE_SLAB4, fn(BlockStateReader $in) => Helper::mapStoneSlab4Type($in)->setSlabType($in->readSlabPosition())); - $this->map(Ids::STONE_STAIRS, fn(BlockStateReader $in) => Helper::decodeStairs(VanillaBlocks::COBBLESTONE_STAIRS(), $in)); - $this->map(Ids::STONEBRICK, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::STONE_BRICK_TYPE)){ + $this->map(Ids::STONE_BRICK_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::STONE_BRICK_STAIRS(), $in)); + $this->map(Ids::STONE_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::STONE_BUTTON(), $in)); + $this->map(Ids::STONE_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::STONE_PRESSURE_PLATE(), $in)); + $this->map(Ids::STONE_SLAB, fn(Reader $in) => Helper::mapStoneSlab1Type($in)->setSlabType($in->readSlabPosition())); + $this->map(Ids::STONE_SLAB2, fn(Reader $in) => Helper::mapStoneSlab2Type($in)->setSlabType($in->readSlabPosition())); + $this->map(Ids::STONE_SLAB3, fn(Reader $in) => Helper::mapStoneSlab3Type($in)->setSlabType($in->readSlabPosition())); + $this->map(Ids::STONE_SLAB4, fn(Reader $in) => Helper::mapStoneSlab4Type($in)->setSlabType($in->readSlabPosition())); + $this->map(Ids::STONE_STAIRS, fn(Reader $in) => Helper::decodeStairs(Blocks::COBBLESTONE_STAIRS(), $in)); + $this->map(Ids::STONEBRICK, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::STONE_BRICK_TYPE)){ StringValues::STONE_BRICK_TYPE_SMOOTH, //TODO: bug in vanilla - StringValues::STONE_BRICK_TYPE_DEFAULT => VanillaBlocks::STONE_BRICKS(), - StringValues::STONE_BRICK_TYPE_CHISELED => VanillaBlocks::CHISELED_STONE_BRICKS(), - StringValues::STONE_BRICK_TYPE_CRACKED => VanillaBlocks::CRACKED_STONE_BRICKS(), - StringValues::STONE_BRICK_TYPE_MOSSY => VanillaBlocks::MOSSY_STONE_BRICKS(), - default => throw $in->badValueException(BlockStateNames::STONE_BRICK_TYPE, $type), + StringValues::STONE_BRICK_TYPE_DEFAULT => Blocks::STONE_BRICKS(), + StringValues::STONE_BRICK_TYPE_CHISELED => Blocks::CHISELED_STONE_BRICKS(), + StringValues::STONE_BRICK_TYPE_CRACKED => Blocks::CRACKED_STONE_BRICKS(), + StringValues::STONE_BRICK_TYPE_MOSSY => Blocks::MOSSY_STONE_BRICKS(), + default => throw $in->badValueException(StateNames::STONE_BRICK_TYPE, $type), }; }); - $this->map(Ids::STONECUTTER, fn() => VanillaBlocks::LEGACY_STONECUTTER()); - $this->map(Ids::STRIPPED_ACACIA_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_ACACIA_LOG() + $this->map(Ids::STONECUTTER, fn() => Blocks::LEGACY_STONECUTTER()); + $this->map(Ids::STRIPPED_ACACIA_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_ACACIA_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::STRIPPED_BIRCH_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_BIRCH_LOG() + $this->map(Ids::STRIPPED_BIRCH_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_BIRCH_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::STRIPPED_DARK_OAK_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_DARK_OAK_LOG() + $this->map(Ids::STRIPPED_DARK_OAK_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_DARK_OAK_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::STRIPPED_JUNGLE_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_JUNGLE_LOG() + $this->map(Ids::STRIPPED_JUNGLE_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_JUNGLE_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::STRIPPED_OAK_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_OAK_LOG() + $this->map(Ids::STRIPPED_OAK_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_OAK_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::STRIPPED_SPRUCE_LOG, function(BlockStateReader $in) : Block{ - return VanillaBlocks::STRIPPED_SPRUCE_LOG() + $this->map(Ids::STRIPPED_SPRUCE_LOG, function(Reader $in) : Block{ + return Blocks::STRIPPED_SPRUCE_LOG() ->setAxis($in->readPillarAxis()); }); - $this->map(Ids::SWEET_BERRY_BUSH, function(BlockStateReader $in) : Block{ + $this->map(Ids::SWEET_BERRY_BUSH, function(Reader $in) : Block{ //berry bush only wants 0-3, but it can be bigger in MCPE due to misuse of GROWTH state which goes up to 7 - $growth = $in->readBoundedInt(BlockStateNames::GROWTH, 0, 7); - return VanillaBlocks::SWEET_BERRY_BUSH() + $growth = $in->readBoundedInt(StateNames::GROWTH, 0, 7); + return Blocks::SWEET_BERRY_BUSH() ->setAge(min($growth, SweetBerryBush::STAGE_MATURE)); }); - $this->map(Ids::TALLGRASS, function(BlockStateReader $in) : Block{ - return match($type = $in->readString(BlockStateNames::TALL_GRASS_TYPE)){ - StringValues::TALL_GRASS_TYPE_DEFAULT, StringValues::TALL_GRASS_TYPE_SNOW, StringValues::TALL_GRASS_TYPE_TALL => VanillaBlocks::TALL_GRASS(), - StringValues::TALL_GRASS_TYPE_FERN => VanillaBlocks::FERN(), - default => throw $in->badValueException(BlockStateNames::TALL_GRASS_TYPE, $type), + $this->map(Ids::TALLGRASS, function(Reader $in) : Block{ + return match($type = $in->readString(StateNames::TALL_GRASS_TYPE)){ + StringValues::TALL_GRASS_TYPE_DEFAULT, StringValues::TALL_GRASS_TYPE_SNOW, StringValues::TALL_GRASS_TYPE_TALL => Blocks::TALL_GRASS(), + StringValues::TALL_GRASS_TYPE_FERN => Blocks::FERN(), + default => throw $in->badValueException(StateNames::TALL_GRASS_TYPE, $type), }; }); - $this->map(Ids::TNT, function(BlockStateReader $in) : Block{ - return VanillaBlocks::TNT() - ->setUnstable($in->readBool(BlockStateNames::EXPLODE_BIT)) - ->setWorksUnderwater($in->readBool(BlockStateNames::ALLOW_UNDERWATER_BIT)); + $this->map(Ids::TNT, function(Reader $in) : Block{ + return Blocks::TNT() + ->setUnstable($in->readBool(StateNames::EXPLODE_BIT)) + ->setWorksUnderwater($in->readBool(StateNames::ALLOW_UNDERWATER_BIT)); }); - $this->map(Ids::TORCH, function(BlockStateReader $in) : Block{ - return VanillaBlocks::TORCH() + $this->map(Ids::TORCH, function(Reader $in) : Block{ + return Blocks::TORCH() ->setFacing($in->readTorchFacing()); }); - $this->map(Ids::TRAPDOOR, fn(BlockStateReader $in) => Helper::decodeTrapdoor(VanillaBlocks::OAK_TRAPDOOR(), $in)); - $this->map(Ids::TRAPPED_CHEST, function(BlockStateReader $in) : Block{ - return VanillaBlocks::TRAPPED_CHEST() + $this->map(Ids::TRAPDOOR, fn(Reader $in) => Helper::decodeTrapdoor(Blocks::OAK_TRAPDOOR(), $in)); + $this->map(Ids::TRAPPED_CHEST, function(Reader $in) : Block{ + return Blocks::TRAPPED_CHEST() ->setFacing($in->readHorizontalFacing()); }); - $this->map(Ids::TRIPWIRE, function(BlockStateReader $in) : Block{ - return VanillaBlocks::TRIPWIRE() - ->setConnected($in->readBool(BlockStateNames::ATTACHED_BIT)) - ->setDisarmed($in->readBool(BlockStateNames::DISARMED_BIT)) - ->setSuspended($in->readBool(BlockStateNames::SUSPENDED_BIT)) - ->setTriggered($in->readBool(BlockStateNames::POWERED_BIT)); + $this->map(Ids::TRIPWIRE, function(Reader $in) : Block{ + return Blocks::TRIPWIRE() + ->setConnected($in->readBool(StateNames::ATTACHED_BIT)) + ->setDisarmed($in->readBool(StateNames::DISARMED_BIT)) + ->setSuspended($in->readBool(StateNames::SUSPENDED_BIT)) + ->setTriggered($in->readBool(StateNames::POWERED_BIT)); }); - $this->map(Ids::TRIPWIRE_HOOK, function(BlockStateReader $in) : Block{ - return VanillaBlocks::TRIPWIRE_HOOK() - ->setConnected($in->readBool(BlockStateNames::ATTACHED_BIT)) + $this->map(Ids::TRIPWIRE_HOOK, function(Reader $in) : Block{ + return Blocks::TRIPWIRE_HOOK() + ->setConnected($in->readBool(StateNames::ATTACHED_BIT)) ->setFacing($in->readLegacyHorizontalFacing()) - ->setPowered($in->readBool(BlockStateNames::POWERED_BIT)); + ->setPowered($in->readBool(StateNames::POWERED_BIT)); }); - $this->map(Ids::UNDERWATER_TORCH, function(BlockStateReader $in) : Block{ - return VanillaBlocks::UNDERWATER_TORCH() + $this->map(Ids::UNDERWATER_TORCH, function(Reader $in) : Block{ + return Blocks::UNDERWATER_TORCH() ->setFacing($in->readTorchFacing()); }); - $this->map(Ids::UNDYED_SHULKER_BOX, fn() => VanillaBlocks::SHULKER_BOX()); - $this->map(Ids::UNLIT_REDSTONE_TORCH, function(BlockStateReader $in) : Block{ - return VanillaBlocks::REDSTONE_TORCH() + $this->map(Ids::UNDYED_SHULKER_BOX, fn() => Blocks::SHULKER_BOX()); + $this->map(Ids::UNLIT_REDSTONE_TORCH, function(Reader $in) : Block{ + return Blocks::REDSTONE_TORCH() ->setFacing($in->readTorchFacing()) ->setLit(false); }); - $this->map(Ids::UNPOWERED_COMPARATOR, fn(BlockStateReader $in) => Helper::decodeComparator(VanillaBlocks::REDSTONE_COMPARATOR(), $in)); - $this->map(Ids::UNPOWERED_REPEATER, fn(BlockStateReader $in) => Helper::decodeRepeater(VanillaBlocks::REDSTONE_REPEATER(), $in) + $this->map(Ids::UNPOWERED_COMPARATOR, fn(Reader $in) => Helper::decodeComparator(Blocks::REDSTONE_COMPARATOR(), $in)); + $this->map(Ids::UNPOWERED_REPEATER, fn(Reader $in) => Helper::decodeRepeater(Blocks::REDSTONE_REPEATER(), $in) ->setPowered(false)); - $this->map(Ids::VINE, function(BlockStateReader $in) : Block{ - $vineDirectionFlags = $in->readBoundedInt(BlockStateNames::VINE_DIRECTION_BITS, 0, 15); - return VanillaBlocks::VINES() + $this->map(Ids::VINE, function(Reader $in) : Block{ + $vineDirectionFlags = $in->readBoundedInt(StateNames::VINE_DIRECTION_BITS, 0, 15); + return Blocks::VINES() ->setFace(Facing::NORTH, ($vineDirectionFlags & BlockLegacyMetadata::VINE_FLAG_NORTH) !== 0) ->setFace(Facing::SOUTH, ($vineDirectionFlags & BlockLegacyMetadata::VINE_FLAG_SOUTH) !== 0) ->setFace(Facing::WEST, ($vineDirectionFlags & BlockLegacyMetadata::VINE_FLAG_WEST) !== 0) ->setFace(Facing::EAST, ($vineDirectionFlags & BlockLegacyMetadata::VINE_FLAG_EAST) !== 0); }); - $this->map(Ids::WALL_BANNER, function(BlockStateReader $in) : Block{ - return VanillaBlocks::WALL_BANNER() + $this->map(Ids::WALL_BANNER, function(Reader $in) : Block{ + return Blocks::WALL_BANNER() ->setFacing($in->readHorizontalFacing()); }); - $this->map(Ids::WALL_SIGN, fn(BlockStateReader $in) => Helper::decodeWallSign(VanillaBlocks::OAK_WALL_SIGN(), $in)); - $this->map(Ids::WATER, fn(BlockStateReader $in) => Helper::decodeStillLiquid(VanillaBlocks::WATER(), $in)); - $this->map(Ids::WATERLILY, fn() => VanillaBlocks::LILY_PAD()); - $this->map(Ids::WEB, fn() => VanillaBlocks::COBWEB()); - $this->map(Ids::WHEAT, fn(BlockStateReader $in) => Helper::decodeCrops(VanillaBlocks::WHEAT(), $in)); - $this->map(Ids::WHITE_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::WHITE_GLAZED_TERRACOTTA(), $in)); - $this->map(Ids::WOOD, function(BlockStateReader $in) : Block{ + $this->map(Ids::WALL_SIGN, fn(Reader $in) => Helper::decodeWallSign(Blocks::OAK_WALL_SIGN(), $in)); + $this->map(Ids::WATER, fn(Reader $in) => Helper::decodeStillLiquid(Blocks::WATER(), $in)); + $this->map(Ids::WATERLILY, fn() => Blocks::LILY_PAD()); + $this->map(Ids::WEB, fn() => Blocks::COBWEB()); + $this->map(Ids::WHEAT, fn(Reader $in) => Helper::decodeCrops(Blocks::WHEAT(), $in)); + $this->map(Ids::WHITE_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::WHITE_GLAZED_TERRACOTTA(), $in)); + $this->map(Ids::WOOD, function(Reader $in) : Block{ //TODO: our impl doesn't support axis yet - $stripped = $in->readBool(BlockStateNames::STRIPPED_BIT); - return match($woodType = $in->readString(BlockStateNames::WOOD_TYPE)){ - StringValues::WOOD_TYPE_ACACIA => $stripped ? VanillaBlocks::STRIPPED_ACACIA_WOOD() : VanillaBlocks::ACACIA_WOOD(), - StringValues::WOOD_TYPE_BIRCH => $stripped ? VanillaBlocks::STRIPPED_BIRCH_WOOD() : VanillaBlocks::BIRCH_WOOD(), - StringValues::WOOD_TYPE_DARK_OAK => $stripped ? VanillaBlocks::STRIPPED_DARK_OAK_WOOD() : VanillaBlocks::DARK_OAK_WOOD(), - StringValues::WOOD_TYPE_JUNGLE => $stripped ? VanillaBlocks::STRIPPED_JUNGLE_WOOD() : VanillaBlocks::JUNGLE_WOOD(), - StringValues::WOOD_TYPE_OAK => $stripped ? VanillaBlocks::STRIPPED_OAK_WOOD() : VanillaBlocks::OAK_WOOD(), - StringValues::WOOD_TYPE_SPRUCE => $stripped ? VanillaBlocks::STRIPPED_SPRUCE_WOOD() : VanillaBlocks::SPRUCE_WOOD(), - default => throw $in->badValueException(BlockStateNames::WOOD_TYPE, $woodType), + $stripped = $in->readBool(StateNames::STRIPPED_BIT); + return match($woodType = $in->readString(StateNames::WOOD_TYPE)){ + StringValues::WOOD_TYPE_ACACIA => $stripped ? Blocks::STRIPPED_ACACIA_WOOD() : Blocks::ACACIA_WOOD(), + StringValues::WOOD_TYPE_BIRCH => $stripped ? Blocks::STRIPPED_BIRCH_WOOD() : Blocks::BIRCH_WOOD(), + StringValues::WOOD_TYPE_DARK_OAK => $stripped ? Blocks::STRIPPED_DARK_OAK_WOOD() : Blocks::DARK_OAK_WOOD(), + StringValues::WOOD_TYPE_JUNGLE => $stripped ? Blocks::STRIPPED_JUNGLE_WOOD() : Blocks::JUNGLE_WOOD(), + StringValues::WOOD_TYPE_OAK => $stripped ? Blocks::STRIPPED_OAK_WOOD() : Blocks::OAK_WOOD(), + StringValues::WOOD_TYPE_SPRUCE => $stripped ? Blocks::STRIPPED_SPRUCE_WOOD() : Blocks::SPRUCE_WOOD(), + default => throw $in->badValueException(StateNames::WOOD_TYPE, $woodType), }; }); - $this->map(Ids::WOODEN_BUTTON, fn(BlockStateReader $in) => Helper::decodeButton(VanillaBlocks::OAK_BUTTON(), $in)); - $this->map(Ids::WOODEN_DOOR, fn(BlockStateReader $in) => Helper::decodeDoor(VanillaBlocks::OAK_DOOR(), $in)); - $this->map(Ids::WOODEN_PRESSURE_PLATE, fn(BlockStateReader $in) => Helper::decodeSimplePressurePlate(VanillaBlocks::OAK_PRESSURE_PLATE(), $in)); - $this->map(Ids::WOODEN_SLAB, fn(BlockStateReader $in) => Helper::mapWoodenSlabType($in)->setSlabType($in->readSlabPosition())); - $this->map(Ids::WOOL, function(BlockStateReader $in) : Block{ - return VanillaBlocks::WOOL() + $this->map(Ids::WOODEN_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::OAK_BUTTON(), $in)); + $this->map(Ids::WOODEN_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::OAK_DOOR(), $in)); + $this->map(Ids::WOODEN_PRESSURE_PLATE, fn(Reader $in) => Helper::decodeSimplePressurePlate(Blocks::OAK_PRESSURE_PLATE(), $in)); + $this->map(Ids::WOODEN_SLAB, fn(Reader $in) => Helper::mapWoodenSlabType($in)->setSlabType($in->readSlabPosition())); + $this->map(Ids::WOOL, function(Reader $in) : Block{ + return Blocks::WOOL() ->setColor($in->readColor()); }); - $this->map(Ids::YELLOW_FLOWER, fn() => VanillaBlocks::DANDELION()); - $this->map(Ids::YELLOW_GLAZED_TERRACOTTA, fn(BlockStateReader $in) => Helper::decodeGlazedTerracotta(VanillaBlocks::YELLOW_GLAZED_TERRACOTTA(), $in)); - //$this->map(Ids::ALLOW, function(BlockStateReader $in) : Block{ + $this->map(Ids::YELLOW_FLOWER, fn() => Blocks::DANDELION()); + $this->map(Ids::YELLOW_GLAZED_TERRACOTTA, fn(Reader $in) => Helper::decodeGlazedTerracotta(Blocks::YELLOW_GLAZED_TERRACOTTA(), $in)); + //$this->map(Ids::ALLOW, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::AMETHYST_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::AMETHYST_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::AMETHYST_CLUSTER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::AMETHYST_CLUSTER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::ANCIENT_DEBRIS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::ANCIENT_DEBRIS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::AZALEA, function(BlockStateReader $in) : Block{ + //$this->map(Ids::AZALEA, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::AZALEA_LEAVES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::AZALEA_LEAVES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * persistent_bit (ByteTag) = 0, 1 * update_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::AZALEA_LEAVES_FLOWERED, function(BlockStateReader $in) : Block{ + //$this->map(Ids::AZALEA_LEAVES_FLOWERED, function(Reader $in) : Block{ /* * TODO: Un-implemented block * persistent_bit (ByteTag) = 0, 1 * update_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BASALT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BASALT, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::BEE_NEST, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BEE_NEST, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 * honey_level (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::BEEHIVE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BEEHIVE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 * honey_level (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::BIG_DRIPLEAF, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BIG_DRIPLEAF, function(Reader $in) : Block{ /* * TODO: Un-implemented block * big_dripleaf_head (ByteTag) = 0, 1 @@ -1098,42 +1100,42 @@ final class BlockStateDeserializer{ * direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::BLACK_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACK_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLACK_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACK_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLACKSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACKSTONE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::BLACKSTONE_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACKSTONE_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLACKSTONE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACKSTONE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLACKSTONE_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACKSTONE_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::BLACKSTONE_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLACKSTONE_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1143,20 +1145,20 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLUE_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLUE_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BLUE_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BLUE_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BORDER_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BORDER_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1166,139 +1168,139 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BROWN_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BROWN_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BROWN_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BROWN_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BUBBLE_COLUMN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BUBBLE_COLUMN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * drag_down (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::BUDDING_AMETHYST, function(BlockStateReader $in) : Block{ + //$this->map(Ids::BUDDING_AMETHYST, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CALCITE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CALCITE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CAMERA, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAMERA, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CAMPFIRE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAMPFIRE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 * extinguished (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CARTOGRAPHY_TABLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CARTOGRAPHY_TABLE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CAULDRON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAULDRON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * cauldron_liquid (StringTag) = lava, powder_snow, water * fill_level (IntTag) = 0, 1, 2, 3, 4, 5, 6 */ //}); - //$this->map(Ids::CAVE_VINES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAVE_VINES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * growing_plant_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::CAVE_VINES_BODY_WITH_BERRIES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAVE_VINES_BODY_WITH_BERRIES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * growing_plant_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::CAVE_VINES_HEAD_WITH_BERRIES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CAVE_VINES_HEAD_WITH_BERRIES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * growing_plant_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::CHAIN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHAIN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::CHAIN_COMMAND_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHAIN_COMMAND_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * conditional_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::CHISELED_DEEPSLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHISELED_DEEPSLATE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CHISELED_NETHER_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHISELED_NETHER_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CHISELED_POLISHED_BLACKSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHISELED_POLISHED_BLACKSTONE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CHORUS_FLOWER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHORUS_FLOWER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * age (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::CHORUS_PLANT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CHORUS_PLANT, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CLIENT_REQUEST_PLACEHOLDER_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CLIENT_REQUEST_PLACEHOLDER_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::COBBLED_DEEPSLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COBBLED_DEEPSLATE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::COBBLED_DEEPSLATE_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COBBLED_DEEPSLATE_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::COBBLED_DEEPSLATE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COBBLED_DEEPSLATE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::COBBLED_DEEPSLATE_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COBBLED_DEEPSLATE_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::COBBLED_DEEPSLATE_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COBBLED_DEEPSLATE_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1308,48 +1310,48 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::COMMAND_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COMMAND_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * conditional_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::COMPOSTER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COMPOSTER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * composter_fill_level (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8 */ //}); - //$this->map(Ids::CONDUIT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CONDUIT, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::COPPER_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COPPER_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::COPPER_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::COPPER_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRACKED_DEEPSLATE_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRACKED_DEEPSLATE_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRACKED_DEEPSLATE_TILES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRACKED_DEEPSLATE_TILES, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRACKED_NETHER_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRACKED_NETHER_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRACKED_POLISHED_BLACKSTONE_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRACKED_POLISHED_BLACKSTONE_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_BUTTON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_BUTTON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * button_pressed_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::CRIMSON_DOOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_DOOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -1358,16 +1360,16 @@ final class BlockStateDeserializer{ * upper_block_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CRIMSON_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CRIMSON_FENCE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_FENCE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_FENCE_GATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_FENCE_GATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -1375,56 +1377,56 @@ final class BlockStateDeserializer{ * open_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CRIMSON_FUNGUS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_FUNGUS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_HYPHAE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_HYPHAE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::CRIMSON_NYLIUM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_NYLIUM, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_PLANKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_PLANKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_PRESSURE_PLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_PRESSURE_PLATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * redstone_signal (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::CRIMSON_ROOTS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_ROOTS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CRIMSON_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CRIMSON_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::CRIMSON_STANDING_SIGN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_STANDING_SIGN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * ground_sign_direction (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::CRIMSON_STEM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_STEM, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::CRIMSON_TRAPDOOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_TRAPDOOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -1432,70 +1434,70 @@ final class BlockStateDeserializer{ * upside_down_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CRIMSON_WALL_SIGN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRIMSON_WALL_SIGN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::CRYING_OBSIDIAN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CRYING_OBSIDIAN, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::CYAN_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CYAN_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::CYAN_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::CYAN_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::DEEPSLATE_BRICK_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_BRICK_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_BRICK_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_BRICK_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_BRICK_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_BRICK_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::DEEPSLATE_BRICK_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_BRICK_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1505,53 +1507,53 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_COAL_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_COAL_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_COPPER_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_COPPER_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_DIAMOND_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_DIAMOND_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_EMERALD_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_EMERALD_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_GOLD_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_GOLD_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_IRON_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_IRON_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_LAPIS_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_LAPIS_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_REDSTONE_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_REDSTONE_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DEEPSLATE_TILE_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_TILE_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_TILE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_TILE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_TILE_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_TILE_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::DEEPSLATE_TILE_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_TILE_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1561,76 +1563,76 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DEEPSLATE_TILES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DEEPSLATE_TILES, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DENY, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DENY, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DIRT_WITH_ROOTS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DIRT_WITH_ROOTS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DISPENSER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DISPENSER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 * triggered_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::DRIPSTONE_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DRIPSTONE_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::DROPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::DROPPER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 * triggered_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::END_GATEWAY, function(BlockStateReader $in) : Block{ + //$this->map(Ids::END_GATEWAY, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::END_PORTAL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::END_PORTAL, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::EXPOSED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::EXPOSED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::EXPOSED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::EXPOSED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::EXPOSED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::EXPOSED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::EXPOSED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::EXPOSED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::EXPOSED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::EXPOSED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::FLOWERING_AZALEA, function(BlockStateReader $in) : Block{ + //$this->map(Ids::FLOWERING_AZALEA, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::GILDED_BLACKSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GILDED_BLACKSTONE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::GLOW_FRAME, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GLOW_FRAME, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 @@ -1638,292 +1640,292 @@ final class BlockStateDeserializer{ * item_frame_photo_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::GLOW_LICHEN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GLOW_LICHEN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * multi_face_direction_bits (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */ //}); - //$this->map(Ids::GRAY_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GRAY_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::GRAY_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GRAY_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::GREEN_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GREEN_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::GREEN_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GREEN_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::GRINDSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::GRINDSTONE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * attachment (StringTag) = hanging, multiple, side, standing * direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::HANGING_ROOTS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::HANGING_ROOTS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::HONEY_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::HONEY_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::HONEYCOMB_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::HONEYCOMB_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::INFESTED_DEEPSLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::INFESTED_DEEPSLATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::JIGSAW, function(BlockStateReader $in) : Block{ + //$this->map(Ids::JIGSAW, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 * rotation (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::KELP, function(BlockStateReader $in) : Block{ + //$this->map(Ids::KELP, function(Reader $in) : Block{ /* * TODO: Un-implemented block * kelp_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::LARGE_AMETHYST_BUD, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LARGE_AMETHYST_BUD, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::LAVA_CAULDRON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LAVA_CAULDRON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * cauldron_liquid (StringTag) = lava, powder_snow, water * fill_level (IntTag) = 0, 1, 2, 3, 4, 5, 6 */ //}); - //$this->map(Ids::LIGHT_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHT_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * block_light_level (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::LIGHT_BLUE_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHT_BLUE_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIGHT_BLUE_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHT_BLUE_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIGHT_GRAY_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHT_GRAY_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIGHT_GRAY_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHT_GRAY_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIGHTNING_ROD, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIGHTNING_ROD, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::LIME_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIME_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIME_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIME_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::LIT_DEEPSLATE_REDSTONE_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LIT_DEEPSLATE_REDSTONE_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::LODESTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::LODESTONE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::MAGENTA_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MAGENTA_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::MAGENTA_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MAGENTA_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::MEDIUM_AMETHYST_BUD, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MEDIUM_AMETHYST_BUD, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::MOSS_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MOSS_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::MOSS_CARPET, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MOSS_CARPET, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::MOVINGBLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MOVINGBLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::MYSTERIOUS_FRAME, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MYSTERIOUS_FRAME, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::MYSTERIOUS_FRAME_SLOT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::MYSTERIOUS_FRAME_SLOT, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::NETHER_GOLD_ORE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::NETHER_GOLD_ORE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::NETHER_SPROUTS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::NETHER_SPROUTS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::NETHERITE_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::NETHERITE_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::OBSERVER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OBSERVER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 * powered_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::ORANGE_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::ORANGE_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::ORANGE_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::ORANGE_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::OXIDIZED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OXIDIZED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::OXIDIZED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OXIDIZED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::OXIDIZED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OXIDIZED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::OXIDIZED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OXIDIZED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::OXIDIZED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::OXIDIZED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::PINK_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PINK_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::PINK_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PINK_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::PISTON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PISTON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::PISTONARMCOLLISION, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PISTONARMCOLLISION, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::POINTED_DRIPSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POINTED_DRIPSTONE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * dripstone_thickness (StringTag) = base, frustum, merge, middle, tip * hanging (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BASALT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BASALT, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BRICK_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1933,42 +1935,42 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_BUTTON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_BUTTON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * button_pressed_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_PRESSURE_PLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_PRESSURE_PLATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * redstone_signal (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::POLISHED_BLACKSTONE_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_BLACKSTONE_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -1978,29 +1980,29 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_DEEPSLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_DEEPSLATE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::POLISHED_DEEPSLATE_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_DEEPSLATE_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_DEEPSLATE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_DEEPSLATE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POLISHED_DEEPSLATE_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_DEEPSLATE_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::POLISHED_DEEPSLATE_WALL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POLISHED_DEEPSLATE_WALL, function(Reader $in) : Block{ /* * TODO: Un-implemented block * wall_connection_type_east (StringTag) = none, short, tall @@ -2010,240 +2012,240 @@ final class BlockStateDeserializer{ * wall_post_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::POWDER_SNOW, function(BlockStateReader $in) : Block{ + //$this->map(Ids::POWDER_SNOW, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::PURPLE_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PURPLE_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::PURPLE_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::PURPLE_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::QUARTZ_BRICKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::QUARTZ_BRICKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::RAW_COPPER_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RAW_COPPER_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::RAW_GOLD_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RAW_GOLD_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::RAW_IRON_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RAW_IRON_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::RED_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RED_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::RED_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RED_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::REPEATING_COMMAND_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::REPEATING_COMMAND_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * conditional_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::RESPAWN_ANCHOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::RESPAWN_ANCHOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * respawn_anchor_charge (IntTag) = 0, 1, 2, 3, 4 */ //}); - //$this->map(Ids::SCAFFOLDING, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCAFFOLDING, function(Reader $in) : Block{ /* * TODO: Un-implemented block * stability (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7 * stability_check (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SCULK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCULK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::SCULK_CATALYST, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCULK_CATALYST, function(Reader $in) : Block{ /* * TODO: Un-implemented block * bloom (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SCULK_SENSOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCULK_SENSOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * powered_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SCULK_SHRIEKER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCULK_SHRIEKER, function(Reader $in) : Block{ /* * TODO: Un-implemented block * active (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SCULK_VEIN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SCULK_VEIN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * multi_face_direction_bits (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */ //}); - //$this->map(Ids::SEAGRASS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SEAGRASS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * sea_grass_type (StringTag) = default, double_bot, double_top */ //}); - //$this->map(Ids::SHROOMLIGHT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SHROOMLIGHT, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::SMALL_AMETHYST_BUD, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SMALL_AMETHYST_BUD, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::SMALL_DRIPLEAF_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SMALL_DRIPLEAF_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 * upper_block_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SMITHING_TABLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SMITHING_TABLE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::SMOOTH_BASALT, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SMOOTH_BASALT, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::SOUL_CAMPFIRE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SOUL_CAMPFIRE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 * extinguished (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SOUL_FIRE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SOUL_FIRE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::SOUL_LANTERN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SOUL_LANTERN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * hanging (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::SOUL_SOIL, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SOUL_SOIL, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::SOUL_TORCH, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SOUL_TORCH, function(Reader $in) : Block{ /* * TODO: Un-implemented block * torch_facing_direction (StringTag) = east, north, south, top, unknown, west */ //}); - //$this->map(Ids::SPORE_BLOSSOM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::SPORE_BLOSSOM, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::STICKYPISTONARMCOLLISION, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STICKYPISTONARMCOLLISION, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::STICKY_PISTON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STICKY_PISTON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::STONECUTTER_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STONECUTTER_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::STRIPPED_CRIMSON_HYPHAE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRIPPED_CRIMSON_HYPHAE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::STRIPPED_CRIMSON_STEM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRIPPED_CRIMSON_STEM, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::STRIPPED_WARPED_HYPHAE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRIPPED_WARPED_HYPHAE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::STRIPPED_WARPED_STEM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRIPPED_WARPED_STEM, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::STRUCTURE_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRUCTURE_BLOCK, function(Reader $in) : Block{ /* * TODO: Un-implemented block * structure_block_type (StringTag) = corner, data, export, invalid, load, save */ //}); - //$this->map(Ids::STRUCTURE_VOID, function(BlockStateReader $in) : Block{ + //$this->map(Ids::STRUCTURE_VOID, function(Reader $in) : Block{ /* * TODO: Un-implemented block * structure_void_type (StringTag) = air, void */ //}); - //$this->map(Ids::TARGET, function(BlockStateReader $in) : Block{ + //$this->map(Ids::TARGET, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::TINTED_GLASS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::TINTED_GLASS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::TUFF, function(BlockStateReader $in) : Block{ + //$this->map(Ids::TUFF, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::TURTLE_EGG, function(BlockStateReader $in) : Block{ + //$this->map(Ids::TURTLE_EGG, function(Reader $in) : Block{ /* * TODO: Un-implemented block * cracked_state (StringTag) = cracked, max_cracked, no_cracks * turtle_egg_count (StringTag) = four_egg, one_egg, three_egg, two_egg */ //}); - //$this->map(Ids::TWISTING_VINES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::TWISTING_VINES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * twisting_vines_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::UNKNOWN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::UNKNOWN, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_BUTTON, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_BUTTON, function(Reader $in) : Block{ /* * TODO: Un-implemented block * button_pressed_bit (ByteTag) = 0, 1 * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::WARPED_DOOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_DOOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -2252,16 +2254,16 @@ final class BlockStateDeserializer{ * upper_block_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WARPED_DOUBLE_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_DOUBLE_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WARPED_FENCE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_FENCE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_FENCE_GATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_FENCE_GATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -2269,56 +2271,56 @@ final class BlockStateDeserializer{ * open_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WARPED_FUNGUS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_FUNGUS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_HYPHAE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_HYPHAE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::WARPED_NYLIUM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_NYLIUM, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_PLANKS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_PLANKS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_PRESSURE_PLATE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_PRESSURE_PLATE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * redstone_signal (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::WARPED_ROOTS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_ROOTS, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WARPED_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WARPED_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WARPED_STANDING_SIGN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_STANDING_SIGN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * ground_sign_direction (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ //}); - //$this->map(Ids::WARPED_STEM, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_STEM, function(Reader $in) : Block{ /* * TODO: Un-implemented block * pillar_axis (StringTag) = x, y, z */ //}); - //$this->map(Ids::WARPED_TRAPDOOR, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_TRAPDOOR, function(Reader $in) : Block{ /* * TODO: Un-implemented block * direction (IntTag) = 0, 1, 2, 3 @@ -2326,170 +2328,170 @@ final class BlockStateDeserializer{ * upside_down_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WARPED_WALL_SIGN, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_WALL_SIGN, function(Reader $in) : Block{ /* * TODO: Un-implemented block * facing_direction (IntTag) = 0, 1, 2, 3, 4, 5 */ //}); - //$this->map(Ids::WARPED_WART_BLOCK, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WARPED_WART_BLOCK, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WAXED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_EXPOSED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_EXPOSED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_EXPOSED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WAXED_EXPOSED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_EXPOSED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_OXIDIZED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_OXIDIZED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_OXIDIZED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WAXED_OXIDIZED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_OXIDIZED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_WEATHERED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_WEATHERED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_WEATHERED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WAXED_WEATHERED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WAXED_WEATHERED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WEATHERED_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEATHERED_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WEATHERED_CUT_COPPER, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEATHERED_CUT_COPPER, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::WEATHERED_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEATHERED_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WEATHERED_CUT_COPPER_STAIRS, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEATHERED_CUT_COPPER_STAIRS, function(Reader $in) : Block{ /* * TODO: Un-implemented block * upside_down_bit (ByteTag) = 0, 1 * weirdo_direction (IntTag) = 0, 1, 2, 3 */ //}); - //$this->map(Ids::WEATHERED_DOUBLE_CUT_COPPER_SLAB, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEATHERED_DOUBLE_CUT_COPPER_SLAB, function(Reader $in) : Block{ /* * TODO: Un-implemented block * top_slot_bit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WEEPING_VINES, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WEEPING_VINES, function(Reader $in) : Block{ /* * TODO: Un-implemented block * weeping_vines_age (IntTag) = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 */ //}); - //$this->map(Ids::WHITE_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WHITE_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WHITE_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WHITE_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::WITHER_ROSE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::WITHER_ROSE, function(Reader $in) : Block{ /* TODO: Un-implemented block */ //}); - //$this->map(Ids::YELLOW_CANDLE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::YELLOW_CANDLE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * candles (IntTag) = 0, 1, 2, 3 * lit (ByteTag) = 0, 1 */ //}); - //$this->map(Ids::YELLOW_CANDLE_CAKE, function(BlockStateReader $in) : Block{ + //$this->map(Ids::YELLOW_CANDLE_CAKE, function(Reader $in) : Block{ /* * TODO: Un-implemented block * lit (ByteTag) = 0, 1 @@ -2503,6 +2505,6 @@ final class BlockStateDeserializer{ if(!array_key_exists($id, $this->deserializeFuncs)){ throw new BlockStateDeserializeException("Unknown block ID \"$id\""); } - return $this->deserializeFuncs[$id](new BlockStateReader($blockStateData)); + return $this->deserializeFuncs[$id](new Reader($blockStateData)); } } diff --git a/src/data/bedrock/blockstate/BlockStateSerializer.php b/src/data/bedrock/blockstate/BlockStateSerializer.php index e6ebf258f..2f2037bc9 100644 --- a/src/data/bedrock/blockstate/BlockStateSerializer.php +++ b/src/data/bedrock/blockstate/BlockStateSerializer.php @@ -120,7 +120,7 @@ use pocketmine\block\UnderwaterTorch; use pocketmine\block\utils\BrewingStandSlot; use pocketmine\block\utils\CoralType; use pocketmine\block\utils\LeverFacing; -use pocketmine\block\VanillaBlocks; +use pocketmine\block\VanillaBlocks as Blocks; use pocketmine\block\Vine; use pocketmine\block\Wall; use pocketmine\block\WallBanner; @@ -137,6 +137,7 @@ use pocketmine\block\WoodenPressurePlate; use pocketmine\block\WoodenStairs; use pocketmine\block\WoodenTrapdoor; use pocketmine\block\Wool; +use pocketmine\data\bedrock\blockstate\BlockStateNames as StateNames; use pocketmine\data\bedrock\blockstate\BlockStateSerializerHelper as Helper; use pocketmine\data\bedrock\blockstate\BlockStateStringValues as StringValues; use pocketmine\data\bedrock\blockstate\BlockStateWriter as Writer; @@ -211,519 +212,519 @@ final class BlockStateSerializer{ } private function registerSerializers() : void{ - $this->map(VanillaBlocks::ACACIA_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::ACACIA_BUTTON))); - $this->map(VanillaBlocks::ACACIA_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::ACACIA_DOOR))); - $this->map(VanillaBlocks::ACACIA_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::ACACIA_FENCE_GATE))); - $this->map(VanillaBlocks::ACACIA_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::ACACIA_PRESSURE_PLATE))); - $this->map(VanillaBlocks::ACACIA_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::ACACIA_STANDING_SIGN))); - $this->map(VanillaBlocks::ACACIA_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_ACACIA)); - $this->map(VanillaBlocks::ACACIA_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::ACACIA_STAIRS))); - $this->map(VanillaBlocks::ACACIA_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::ACACIA_TRAPDOOR))); - $this->map(VanillaBlocks::ACACIA_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::ACACIA_WALL_SIGN))); - $this->map(VanillaBlocks::ACACIA_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::ACTIVATOR_RAIL(), function(ActivatorRail $block) : Writer{ + $this->map(Blocks::ACACIA_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::ACACIA_BUTTON))); + $this->map(Blocks::ACACIA_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::ACACIA_DOOR))); + $this->map(Blocks::ACACIA_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::ACACIA_FENCE_GATE))); + $this->map(Blocks::ACACIA_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::ACACIA_PRESSURE_PLATE))); + $this->map(Blocks::ACACIA_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::ACACIA_STANDING_SIGN))); + $this->map(Blocks::ACACIA_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_ACACIA)); + $this->map(Blocks::ACACIA_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::ACACIA_STAIRS))); + $this->map(Blocks::ACACIA_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::ACACIA_TRAPDOOR))); + $this->map(Blocks::ACACIA_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::ACACIA_WALL_SIGN))); + $this->map(Blocks::ACACIA_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::ACTIVATOR_RAIL(), function(ActivatorRail $block) : Writer{ return Writer::create(Ids::ACTIVATOR_RAIL) - ->writeBool(BlockStateNames::RAIL_DATA_BIT, $block->isPowered()) - ->writeInt(BlockStateNames::RAIL_DIRECTION, $block->getShape()); + ->writeBool(StateNames::RAIL_DATA_BIT, $block->isPowered()) + ->writeInt(StateNames::RAIL_DIRECTION, $block->getShape()); }); - $this->map(VanillaBlocks::AIR(), fn() => new Writer(Ids::AIR)); - $this->map(VanillaBlocks::ALLIUM(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_ALLIUM)); - $this->map(VanillaBlocks::ALL_SIDED_MUSHROOM_STEM(), fn() => Writer::create(Ids::BROWN_MUSHROOM_BLOCK) - ->writeInt(BlockStateNames::HUGE_MUSHROOM_BITS, BlockLegacyMetadata::MUSHROOM_BLOCK_ALL_STEM)); - $this->map(VanillaBlocks::ANDESITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_ANDESITE)); - $this->map(VanillaBlocks::ANDESITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_ANDESITE)); - $this->map(VanillaBlocks::ANDESITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::ANDESITE_STAIRS))); - $this->map(VanillaBlocks::ANDESITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_ANDESITE)); - $this->map(VanillaBlocks::ANVIL(), function(Anvil $block) : Writer{ + $this->map(Blocks::AIR(), fn() => new Writer(Ids::AIR)); + $this->map(Blocks::ALLIUM(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_ALLIUM)); + $this->map(Blocks::ALL_SIDED_MUSHROOM_STEM(), fn() => Writer::create(Ids::BROWN_MUSHROOM_BLOCK) + ->writeInt(StateNames::HUGE_MUSHROOM_BITS, BlockLegacyMetadata::MUSHROOM_BLOCK_ALL_STEM)); + $this->map(Blocks::ANDESITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_ANDESITE)); + $this->map(Blocks::ANDESITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_ANDESITE)); + $this->map(Blocks::ANDESITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::ANDESITE_STAIRS))); + $this->map(Blocks::ANDESITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_ANDESITE)); + $this->map(Blocks::ANVIL(), function(Anvil $block) : Writer{ return Writer::create(Ids::ANVIL) ->writeLegacyHorizontalFacing($block->getFacing()) - ->writeString(BlockStateNames::DAMAGE, match($damage = $block->getDamage()){ + ->writeString(StateNames::DAMAGE, match($damage = $block->getDamage()){ 0 => StringValues::DAMAGE_UNDAMAGED, 1 => StringValues::DAMAGE_SLIGHTLY_DAMAGED, 2 => StringValues::DAMAGE_VERY_DAMAGED, default => throw new BlockStateSerializeException("Invalid Anvil damage {$damage}"), }); }); - $this->map(VanillaBlocks::AZURE_BLUET(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_HOUSTONIA)); - $this->map(VanillaBlocks::BAMBOO(), function(Bamboo $block) : Writer{ + $this->map(Blocks::AZURE_BLUET(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_HOUSTONIA)); + $this->map(Blocks::BAMBOO(), function(Bamboo $block) : Writer{ return Writer::create(Ids::BAMBOO) - ->writeBool(BlockStateNames::AGE_BIT, $block->isReady()) - ->writeString(BlockStateNames::BAMBOO_LEAF_SIZE, match($block->getLeafSize()){ + ->writeBool(StateNames::AGE_BIT, $block->isReady()) + ->writeString(StateNames::BAMBOO_LEAF_SIZE, match($block->getLeafSize()){ Bamboo::NO_LEAVES => StringValues::BAMBOO_LEAF_SIZE_NO_LEAVES, Bamboo::SMALL_LEAVES => StringValues::BAMBOO_LEAF_SIZE_SMALL_LEAVES, Bamboo::LARGE_LEAVES => StringValues::BAMBOO_LEAF_SIZE_LARGE_LEAVES, default => throw new BlockStateSerializeException("Invalid Bamboo leaf thickness " . $block->getLeafSize()), }) - ->writeString(BlockStateNames::BAMBOO_STALK_THICKNESS, $block->isThick() ? StringValues::BAMBOO_STALK_THICKNESS_THICK : StringValues::BAMBOO_STALK_THICKNESS_THIN); + ->writeString(StateNames::BAMBOO_STALK_THICKNESS, $block->isThick() ? StringValues::BAMBOO_STALK_THICKNESS_THICK : StringValues::BAMBOO_STALK_THICKNESS_THIN); }); - $this->map(VanillaBlocks::BAMBOO_SAPLING(), function(BambooSapling $block) : Writer{ + $this->map(Blocks::BAMBOO_SAPLING(), function(BambooSapling $block) : Writer{ return Writer::create(Ids::BAMBOO_SAPLING) - ->writeBool(BlockStateNames::AGE_BIT, $block->isReady()) + ->writeBool(StateNames::AGE_BIT, $block->isReady()) //TODO: bug in MCPE - ->writeString(BlockStateNames::SAPLING_TYPE, StringValues::SAPLING_TYPE_OAK); + ->writeString(StateNames::SAPLING_TYPE, StringValues::SAPLING_TYPE_OAK); }); - $this->map(VanillaBlocks::BANNER(), function(FloorBanner $block) : Writer{ + $this->map(Blocks::BANNER(), function(FloorBanner $block) : Writer{ return Writer::create(Ids::STANDING_BANNER) - ->writeInt(BlockStateNames::GROUND_SIGN_DIRECTION, $block->getRotation()); + ->writeInt(StateNames::GROUND_SIGN_DIRECTION, $block->getRotation()); }); - $this->map(VanillaBlocks::BARREL(), function(Barrel $block) : Writer{ + $this->map(Blocks::BARREL(), function(Barrel $block) : Writer{ return Writer::create(Ids::BARREL) - ->writeBool(BlockStateNames::OPEN_BIT, $block->isOpen()) + ->writeBool(StateNames::OPEN_BIT, $block->isOpen()) ->writeFacingDirection($block->getFacing()); }); - $this->map(VanillaBlocks::BARRIER(), fn() => new Writer(Ids::BARRIER)); - $this->map(VanillaBlocks::BEACON(), fn() => new Writer(Ids::BEACON)); - $this->map(VanillaBlocks::BED(), function(Bed $block) : Writer{ + $this->map(Blocks::BARRIER(), fn() => new Writer(Ids::BARRIER)); + $this->map(Blocks::BEACON(), fn() => new Writer(Ids::BEACON)); + $this->map(Blocks::BED(), function(Bed $block) : Writer{ return Writer::create(Ids::BED) - ->writeBool(BlockStateNames::HEAD_PIECE_BIT, $block->isHeadPart()) - ->writeBool(BlockStateNames::OCCUPIED_BIT, $block->isOccupied()) + ->writeBool(StateNames::HEAD_PIECE_BIT, $block->isHeadPart()) + ->writeBool(StateNames::OCCUPIED_BIT, $block->isOccupied()) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::BEDROCK(), function(Block $block) : Writer{ + $this->map(Blocks::BEDROCK(), function(Block $block) : Writer{ return Writer::create(Ids::BEDROCK) - ->writeBool(BlockStateNames::INFINIBURN_BIT, $block->burnsForever()); + ->writeBool(StateNames::INFINIBURN_BIT, $block->burnsForever()); }); - $this->map(VanillaBlocks::BEETROOTS(), fn(Beetroot $block) => Helper::encodeCrops($block, new Writer(Ids::BEETROOT))); - $this->map(VanillaBlocks::BELL(), function(Bell $block) : Writer{ + $this->map(Blocks::BEETROOTS(), fn(Beetroot $block) => Helper::encodeCrops($block, new Writer(Ids::BEETROOT))); + $this->map(Blocks::BELL(), function(Bell $block) : Writer{ return Writer::create(Ids::BELL) ->writeBellAttachmentType($block->getAttachmentType()) - ->writeBool(BlockStateNames::TOGGLE_BIT, false) //we don't care about this; it's just to keep MCPE happy + ->writeBool(StateNames::TOGGLE_BIT, false) //we don't care about this; it's just to keep MCPE happy ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::BIRCH_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::BIRCH_BUTTON))); - $this->map(VanillaBlocks::BIRCH_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::BIRCH_DOOR))); - $this->map(VanillaBlocks::BIRCH_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::BIRCH_FENCE_GATE))); - $this->map(VanillaBlocks::BIRCH_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::BIRCH_PRESSURE_PLATE))); - $this->map(VanillaBlocks::BIRCH_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::BIRCH_STANDING_SIGN))); - $this->map(VanillaBlocks::BIRCH_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_BIRCH)); - $this->map(VanillaBlocks::BIRCH_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::BIRCH_STAIRS))); - $this->map(VanillaBlocks::BIRCH_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::BIRCH_TRAPDOOR))); - $this->map(VanillaBlocks::BIRCH_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::BIRCH_WALL_SIGN))); - $this->map(VanillaBlocks::BIRCH_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::BLACK_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BLACK_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::BLAST_FURNACE(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::BLAST_FURNACE, Ids::LIT_BLAST_FURNACE)); - $this->map(VanillaBlocks::BLUE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BLUE_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::BLUE_ICE(), fn() => new Writer(Ids::BLUE_ICE)); - $this->map(VanillaBlocks::BLUE_ORCHID(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_ORCHID)); - $this->map(VanillaBlocks::BLUE_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, false, Writer::create(Ids::COLORED_TORCH_BP))); - $this->map(VanillaBlocks::BONE_BLOCK(), function(BoneBlock $block) : Writer{ + $this->map(Blocks::BIRCH_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::BIRCH_BUTTON))); + $this->map(Blocks::BIRCH_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::BIRCH_DOOR))); + $this->map(Blocks::BIRCH_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::BIRCH_FENCE_GATE))); + $this->map(Blocks::BIRCH_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::BIRCH_PRESSURE_PLATE))); + $this->map(Blocks::BIRCH_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::BIRCH_STANDING_SIGN))); + $this->map(Blocks::BIRCH_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_BIRCH)); + $this->map(Blocks::BIRCH_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::BIRCH_STAIRS))); + $this->map(Blocks::BIRCH_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::BIRCH_TRAPDOOR))); + $this->map(Blocks::BIRCH_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::BIRCH_WALL_SIGN))); + $this->map(Blocks::BIRCH_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::BLACK_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BLACK_GLAZED_TERRACOTTA))); + $this->map(Blocks::BLAST_FURNACE(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::BLAST_FURNACE, Ids::LIT_BLAST_FURNACE)); + $this->map(Blocks::BLUE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BLUE_GLAZED_TERRACOTTA))); + $this->map(Blocks::BLUE_ICE(), fn() => new Writer(Ids::BLUE_ICE)); + $this->map(Blocks::BLUE_ORCHID(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_ORCHID)); + $this->map(Blocks::BLUE_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, false, Writer::create(Ids::COLORED_TORCH_BP))); + $this->map(Blocks::BONE_BLOCK(), function(BoneBlock $block) : Writer{ return Writer::create(Ids::BONE_BLOCK) - ->writeInt(BlockStateNames::DEPRECATED, 0) + ->writeInt(StateNames::DEPRECATED, 0) ->writePillarAxis($block->getAxis()); }); - $this->map(VanillaBlocks::BOOKSHELF(), fn() => new Writer(Ids::BOOKSHELF)); - $this->map(VanillaBlocks::BREWING_STAND(), function(BrewingStand $block) : Writer{ + $this->map(Blocks::BOOKSHELF(), fn() => new Writer(Ids::BOOKSHELF)); + $this->map(Blocks::BREWING_STAND(), function(BrewingStand $block) : Writer{ return Writer::create(Ids::BREWING_STAND) - ->writeBool(BlockStateNames::BREWING_STAND_SLOT_A_BIT, $block->hasSlot(BrewingStandSlot::EAST())) - ->writeBool(BlockStateNames::BREWING_STAND_SLOT_B_BIT, $block->hasSlot(BrewingStandSlot::SOUTHWEST())) - ->writeBool(BlockStateNames::BREWING_STAND_SLOT_C_BIT, $block->hasSlot(BrewingStandSlot::NORTHWEST())); + ->writeBool(StateNames::BREWING_STAND_SLOT_A_BIT, $block->hasSlot(BrewingStandSlot::EAST())) + ->writeBool(StateNames::BREWING_STAND_SLOT_B_BIT, $block->hasSlot(BrewingStandSlot::SOUTHWEST())) + ->writeBool(StateNames::BREWING_STAND_SLOT_C_BIT, $block->hasSlot(BrewingStandSlot::NORTHWEST())); }); - $this->map(VanillaBlocks::BRICKS(), fn() => new Writer(Ids::BRICK_BLOCK)); - $this->map(VanillaBlocks::BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_BRICK)); - $this->map(VanillaBlocks::BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::BRICK_STAIRS))); - $this->map(VanillaBlocks::BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_BRICK)); - $this->map(VanillaBlocks::BROWN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BROWN_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::BROWN_MUSHROOM(), fn() => new Writer(Ids::BROWN_MUSHROOM)); - $this->map(VanillaBlocks::BROWN_MUSHROOM_BLOCK(), fn(BrownMushroomBlock $block) => Helper::encodeMushroomBlock($block, new Writer(Ids::BROWN_MUSHROOM_BLOCK))); - $this->map(VanillaBlocks::CACTUS(), function(Cactus $block) : Writer{ + $this->map(Blocks::BRICKS(), fn() => new Writer(Ids::BRICK_BLOCK)); + $this->map(Blocks::BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_BRICK)); + $this->map(Blocks::BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::BRICK_STAIRS))); + $this->map(Blocks::BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_BRICK)); + $this->map(Blocks::BROWN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::BROWN_GLAZED_TERRACOTTA))); + $this->map(Blocks::BROWN_MUSHROOM(), fn() => new Writer(Ids::BROWN_MUSHROOM)); + $this->map(Blocks::BROWN_MUSHROOM_BLOCK(), fn(BrownMushroomBlock $block) => Helper::encodeMushroomBlock($block, new Writer(Ids::BROWN_MUSHROOM_BLOCK))); + $this->map(Blocks::CACTUS(), function(Cactus $block) : Writer{ return Writer::create(Ids::CACTUS) - ->writeInt(BlockStateNames::AGE, $block->getAge()); + ->writeInt(StateNames::AGE, $block->getAge()); }); - $this->map(VanillaBlocks::CAKE(), function(Cake $block) : Writer{ + $this->map(Blocks::CAKE(), function(Cake $block) : Writer{ return Writer::create(Ids::CAKE) - ->writeInt(BlockStateNames::BITE_COUNTER, $block->getBites()); + ->writeInt(StateNames::BITE_COUNTER, $block->getBites()); }); - $this->map(VanillaBlocks::CARPET(), function(Carpet $block) : Writer{ + $this->map(Blocks::CARPET(), function(Carpet $block) : Writer{ return Writer::create(Ids::CARPET) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::CARROTS(), fn(Carrot $block) => Helper::encodeCrops($block, new Writer(Ids::CARROTS))); - $this->map(VanillaBlocks::CARVED_PUMPKIN(), function(CarvedPumpkin $block) : Writer{ + $this->map(Blocks::CARROTS(), fn(Carrot $block) => Helper::encodeCrops($block, new Writer(Ids::CARROTS))); + $this->map(Blocks::CARVED_PUMPKIN(), function(CarvedPumpkin $block) : Writer{ return Writer::create(Ids::CARVED_PUMPKIN) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::CHEMICAL_HEAT(), fn() => new Writer(Ids::CHEMICAL_HEAT)); - $this->map(VanillaBlocks::CHEST(), function(Chest $block) : Writer{ + $this->map(Blocks::CHEMICAL_HEAT(), fn() => new Writer(Ids::CHEMICAL_HEAT)); + $this->map(Blocks::CHEST(), function(Chest $block) : Writer{ return Writer::create(Ids::CHEST) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::CHISELED_QUARTZ(), fn(SimplePillar $block) => Helper::encodeQuartz(StringValues::CHISEL_TYPE_CHISELED, $block->getAxis())); - $this->map(VanillaBlocks::CHISELED_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_HEIROGLYPHS)); - $this->map(VanillaBlocks::CHISELED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_HEIROGLYPHS)); - $this->map(VanillaBlocks::CHISELED_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_CHISELED)); - $this->map(VanillaBlocks::CLAY(), fn() => new Writer(Ids::CLAY)); - $this->map(VanillaBlocks::COAL(), fn() => new Writer(Ids::COAL_BLOCK)); - $this->map(VanillaBlocks::COAL_ORE(), fn() => new Writer(Ids::COAL_ORE)); - $this->map(VanillaBlocks::COBBLESTONE(), fn() => new Writer(Ids::COBBLESTONE)); - $this->map(VanillaBlocks::COBBLESTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_COBBLESTONE)); - $this->map(VanillaBlocks::COBBLESTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::STONE_STAIRS))); - $this->map(VanillaBlocks::COBBLESTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_COBBLESTONE)); - $this->map(VanillaBlocks::COBWEB(), fn() => new Writer(Ids::WEB)); - $this->map(VanillaBlocks::COCOA_POD(), function(CocoaBlock $block) : Writer{ + $this->map(Blocks::CHISELED_QUARTZ(), fn(SimplePillar $block) => Helper::encodeQuartz(StringValues::CHISEL_TYPE_CHISELED, $block->getAxis())); + $this->map(Blocks::CHISELED_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_HEIROGLYPHS)); + $this->map(Blocks::CHISELED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_HEIROGLYPHS)); + $this->map(Blocks::CHISELED_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_CHISELED)); + $this->map(Blocks::CLAY(), fn() => new Writer(Ids::CLAY)); + $this->map(Blocks::COAL(), fn() => new Writer(Ids::COAL_BLOCK)); + $this->map(Blocks::COAL_ORE(), fn() => new Writer(Ids::COAL_ORE)); + $this->map(Blocks::COBBLESTONE(), fn() => new Writer(Ids::COBBLESTONE)); + $this->map(Blocks::COBBLESTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_COBBLESTONE)); + $this->map(Blocks::COBBLESTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::STONE_STAIRS))); + $this->map(Blocks::COBBLESTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_COBBLESTONE)); + $this->map(Blocks::COBWEB(), fn() => new Writer(Ids::WEB)); + $this->map(Blocks::COCOA_POD(), function(CocoaBlock $block) : Writer{ return Writer::create(Ids::COCOA) - ->writeInt(BlockStateNames::AGE, $block->getAge()) + ->writeInt(StateNames::AGE, $block->getAge()) ->writeLegacyHorizontalFacing(Facing::opposite($block->getFacing())); }); - $this->map(VanillaBlocks::COMPOUND_CREATOR(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_COMPOUND_CREATOR, new Writer(Ids::CHEMISTRY_TABLE))); - $this->map(VanillaBlocks::CONCRETE(), function(Concrete $block) : Writer{ + $this->map(Blocks::COMPOUND_CREATOR(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_COMPOUND_CREATOR, new Writer(Ids::CHEMISTRY_TABLE))); + $this->map(Blocks::CONCRETE(), function(Concrete $block) : Writer{ return Writer::create(Ids::CONCRETE) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::CONCRETE_POWDER(), function(ConcretePowder $block) : Writer{ + $this->map(Blocks::CONCRETE_POWDER(), function(ConcretePowder $block) : Writer{ return Writer::create(Ids::CONCRETEPOWDER) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::CORAL(), function(Coral $block) : Writer{ + $this->map(Blocks::CORAL(), function(Coral $block) : Writer{ return Writer::create(Ids::CORAL) - ->writeBool(BlockStateNames::DEAD_BIT, $block->isDead()) + ->writeBool(StateNames::DEAD_BIT, $block->isDead()) ->writeCoralType($block->getCoralType()); }); - $this->map(VanillaBlocks::CORAL_BLOCK(), function(CoralBlock $block) : Writer{ + $this->map(Blocks::CORAL_BLOCK(), function(CoralBlock $block) : Writer{ return Writer::create(Ids::CORAL_BLOCK) - ->writeBool(BlockStateNames::DEAD_BIT, $block->isDead()) + ->writeBool(StateNames::DEAD_BIT, $block->isDead()) ->writeCoralType($block->getCoralType()); }); - $this->map(VanillaBlocks::CORAL_FAN(), function(FloorCoralFan $block) : Writer{ + $this->map(Blocks::CORAL_FAN(), function(FloorCoralFan $block) : Writer{ return Writer::create($block->isDead() ? Ids::CORAL_FAN_DEAD : Ids::CORAL_FAN) ->writeCoralType($block->getCoralType()) - ->writeInt(BlockStateNames::CORAL_FAN_DIRECTION, match($axis = $block->getAxis()){ + ->writeInt(StateNames::CORAL_FAN_DIRECTION, match($axis = $block->getAxis()){ Axis::X => 0, Axis::Z => 1, default => throw new BlockStateSerializeException("Invalid axis {$axis}"), }); }); - $this->map(VanillaBlocks::CORNFLOWER(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_CORNFLOWER)); - $this->map(VanillaBlocks::CRACKED_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_CRACKED)); - $this->map(VanillaBlocks::CRAFTING_TABLE(), fn() => new Writer(Ids::CRAFTING_TABLE)); - $this->map(VanillaBlocks::CUT_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_CUT)); - $this->map(VanillaBlocks::CUT_RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_CUT_RED_SANDSTONE)); - $this->map(VanillaBlocks::CUT_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_CUT)); - $this->map(VanillaBlocks::CUT_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_CUT_SANDSTONE)); - $this->map(VanillaBlocks::CYAN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::CYAN_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::DANDELION(), fn() => new Writer(Ids::YELLOW_FLOWER)); - $this->map(VanillaBlocks::DARK_OAK_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::DARK_OAK_BUTTON))); - $this->map(VanillaBlocks::DARK_OAK_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::DARK_OAK_DOOR))); - $this->map(VanillaBlocks::DARK_OAK_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::DARK_OAK_FENCE_GATE))); - $this->map(VanillaBlocks::DARK_OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::DARK_OAK_PRESSURE_PLATE))); - $this->map(VanillaBlocks::DARK_OAK_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::DARKOAK_STANDING_SIGN))); - $this->map(VanillaBlocks::DARK_OAK_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_DARK_OAK)); - $this->map(VanillaBlocks::DARK_OAK_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::DARK_OAK_STAIRS))); - $this->map(VanillaBlocks::DARK_OAK_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::DARK_OAK_TRAPDOOR))); - $this->map(VanillaBlocks::DARK_OAK_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::DARKOAK_WALL_SIGN))); - $this->map(VanillaBlocks::DARK_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::DARK_PRISMARINE(), fn() => Writer::create(Ids::PRISMARINE) - ->writeString(BlockStateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_DARK)); - $this->map(VanillaBlocks::DARK_PRISMARINE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_DARK)); - $this->map(VanillaBlocks::DARK_PRISMARINE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::DARK_PRISMARINE_STAIRS))); - $this->map(VanillaBlocks::DAYLIGHT_SENSOR(), function(DaylightSensor $block) : Writer{ + $this->map(Blocks::CORNFLOWER(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_CORNFLOWER)); + $this->map(Blocks::CRACKED_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_CRACKED)); + $this->map(Blocks::CRAFTING_TABLE(), fn() => new Writer(Ids::CRAFTING_TABLE)); + $this->map(Blocks::CUT_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_CUT)); + $this->map(Blocks::CUT_RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_CUT_RED_SANDSTONE)); + $this->map(Blocks::CUT_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_CUT)); + $this->map(Blocks::CUT_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_CUT_SANDSTONE)); + $this->map(Blocks::CYAN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::CYAN_GLAZED_TERRACOTTA))); + $this->map(Blocks::DANDELION(), fn() => new Writer(Ids::YELLOW_FLOWER)); + $this->map(Blocks::DARK_OAK_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::DARK_OAK_BUTTON))); + $this->map(Blocks::DARK_OAK_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::DARK_OAK_DOOR))); + $this->map(Blocks::DARK_OAK_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::DARK_OAK_FENCE_GATE))); + $this->map(Blocks::DARK_OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::DARK_OAK_PRESSURE_PLATE))); + $this->map(Blocks::DARK_OAK_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::DARKOAK_STANDING_SIGN))); + $this->map(Blocks::DARK_OAK_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_DARK_OAK)); + $this->map(Blocks::DARK_OAK_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::DARK_OAK_STAIRS))); + $this->map(Blocks::DARK_OAK_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::DARK_OAK_TRAPDOOR))); + $this->map(Blocks::DARK_OAK_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::DARKOAK_WALL_SIGN))); + $this->map(Blocks::DARK_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::DARK_PRISMARINE(), fn() => Writer::create(Ids::PRISMARINE) + ->writeString(StateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_DARK)); + $this->map(Blocks::DARK_PRISMARINE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_DARK)); + $this->map(Blocks::DARK_PRISMARINE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::DARK_PRISMARINE_STAIRS))); + $this->map(Blocks::DAYLIGHT_SENSOR(), function(DaylightSensor $block) : Writer{ return Writer::create($block->isInverted() ? Ids::DAYLIGHT_DETECTOR_INVERTED : Ids::DAYLIGHT_DETECTOR) - ->writeInt(BlockStateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); + ->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); }); - $this->map(VanillaBlocks::DEAD_BUSH(), fn() => new Writer(Ids::DEADBUSH)); - $this->map(VanillaBlocks::DETECTOR_RAIL(), function(DetectorRail $block) : Writer{ + $this->map(Blocks::DEAD_BUSH(), fn() => new Writer(Ids::DEADBUSH)); + $this->map(Blocks::DETECTOR_RAIL(), function(DetectorRail $block) : Writer{ return Writer::create(Ids::DETECTOR_RAIL) - ->writeBool(BlockStateNames::RAIL_DATA_BIT, $block->isActivated()) - ->writeInt(BlockStateNames::RAIL_DIRECTION, $block->getShape()); + ->writeBool(StateNames::RAIL_DATA_BIT, $block->isActivated()) + ->writeInt(StateNames::RAIL_DIRECTION, $block->getShape()); }); - $this->map(VanillaBlocks::DIAMOND(), fn() => new Writer(Ids::DIAMOND_BLOCK)); - $this->map(VanillaBlocks::DIAMOND_ORE(), fn() => new Writer(Ids::DIAMOND_ORE)); - $this->map(VanillaBlocks::DIORITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_DIORITE)); - $this->map(VanillaBlocks::DIORITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_DIORITE)); - $this->map(VanillaBlocks::DIORITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::DIORITE_STAIRS))); - $this->map(VanillaBlocks::DIORITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_DIORITE)); - $this->map(VanillaBlocks::DIRT(), function(Dirt $block) : Writer{ + $this->map(Blocks::DIAMOND(), fn() => new Writer(Ids::DIAMOND_BLOCK)); + $this->map(Blocks::DIAMOND_ORE(), fn() => new Writer(Ids::DIAMOND_ORE)); + $this->map(Blocks::DIORITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_DIORITE)); + $this->map(Blocks::DIORITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_DIORITE)); + $this->map(Blocks::DIORITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::DIORITE_STAIRS))); + $this->map(Blocks::DIORITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_DIORITE)); + $this->map(Blocks::DIRT(), function(Dirt $block) : Writer{ return Writer::create(Ids::DIRT) - ->writeString(BlockStateNames::DIRT_TYPE, $block->isCoarse() ? StringValues::DIRT_TYPE_COARSE : StringValues::DIRT_TYPE_NORMAL); + ->writeString(StateNames::DIRT_TYPE, $block->isCoarse() ? StringValues::DIRT_TYPE_COARSE : StringValues::DIRT_TYPE_NORMAL); }); - $this->map(VanillaBlocks::DOUBLE_TALLGRASS(), fn(DoubleTallGrass $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_GRASS, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::DRAGON_EGG(), fn() => new Writer(Ids::DRAGON_EGG)); - $this->map(VanillaBlocks::DRIED_KELP(), fn() => new Writer(Ids::DRIED_KELP_BLOCK)); - $this->map(VanillaBlocks::DYED_SHULKER_BOX(), function(DyedShulkerBox $block) : Writer{ + $this->map(Blocks::DOUBLE_TALLGRASS(), fn(DoubleTallGrass $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_GRASS, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::DRAGON_EGG(), fn() => new Writer(Ids::DRAGON_EGG)); + $this->map(Blocks::DRIED_KELP(), fn() => new Writer(Ids::DRIED_KELP_BLOCK)); + $this->map(Blocks::DYED_SHULKER_BOX(), function(DyedShulkerBox $block) : Writer{ return Writer::create(Ids::SHULKER_BOX) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::ELEMENT_ACTINIUM(), fn() => new Writer(Ids::ELEMENT_89)); - $this->map(VanillaBlocks::ELEMENT_ALUMINUM(), fn() => new Writer(Ids::ELEMENT_13)); - $this->map(VanillaBlocks::ELEMENT_AMERICIUM(), fn() => new Writer(Ids::ELEMENT_95)); - $this->map(VanillaBlocks::ELEMENT_ANTIMONY(), fn() => new Writer(Ids::ELEMENT_51)); - $this->map(VanillaBlocks::ELEMENT_ARGON(), fn() => new Writer(Ids::ELEMENT_18)); - $this->map(VanillaBlocks::ELEMENT_ARSENIC(), fn() => new Writer(Ids::ELEMENT_33)); - $this->map(VanillaBlocks::ELEMENT_ASTATINE(), fn() => new Writer(Ids::ELEMENT_85)); - $this->map(VanillaBlocks::ELEMENT_BARIUM(), fn() => new Writer(Ids::ELEMENT_56)); - $this->map(VanillaBlocks::ELEMENT_BERKELIUM(), fn() => new Writer(Ids::ELEMENT_97)); - $this->map(VanillaBlocks::ELEMENT_BERYLLIUM(), fn() => new Writer(Ids::ELEMENT_4)); - $this->map(VanillaBlocks::ELEMENT_BISMUTH(), fn() => new Writer(Ids::ELEMENT_83)); - $this->map(VanillaBlocks::ELEMENT_BOHRIUM(), fn() => new Writer(Ids::ELEMENT_107)); - $this->map(VanillaBlocks::ELEMENT_BORON(), fn() => new Writer(Ids::ELEMENT_5)); - $this->map(VanillaBlocks::ELEMENT_BROMINE(), fn() => new Writer(Ids::ELEMENT_35)); - $this->map(VanillaBlocks::ELEMENT_CADMIUM(), fn() => new Writer(Ids::ELEMENT_48)); - $this->map(VanillaBlocks::ELEMENT_CALCIUM(), fn() => new Writer(Ids::ELEMENT_20)); - $this->map(VanillaBlocks::ELEMENT_CALIFORNIUM(), fn() => new Writer(Ids::ELEMENT_98)); - $this->map(VanillaBlocks::ELEMENT_CARBON(), fn() => new Writer(Ids::ELEMENT_6)); - $this->map(VanillaBlocks::ELEMENT_CERIUM(), fn() => new Writer(Ids::ELEMENT_58)); - $this->map(VanillaBlocks::ELEMENT_CESIUM(), fn() => new Writer(Ids::ELEMENT_55)); - $this->map(VanillaBlocks::ELEMENT_CHLORINE(), fn() => new Writer(Ids::ELEMENT_17)); - $this->map(VanillaBlocks::ELEMENT_CHROMIUM(), fn() => new Writer(Ids::ELEMENT_24)); - $this->map(VanillaBlocks::ELEMENT_COBALT(), fn() => new Writer(Ids::ELEMENT_27)); - $this->map(VanillaBlocks::ELEMENT_CONSTRUCTOR(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_ELEMENT_CONSTRUCTOR, new Writer(Ids::CHEMISTRY_TABLE))); - $this->map(VanillaBlocks::ELEMENT_COPERNICIUM(), fn() => new Writer(Ids::ELEMENT_112)); - $this->map(VanillaBlocks::ELEMENT_COPPER(), fn() => new Writer(Ids::ELEMENT_29)); - $this->map(VanillaBlocks::ELEMENT_CURIUM(), fn() => new Writer(Ids::ELEMENT_96)); - $this->map(VanillaBlocks::ELEMENT_DARMSTADTIUM(), fn() => new Writer(Ids::ELEMENT_110)); - $this->map(VanillaBlocks::ELEMENT_DUBNIUM(), fn() => new Writer(Ids::ELEMENT_105)); - $this->map(VanillaBlocks::ELEMENT_DYSPROSIUM(), fn() => new Writer(Ids::ELEMENT_66)); - $this->map(VanillaBlocks::ELEMENT_EINSTEINIUM(), fn() => new Writer(Ids::ELEMENT_99)); - $this->map(VanillaBlocks::ELEMENT_ERBIUM(), fn() => new Writer(Ids::ELEMENT_68)); - $this->map(VanillaBlocks::ELEMENT_EUROPIUM(), fn() => new Writer(Ids::ELEMENT_63)); - $this->map(VanillaBlocks::ELEMENT_FERMIUM(), fn() => new Writer(Ids::ELEMENT_100)); - $this->map(VanillaBlocks::ELEMENT_FLEROVIUM(), fn() => new Writer(Ids::ELEMENT_114)); - $this->map(VanillaBlocks::ELEMENT_FLUORINE(), fn() => new Writer(Ids::ELEMENT_9)); - $this->map(VanillaBlocks::ELEMENT_FRANCIUM(), fn() => new Writer(Ids::ELEMENT_87)); - $this->map(VanillaBlocks::ELEMENT_GADOLINIUM(), fn() => new Writer(Ids::ELEMENT_64)); - $this->map(VanillaBlocks::ELEMENT_GALLIUM(), fn() => new Writer(Ids::ELEMENT_31)); - $this->map(VanillaBlocks::ELEMENT_GERMANIUM(), fn() => new Writer(Ids::ELEMENT_32)); - $this->map(VanillaBlocks::ELEMENT_GOLD(), fn() => new Writer(Ids::ELEMENT_79)); - $this->map(VanillaBlocks::ELEMENT_HAFNIUM(), fn() => new Writer(Ids::ELEMENT_72)); - $this->map(VanillaBlocks::ELEMENT_HASSIUM(), fn() => new Writer(Ids::ELEMENT_108)); - $this->map(VanillaBlocks::ELEMENT_HELIUM(), fn() => new Writer(Ids::ELEMENT_2)); - $this->map(VanillaBlocks::ELEMENT_HOLMIUM(), fn() => new Writer(Ids::ELEMENT_67)); - $this->map(VanillaBlocks::ELEMENT_HYDROGEN(), fn() => new Writer(Ids::ELEMENT_1)); - $this->map(VanillaBlocks::ELEMENT_INDIUM(), fn() => new Writer(Ids::ELEMENT_49)); - $this->map(VanillaBlocks::ELEMENT_IODINE(), fn() => new Writer(Ids::ELEMENT_53)); - $this->map(VanillaBlocks::ELEMENT_IRIDIUM(), fn() => new Writer(Ids::ELEMENT_77)); - $this->map(VanillaBlocks::ELEMENT_IRON(), fn() => new Writer(Ids::ELEMENT_26)); - $this->map(VanillaBlocks::ELEMENT_KRYPTON(), fn() => new Writer(Ids::ELEMENT_36)); - $this->map(VanillaBlocks::ELEMENT_LANTHANUM(), fn() => new Writer(Ids::ELEMENT_57)); - $this->map(VanillaBlocks::ELEMENT_LAWRENCIUM(), fn() => new Writer(Ids::ELEMENT_103)); - $this->map(VanillaBlocks::ELEMENT_LEAD(), fn() => new Writer(Ids::ELEMENT_82)); - $this->map(VanillaBlocks::ELEMENT_LITHIUM(), fn() => new Writer(Ids::ELEMENT_3)); - $this->map(VanillaBlocks::ELEMENT_LIVERMORIUM(), fn() => new Writer(Ids::ELEMENT_116)); - $this->map(VanillaBlocks::ELEMENT_LUTETIUM(), fn() => new Writer(Ids::ELEMENT_71)); - $this->map(VanillaBlocks::ELEMENT_MAGNESIUM(), fn() => new Writer(Ids::ELEMENT_12)); - $this->map(VanillaBlocks::ELEMENT_MANGANESE(), fn() => new Writer(Ids::ELEMENT_25)); - $this->map(VanillaBlocks::ELEMENT_MEITNERIUM(), fn() => new Writer(Ids::ELEMENT_109)); - $this->map(VanillaBlocks::ELEMENT_MENDELEVIUM(), fn() => new Writer(Ids::ELEMENT_101)); - $this->map(VanillaBlocks::ELEMENT_MERCURY(), fn() => new Writer(Ids::ELEMENT_80)); - $this->map(VanillaBlocks::ELEMENT_MOLYBDENUM(), fn() => new Writer(Ids::ELEMENT_42)); - $this->map(VanillaBlocks::ELEMENT_MOSCOVIUM(), fn() => new Writer(Ids::ELEMENT_115)); - $this->map(VanillaBlocks::ELEMENT_NEODYMIUM(), fn() => new Writer(Ids::ELEMENT_60)); - $this->map(VanillaBlocks::ELEMENT_NEON(), fn() => new Writer(Ids::ELEMENT_10)); - $this->map(VanillaBlocks::ELEMENT_NEPTUNIUM(), fn() => new Writer(Ids::ELEMENT_93)); - $this->map(VanillaBlocks::ELEMENT_NICKEL(), fn() => new Writer(Ids::ELEMENT_28)); - $this->map(VanillaBlocks::ELEMENT_NIHONIUM(), fn() => new Writer(Ids::ELEMENT_113)); - $this->map(VanillaBlocks::ELEMENT_NIOBIUM(), fn() => new Writer(Ids::ELEMENT_41)); - $this->map(VanillaBlocks::ELEMENT_NITROGEN(), fn() => new Writer(Ids::ELEMENT_7)); - $this->map(VanillaBlocks::ELEMENT_NOBELIUM(), fn() => new Writer(Ids::ELEMENT_102)); - $this->map(VanillaBlocks::ELEMENT_OGANESSON(), fn() => new Writer(Ids::ELEMENT_118)); - $this->map(VanillaBlocks::ELEMENT_OSMIUM(), fn() => new Writer(Ids::ELEMENT_76)); - $this->map(VanillaBlocks::ELEMENT_OXYGEN(), fn() => new Writer(Ids::ELEMENT_8)); - $this->map(VanillaBlocks::ELEMENT_PALLADIUM(), fn() => new Writer(Ids::ELEMENT_46)); - $this->map(VanillaBlocks::ELEMENT_PHOSPHORUS(), fn() => new Writer(Ids::ELEMENT_15)); - $this->map(VanillaBlocks::ELEMENT_PLATINUM(), fn() => new Writer(Ids::ELEMENT_78)); - $this->map(VanillaBlocks::ELEMENT_PLUTONIUM(), fn() => new Writer(Ids::ELEMENT_94)); - $this->map(VanillaBlocks::ELEMENT_POLONIUM(), fn() => new Writer(Ids::ELEMENT_84)); - $this->map(VanillaBlocks::ELEMENT_POTASSIUM(), fn() => new Writer(Ids::ELEMENT_19)); - $this->map(VanillaBlocks::ELEMENT_PRASEODYMIUM(), fn() => new Writer(Ids::ELEMENT_59)); - $this->map(VanillaBlocks::ELEMENT_PROMETHIUM(), fn() => new Writer(Ids::ELEMENT_61)); - $this->map(VanillaBlocks::ELEMENT_PROTACTINIUM(), fn() => new Writer(Ids::ELEMENT_91)); - $this->map(VanillaBlocks::ELEMENT_RADIUM(), fn() => new Writer(Ids::ELEMENT_88)); - $this->map(VanillaBlocks::ELEMENT_RADON(), fn() => new Writer(Ids::ELEMENT_86)); - $this->map(VanillaBlocks::ELEMENT_RHENIUM(), fn() => new Writer(Ids::ELEMENT_75)); - $this->map(VanillaBlocks::ELEMENT_RHODIUM(), fn() => new Writer(Ids::ELEMENT_45)); - $this->map(VanillaBlocks::ELEMENT_ROENTGENIUM(), fn() => new Writer(Ids::ELEMENT_111)); - $this->map(VanillaBlocks::ELEMENT_RUBIDIUM(), fn() => new Writer(Ids::ELEMENT_37)); - $this->map(VanillaBlocks::ELEMENT_RUTHENIUM(), fn() => new Writer(Ids::ELEMENT_44)); - $this->map(VanillaBlocks::ELEMENT_RUTHERFORDIUM(), fn() => new Writer(Ids::ELEMENT_104)); - $this->map(VanillaBlocks::ELEMENT_SAMARIUM(), fn() => new Writer(Ids::ELEMENT_62)); - $this->map(VanillaBlocks::ELEMENT_SCANDIUM(), fn() => new Writer(Ids::ELEMENT_21)); - $this->map(VanillaBlocks::ELEMENT_SEABORGIUM(), fn() => new Writer(Ids::ELEMENT_106)); - $this->map(VanillaBlocks::ELEMENT_SELENIUM(), fn() => new Writer(Ids::ELEMENT_34)); - $this->map(VanillaBlocks::ELEMENT_SILICON(), fn() => new Writer(Ids::ELEMENT_14)); - $this->map(VanillaBlocks::ELEMENT_SILVER(), fn() => new Writer(Ids::ELEMENT_47)); - $this->map(VanillaBlocks::ELEMENT_SODIUM(), fn() => new Writer(Ids::ELEMENT_11)); - $this->map(VanillaBlocks::ELEMENT_STRONTIUM(), fn() => new Writer(Ids::ELEMENT_38)); - $this->map(VanillaBlocks::ELEMENT_SULFUR(), fn() => new Writer(Ids::ELEMENT_16)); - $this->map(VanillaBlocks::ELEMENT_TANTALUM(), fn() => new Writer(Ids::ELEMENT_73)); - $this->map(VanillaBlocks::ELEMENT_TECHNETIUM(), fn() => new Writer(Ids::ELEMENT_43)); - $this->map(VanillaBlocks::ELEMENT_TELLURIUM(), fn() => new Writer(Ids::ELEMENT_52)); - $this->map(VanillaBlocks::ELEMENT_TENNESSINE(), fn() => new Writer(Ids::ELEMENT_117)); - $this->map(VanillaBlocks::ELEMENT_TERBIUM(), fn() => new Writer(Ids::ELEMENT_65)); - $this->map(VanillaBlocks::ELEMENT_THALLIUM(), fn() => new Writer(Ids::ELEMENT_81)); - $this->map(VanillaBlocks::ELEMENT_THORIUM(), fn() => new Writer(Ids::ELEMENT_90)); - $this->map(VanillaBlocks::ELEMENT_THULIUM(), fn() => new Writer(Ids::ELEMENT_69)); - $this->map(VanillaBlocks::ELEMENT_TIN(), fn() => new Writer(Ids::ELEMENT_50)); - $this->map(VanillaBlocks::ELEMENT_TITANIUM(), fn() => new Writer(Ids::ELEMENT_22)); - $this->map(VanillaBlocks::ELEMENT_TUNGSTEN(), fn() => new Writer(Ids::ELEMENT_74)); - $this->map(VanillaBlocks::ELEMENT_URANIUM(), fn() => new Writer(Ids::ELEMENT_92)); - $this->map(VanillaBlocks::ELEMENT_VANADIUM(), fn() => new Writer(Ids::ELEMENT_23)); - $this->map(VanillaBlocks::ELEMENT_XENON(), fn() => new Writer(Ids::ELEMENT_54)); - $this->map(VanillaBlocks::ELEMENT_YTTERBIUM(), fn() => new Writer(Ids::ELEMENT_70)); - $this->map(VanillaBlocks::ELEMENT_YTTRIUM(), fn() => new Writer(Ids::ELEMENT_39)); - $this->map(VanillaBlocks::ELEMENT_ZERO(), fn() => new Writer(Ids::ELEMENT_0)); - $this->map(VanillaBlocks::ELEMENT_ZINC(), fn() => new Writer(Ids::ELEMENT_30)); - $this->map(VanillaBlocks::ELEMENT_ZIRCONIUM(), fn() => new Writer(Ids::ELEMENT_40)); - $this->map(VanillaBlocks::EMERALD(), fn() => new Writer(Ids::EMERALD_BLOCK)); - $this->map(VanillaBlocks::EMERALD_ORE(), fn() => new Writer(Ids::EMERALD_ORE)); - $this->map(VanillaBlocks::ENCHANTING_TABLE(), fn() => new Writer(Ids::ENCHANTING_TABLE)); - $this->map(VanillaBlocks::ENDER_CHEST(), function(EnderChest $block) : Writer{ + $this->map(Blocks::ELEMENT_ACTINIUM(), fn() => new Writer(Ids::ELEMENT_89)); + $this->map(Blocks::ELEMENT_ALUMINUM(), fn() => new Writer(Ids::ELEMENT_13)); + $this->map(Blocks::ELEMENT_AMERICIUM(), fn() => new Writer(Ids::ELEMENT_95)); + $this->map(Blocks::ELEMENT_ANTIMONY(), fn() => new Writer(Ids::ELEMENT_51)); + $this->map(Blocks::ELEMENT_ARGON(), fn() => new Writer(Ids::ELEMENT_18)); + $this->map(Blocks::ELEMENT_ARSENIC(), fn() => new Writer(Ids::ELEMENT_33)); + $this->map(Blocks::ELEMENT_ASTATINE(), fn() => new Writer(Ids::ELEMENT_85)); + $this->map(Blocks::ELEMENT_BARIUM(), fn() => new Writer(Ids::ELEMENT_56)); + $this->map(Blocks::ELEMENT_BERKELIUM(), fn() => new Writer(Ids::ELEMENT_97)); + $this->map(Blocks::ELEMENT_BERYLLIUM(), fn() => new Writer(Ids::ELEMENT_4)); + $this->map(Blocks::ELEMENT_BISMUTH(), fn() => new Writer(Ids::ELEMENT_83)); + $this->map(Blocks::ELEMENT_BOHRIUM(), fn() => new Writer(Ids::ELEMENT_107)); + $this->map(Blocks::ELEMENT_BORON(), fn() => new Writer(Ids::ELEMENT_5)); + $this->map(Blocks::ELEMENT_BROMINE(), fn() => new Writer(Ids::ELEMENT_35)); + $this->map(Blocks::ELEMENT_CADMIUM(), fn() => new Writer(Ids::ELEMENT_48)); + $this->map(Blocks::ELEMENT_CALCIUM(), fn() => new Writer(Ids::ELEMENT_20)); + $this->map(Blocks::ELEMENT_CALIFORNIUM(), fn() => new Writer(Ids::ELEMENT_98)); + $this->map(Blocks::ELEMENT_CARBON(), fn() => new Writer(Ids::ELEMENT_6)); + $this->map(Blocks::ELEMENT_CERIUM(), fn() => new Writer(Ids::ELEMENT_58)); + $this->map(Blocks::ELEMENT_CESIUM(), fn() => new Writer(Ids::ELEMENT_55)); + $this->map(Blocks::ELEMENT_CHLORINE(), fn() => new Writer(Ids::ELEMENT_17)); + $this->map(Blocks::ELEMENT_CHROMIUM(), fn() => new Writer(Ids::ELEMENT_24)); + $this->map(Blocks::ELEMENT_COBALT(), fn() => new Writer(Ids::ELEMENT_27)); + $this->map(Blocks::ELEMENT_CONSTRUCTOR(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_ELEMENT_CONSTRUCTOR, new Writer(Ids::CHEMISTRY_TABLE))); + $this->map(Blocks::ELEMENT_COPERNICIUM(), fn() => new Writer(Ids::ELEMENT_112)); + $this->map(Blocks::ELEMENT_COPPER(), fn() => new Writer(Ids::ELEMENT_29)); + $this->map(Blocks::ELEMENT_CURIUM(), fn() => new Writer(Ids::ELEMENT_96)); + $this->map(Blocks::ELEMENT_DARMSTADTIUM(), fn() => new Writer(Ids::ELEMENT_110)); + $this->map(Blocks::ELEMENT_DUBNIUM(), fn() => new Writer(Ids::ELEMENT_105)); + $this->map(Blocks::ELEMENT_DYSPROSIUM(), fn() => new Writer(Ids::ELEMENT_66)); + $this->map(Blocks::ELEMENT_EINSTEINIUM(), fn() => new Writer(Ids::ELEMENT_99)); + $this->map(Blocks::ELEMENT_ERBIUM(), fn() => new Writer(Ids::ELEMENT_68)); + $this->map(Blocks::ELEMENT_EUROPIUM(), fn() => new Writer(Ids::ELEMENT_63)); + $this->map(Blocks::ELEMENT_FERMIUM(), fn() => new Writer(Ids::ELEMENT_100)); + $this->map(Blocks::ELEMENT_FLEROVIUM(), fn() => new Writer(Ids::ELEMENT_114)); + $this->map(Blocks::ELEMENT_FLUORINE(), fn() => new Writer(Ids::ELEMENT_9)); + $this->map(Blocks::ELEMENT_FRANCIUM(), fn() => new Writer(Ids::ELEMENT_87)); + $this->map(Blocks::ELEMENT_GADOLINIUM(), fn() => new Writer(Ids::ELEMENT_64)); + $this->map(Blocks::ELEMENT_GALLIUM(), fn() => new Writer(Ids::ELEMENT_31)); + $this->map(Blocks::ELEMENT_GERMANIUM(), fn() => new Writer(Ids::ELEMENT_32)); + $this->map(Blocks::ELEMENT_GOLD(), fn() => new Writer(Ids::ELEMENT_79)); + $this->map(Blocks::ELEMENT_HAFNIUM(), fn() => new Writer(Ids::ELEMENT_72)); + $this->map(Blocks::ELEMENT_HASSIUM(), fn() => new Writer(Ids::ELEMENT_108)); + $this->map(Blocks::ELEMENT_HELIUM(), fn() => new Writer(Ids::ELEMENT_2)); + $this->map(Blocks::ELEMENT_HOLMIUM(), fn() => new Writer(Ids::ELEMENT_67)); + $this->map(Blocks::ELEMENT_HYDROGEN(), fn() => new Writer(Ids::ELEMENT_1)); + $this->map(Blocks::ELEMENT_INDIUM(), fn() => new Writer(Ids::ELEMENT_49)); + $this->map(Blocks::ELEMENT_IODINE(), fn() => new Writer(Ids::ELEMENT_53)); + $this->map(Blocks::ELEMENT_IRIDIUM(), fn() => new Writer(Ids::ELEMENT_77)); + $this->map(Blocks::ELEMENT_IRON(), fn() => new Writer(Ids::ELEMENT_26)); + $this->map(Blocks::ELEMENT_KRYPTON(), fn() => new Writer(Ids::ELEMENT_36)); + $this->map(Blocks::ELEMENT_LANTHANUM(), fn() => new Writer(Ids::ELEMENT_57)); + $this->map(Blocks::ELEMENT_LAWRENCIUM(), fn() => new Writer(Ids::ELEMENT_103)); + $this->map(Blocks::ELEMENT_LEAD(), fn() => new Writer(Ids::ELEMENT_82)); + $this->map(Blocks::ELEMENT_LITHIUM(), fn() => new Writer(Ids::ELEMENT_3)); + $this->map(Blocks::ELEMENT_LIVERMORIUM(), fn() => new Writer(Ids::ELEMENT_116)); + $this->map(Blocks::ELEMENT_LUTETIUM(), fn() => new Writer(Ids::ELEMENT_71)); + $this->map(Blocks::ELEMENT_MAGNESIUM(), fn() => new Writer(Ids::ELEMENT_12)); + $this->map(Blocks::ELEMENT_MANGANESE(), fn() => new Writer(Ids::ELEMENT_25)); + $this->map(Blocks::ELEMENT_MEITNERIUM(), fn() => new Writer(Ids::ELEMENT_109)); + $this->map(Blocks::ELEMENT_MENDELEVIUM(), fn() => new Writer(Ids::ELEMENT_101)); + $this->map(Blocks::ELEMENT_MERCURY(), fn() => new Writer(Ids::ELEMENT_80)); + $this->map(Blocks::ELEMENT_MOLYBDENUM(), fn() => new Writer(Ids::ELEMENT_42)); + $this->map(Blocks::ELEMENT_MOSCOVIUM(), fn() => new Writer(Ids::ELEMENT_115)); + $this->map(Blocks::ELEMENT_NEODYMIUM(), fn() => new Writer(Ids::ELEMENT_60)); + $this->map(Blocks::ELEMENT_NEON(), fn() => new Writer(Ids::ELEMENT_10)); + $this->map(Blocks::ELEMENT_NEPTUNIUM(), fn() => new Writer(Ids::ELEMENT_93)); + $this->map(Blocks::ELEMENT_NICKEL(), fn() => new Writer(Ids::ELEMENT_28)); + $this->map(Blocks::ELEMENT_NIHONIUM(), fn() => new Writer(Ids::ELEMENT_113)); + $this->map(Blocks::ELEMENT_NIOBIUM(), fn() => new Writer(Ids::ELEMENT_41)); + $this->map(Blocks::ELEMENT_NITROGEN(), fn() => new Writer(Ids::ELEMENT_7)); + $this->map(Blocks::ELEMENT_NOBELIUM(), fn() => new Writer(Ids::ELEMENT_102)); + $this->map(Blocks::ELEMENT_OGANESSON(), fn() => new Writer(Ids::ELEMENT_118)); + $this->map(Blocks::ELEMENT_OSMIUM(), fn() => new Writer(Ids::ELEMENT_76)); + $this->map(Blocks::ELEMENT_OXYGEN(), fn() => new Writer(Ids::ELEMENT_8)); + $this->map(Blocks::ELEMENT_PALLADIUM(), fn() => new Writer(Ids::ELEMENT_46)); + $this->map(Blocks::ELEMENT_PHOSPHORUS(), fn() => new Writer(Ids::ELEMENT_15)); + $this->map(Blocks::ELEMENT_PLATINUM(), fn() => new Writer(Ids::ELEMENT_78)); + $this->map(Blocks::ELEMENT_PLUTONIUM(), fn() => new Writer(Ids::ELEMENT_94)); + $this->map(Blocks::ELEMENT_POLONIUM(), fn() => new Writer(Ids::ELEMENT_84)); + $this->map(Blocks::ELEMENT_POTASSIUM(), fn() => new Writer(Ids::ELEMENT_19)); + $this->map(Blocks::ELEMENT_PRASEODYMIUM(), fn() => new Writer(Ids::ELEMENT_59)); + $this->map(Blocks::ELEMENT_PROMETHIUM(), fn() => new Writer(Ids::ELEMENT_61)); + $this->map(Blocks::ELEMENT_PROTACTINIUM(), fn() => new Writer(Ids::ELEMENT_91)); + $this->map(Blocks::ELEMENT_RADIUM(), fn() => new Writer(Ids::ELEMENT_88)); + $this->map(Blocks::ELEMENT_RADON(), fn() => new Writer(Ids::ELEMENT_86)); + $this->map(Blocks::ELEMENT_RHENIUM(), fn() => new Writer(Ids::ELEMENT_75)); + $this->map(Blocks::ELEMENT_RHODIUM(), fn() => new Writer(Ids::ELEMENT_45)); + $this->map(Blocks::ELEMENT_ROENTGENIUM(), fn() => new Writer(Ids::ELEMENT_111)); + $this->map(Blocks::ELEMENT_RUBIDIUM(), fn() => new Writer(Ids::ELEMENT_37)); + $this->map(Blocks::ELEMENT_RUTHENIUM(), fn() => new Writer(Ids::ELEMENT_44)); + $this->map(Blocks::ELEMENT_RUTHERFORDIUM(), fn() => new Writer(Ids::ELEMENT_104)); + $this->map(Blocks::ELEMENT_SAMARIUM(), fn() => new Writer(Ids::ELEMENT_62)); + $this->map(Blocks::ELEMENT_SCANDIUM(), fn() => new Writer(Ids::ELEMENT_21)); + $this->map(Blocks::ELEMENT_SEABORGIUM(), fn() => new Writer(Ids::ELEMENT_106)); + $this->map(Blocks::ELEMENT_SELENIUM(), fn() => new Writer(Ids::ELEMENT_34)); + $this->map(Blocks::ELEMENT_SILICON(), fn() => new Writer(Ids::ELEMENT_14)); + $this->map(Blocks::ELEMENT_SILVER(), fn() => new Writer(Ids::ELEMENT_47)); + $this->map(Blocks::ELEMENT_SODIUM(), fn() => new Writer(Ids::ELEMENT_11)); + $this->map(Blocks::ELEMENT_STRONTIUM(), fn() => new Writer(Ids::ELEMENT_38)); + $this->map(Blocks::ELEMENT_SULFUR(), fn() => new Writer(Ids::ELEMENT_16)); + $this->map(Blocks::ELEMENT_TANTALUM(), fn() => new Writer(Ids::ELEMENT_73)); + $this->map(Blocks::ELEMENT_TECHNETIUM(), fn() => new Writer(Ids::ELEMENT_43)); + $this->map(Blocks::ELEMENT_TELLURIUM(), fn() => new Writer(Ids::ELEMENT_52)); + $this->map(Blocks::ELEMENT_TENNESSINE(), fn() => new Writer(Ids::ELEMENT_117)); + $this->map(Blocks::ELEMENT_TERBIUM(), fn() => new Writer(Ids::ELEMENT_65)); + $this->map(Blocks::ELEMENT_THALLIUM(), fn() => new Writer(Ids::ELEMENT_81)); + $this->map(Blocks::ELEMENT_THORIUM(), fn() => new Writer(Ids::ELEMENT_90)); + $this->map(Blocks::ELEMENT_THULIUM(), fn() => new Writer(Ids::ELEMENT_69)); + $this->map(Blocks::ELEMENT_TIN(), fn() => new Writer(Ids::ELEMENT_50)); + $this->map(Blocks::ELEMENT_TITANIUM(), fn() => new Writer(Ids::ELEMENT_22)); + $this->map(Blocks::ELEMENT_TUNGSTEN(), fn() => new Writer(Ids::ELEMENT_74)); + $this->map(Blocks::ELEMENT_URANIUM(), fn() => new Writer(Ids::ELEMENT_92)); + $this->map(Blocks::ELEMENT_VANADIUM(), fn() => new Writer(Ids::ELEMENT_23)); + $this->map(Blocks::ELEMENT_XENON(), fn() => new Writer(Ids::ELEMENT_54)); + $this->map(Blocks::ELEMENT_YTTERBIUM(), fn() => new Writer(Ids::ELEMENT_70)); + $this->map(Blocks::ELEMENT_YTTRIUM(), fn() => new Writer(Ids::ELEMENT_39)); + $this->map(Blocks::ELEMENT_ZERO(), fn() => new Writer(Ids::ELEMENT_0)); + $this->map(Blocks::ELEMENT_ZINC(), fn() => new Writer(Ids::ELEMENT_30)); + $this->map(Blocks::ELEMENT_ZIRCONIUM(), fn() => new Writer(Ids::ELEMENT_40)); + $this->map(Blocks::EMERALD(), fn() => new Writer(Ids::EMERALD_BLOCK)); + $this->map(Blocks::EMERALD_ORE(), fn() => new Writer(Ids::EMERALD_ORE)); + $this->map(Blocks::ENCHANTING_TABLE(), fn() => new Writer(Ids::ENCHANTING_TABLE)); + $this->map(Blocks::ENDER_CHEST(), function(EnderChest $block) : Writer{ return Writer::create(Ids::ENDER_CHEST) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::END_PORTAL_FRAME(), function(EndPortalFrame $block) : Writer{ + $this->map(Blocks::END_PORTAL_FRAME(), function(EndPortalFrame $block) : Writer{ return Writer::create(Ids::END_PORTAL_FRAME) - ->writeBool(BlockStateNames::END_PORTAL_EYE_BIT, $block->hasEye()) + ->writeBool(StateNames::END_PORTAL_EYE_BIT, $block->hasEye()) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::END_ROD(), function(EndRod $block) : Writer{ + $this->map(Blocks::END_ROD(), function(EndRod $block) : Writer{ return Writer::create(Ids::END_ROD) ->writeEndRodFacingDirection($block->getFacing()); }); - $this->map(VanillaBlocks::END_STONE(), fn() => new Writer(Ids::END_STONE)); - $this->map(VanillaBlocks::END_STONE_BRICKS(), fn() => new Writer(Ids::END_BRICKS)); - $this->map(VanillaBlocks::END_STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_END_STONE_BRICK)); - $this->map(VanillaBlocks::END_STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::END_BRICK_STAIRS))); - $this->map(VanillaBlocks::END_STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_END_BRICK)); - $this->map(VanillaBlocks::FAKE_WOODEN_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_WOOD)); - $this->map(VanillaBlocks::FARMLAND(), function(Farmland $block) : Writer{ + $this->map(Blocks::END_STONE(), fn() => new Writer(Ids::END_STONE)); + $this->map(Blocks::END_STONE_BRICKS(), fn() => new Writer(Ids::END_BRICKS)); + $this->map(Blocks::END_STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_END_STONE_BRICK)); + $this->map(Blocks::END_STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::END_BRICK_STAIRS))); + $this->map(Blocks::END_STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_END_BRICK)); + $this->map(Blocks::FAKE_WOODEN_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_WOOD)); + $this->map(Blocks::FARMLAND(), function(Farmland $block) : Writer{ return Writer::create(Ids::FARMLAND) - ->writeInt(BlockStateNames::MOISTURIZED_AMOUNT, $block->getWetness()); + ->writeInt(StateNames::MOISTURIZED_AMOUNT, $block->getWetness()); }); - $this->map(VanillaBlocks::FERN(), fn() => Writer::create(Ids::TALLGRASS) - ->writeString(BlockStateNames::TALL_GRASS_TYPE, StringValues::TALL_GRASS_TYPE_FERN)); - $this->map(VanillaBlocks::FIRE(), function(Fire $block) : Writer{ + $this->map(Blocks::FERN(), fn() => Writer::create(Ids::TALLGRASS) + ->writeString(StateNames::TALL_GRASS_TYPE, StringValues::TALL_GRASS_TYPE_FERN)); + $this->map(Blocks::FIRE(), function(Fire $block) : Writer{ return Writer::create(Ids::FIRE) - ->writeInt(BlockStateNames::AGE, $block->getAge()); + ->writeInt(StateNames::AGE, $block->getAge()); }); - $this->map(VanillaBlocks::FLETCHING_TABLE(), fn() => new Writer(Ids::FLETCHING_TABLE)); - $this->map(VanillaBlocks::FLOWER_POT(), function() : Writer{ + $this->map(Blocks::FLETCHING_TABLE(), fn() => new Writer(Ids::FLETCHING_TABLE)); + $this->map(Blocks::FLOWER_POT(), function() : Writer{ return Writer::create(Ids::FLOWER_POT) - ->writeBool(BlockStateNames::UPDATE_BIT, true); //to keep MCPE happy + ->writeBool(StateNames::UPDATE_BIT, true); //to keep MCPE happy }); - $this->map(VanillaBlocks::FROSTED_ICE(), function(FrostedIce $block) : Writer{ + $this->map(Blocks::FROSTED_ICE(), function(FrostedIce $block) : Writer{ return Writer::create(Ids::FROSTED_ICE) - ->writeInt(BlockStateNames::AGE, $block->getAge()); + ->writeInt(StateNames::AGE, $block->getAge()); }); - $this->map(VanillaBlocks::FURNACE(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::FURNACE, Ids::LIT_FURNACE)); - $this->map(VanillaBlocks::GLASS(), fn() => new Writer(Ids::GLASS)); - $this->map(VanillaBlocks::GLASS_PANE(), fn() => new Writer(Ids::GLASS_PANE)); - $this->map(VanillaBlocks::GLOWING_OBSIDIAN(), fn() => new Writer(Ids::GLOWINGOBSIDIAN)); - $this->map(VanillaBlocks::GLOWSTONE(), fn() => new Writer(Ids::GLOWSTONE)); - $this->map(VanillaBlocks::GOLD(), fn() => new Writer(Ids::GOLD_BLOCK)); - $this->map(VanillaBlocks::GOLD_ORE(), fn() => new Writer(Ids::GOLD_ORE)); - $this->map(VanillaBlocks::GRANITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_GRANITE)); - $this->map(VanillaBlocks::GRANITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_GRANITE)); - $this->map(VanillaBlocks::GRANITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::GRANITE_STAIRS))); - $this->map(VanillaBlocks::GRANITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_GRANITE)); - $this->map(VanillaBlocks::GRASS(), fn() => new Writer(Ids::GRASS)); - $this->map(VanillaBlocks::GRASS_PATH(), fn() => new Writer(Ids::GRASS_PATH)); - $this->map(VanillaBlocks::GRAVEL(), fn() => new Writer(Ids::GRAVEL)); - $this->map(VanillaBlocks::GRAY_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::GRAY_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::GREEN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::GREEN_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::GREEN_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, true, Writer::create(Ids::COLORED_TORCH_RG))); - $this->map(VanillaBlocks::HARDENED_CLAY(), fn() => new Writer(Ids::HARDENED_CLAY)); - $this->map(VanillaBlocks::HARDENED_GLASS(), fn() => new Writer(Ids::HARD_GLASS)); - $this->map(VanillaBlocks::HARDENED_GLASS_PANE(), fn() => new Writer(Ids::HARD_GLASS_PANE)); - $this->map(VanillaBlocks::HAY_BALE(), function(HayBale $block) : Writer{ + $this->map(Blocks::FURNACE(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::FURNACE, Ids::LIT_FURNACE)); + $this->map(Blocks::GLASS(), fn() => new Writer(Ids::GLASS)); + $this->map(Blocks::GLASS_PANE(), fn() => new Writer(Ids::GLASS_PANE)); + $this->map(Blocks::GLOWING_OBSIDIAN(), fn() => new Writer(Ids::GLOWINGOBSIDIAN)); + $this->map(Blocks::GLOWSTONE(), fn() => new Writer(Ids::GLOWSTONE)); + $this->map(Blocks::GOLD(), fn() => new Writer(Ids::GOLD_BLOCK)); + $this->map(Blocks::GOLD_ORE(), fn() => new Writer(Ids::GOLD_ORE)); + $this->map(Blocks::GRANITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_GRANITE)); + $this->map(Blocks::GRANITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_GRANITE)); + $this->map(Blocks::GRANITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::GRANITE_STAIRS))); + $this->map(Blocks::GRANITE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_GRANITE)); + $this->map(Blocks::GRASS(), fn() => new Writer(Ids::GRASS)); + $this->map(Blocks::GRASS_PATH(), fn() => new Writer(Ids::GRASS_PATH)); + $this->map(Blocks::GRAVEL(), fn() => new Writer(Ids::GRAVEL)); + $this->map(Blocks::GRAY_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::GRAY_GLAZED_TERRACOTTA))); + $this->map(Blocks::GREEN_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::GREEN_GLAZED_TERRACOTTA))); + $this->map(Blocks::GREEN_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, true, Writer::create(Ids::COLORED_TORCH_RG))); + $this->map(Blocks::HARDENED_CLAY(), fn() => new Writer(Ids::HARDENED_CLAY)); + $this->map(Blocks::HARDENED_GLASS(), fn() => new Writer(Ids::HARD_GLASS)); + $this->map(Blocks::HARDENED_GLASS_PANE(), fn() => new Writer(Ids::HARD_GLASS_PANE)); + $this->map(Blocks::HAY_BALE(), function(HayBale $block) : Writer{ return Writer::create(Ids::HAY_BLOCK) - ->writeInt(BlockStateNames::DEPRECATED, 0) + ->writeInt(StateNames::DEPRECATED, 0) ->writePillarAxis($block->getAxis()); }); - $this->map(VanillaBlocks::HOPPER(), function(Hopper $block) : Writer{ + $this->map(Blocks::HOPPER(), function(Hopper $block) : Writer{ return Writer::create(Ids::HOPPER) - ->writeBool(BlockStateNames::TOGGLE_BIT, $block->isPowered()) + ->writeBool(StateNames::TOGGLE_BIT, $block->isPowered()) ->writeFacingWithoutUp($block->getFacing()); }); - $this->map(VanillaBlocks::ICE(), fn() => new Writer(Ids::ICE)); - $this->map(VanillaBlocks::INFESTED_CHISELED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_CHISELED_STONE_BRICK)); - $this->map(VanillaBlocks::INFESTED_COBBLESTONE(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_COBBLESTONE)); - $this->map(VanillaBlocks::INFESTED_CRACKED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_CRACKED_STONE_BRICK)); - $this->map(VanillaBlocks::INFESTED_MOSSY_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_MOSSY_STONE_BRICK)); - $this->map(VanillaBlocks::INFESTED_STONE(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_STONE)); - $this->map(VanillaBlocks::INFESTED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) - ->writeString(BlockStateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_STONE_BRICK)); - $this->map(VanillaBlocks::INFO_UPDATE(), fn() => new Writer(Ids::INFO_UPDATE)); - $this->map(VanillaBlocks::INFO_UPDATE2(), fn() => new Writer(Ids::INFO_UPDATE2)); - $this->map(VanillaBlocks::INVISIBLE_BEDROCK(), fn() => new Writer(Ids::INVISIBLEBEDROCK)); - $this->map(VanillaBlocks::IRON(), fn() => new Writer(Ids::IRON_BLOCK)); - $this->map(VanillaBlocks::IRON_BARS(), fn() => new Writer(Ids::IRON_BARS)); - $this->map(VanillaBlocks::IRON_DOOR(), fn(Door $block) => Helper::encodeDoor($block, new Writer(Ids::IRON_DOOR))); - $this->map(VanillaBlocks::IRON_ORE(), fn() => new Writer(Ids::IRON_ORE)); - $this->map(VanillaBlocks::IRON_TRAPDOOR(), fn(Trapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::IRON_TRAPDOOR))); - $this->map(VanillaBlocks::ITEM_FRAME(), function(ItemFrame $block) : Writer{ + $this->map(Blocks::ICE(), fn() => new Writer(Ids::ICE)); + $this->map(Blocks::INFESTED_CHISELED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_CHISELED_STONE_BRICK)); + $this->map(Blocks::INFESTED_COBBLESTONE(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_COBBLESTONE)); + $this->map(Blocks::INFESTED_CRACKED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_CRACKED_STONE_BRICK)); + $this->map(Blocks::INFESTED_MOSSY_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_MOSSY_STONE_BRICK)); + $this->map(Blocks::INFESTED_STONE(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_STONE)); + $this->map(Blocks::INFESTED_STONE_BRICK(), fn() => Writer::create(Ids::MONSTER_EGG) + ->writeString(StateNames::MONSTER_EGG_STONE_TYPE, StringValues::MONSTER_EGG_STONE_TYPE_STONE_BRICK)); + $this->map(Blocks::INFO_UPDATE(), fn() => new Writer(Ids::INFO_UPDATE)); + $this->map(Blocks::INFO_UPDATE2(), fn() => new Writer(Ids::INFO_UPDATE2)); + $this->map(Blocks::INVISIBLE_BEDROCK(), fn() => new Writer(Ids::INVISIBLEBEDROCK)); + $this->map(Blocks::IRON(), fn() => new Writer(Ids::IRON_BLOCK)); + $this->map(Blocks::IRON_BARS(), fn() => new Writer(Ids::IRON_BARS)); + $this->map(Blocks::IRON_DOOR(), fn(Door $block) => Helper::encodeDoor($block, new Writer(Ids::IRON_DOOR))); + $this->map(Blocks::IRON_ORE(), fn() => new Writer(Ids::IRON_ORE)); + $this->map(Blocks::IRON_TRAPDOOR(), fn(Trapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::IRON_TRAPDOOR))); + $this->map(Blocks::ITEM_FRAME(), function(ItemFrame $block) : Writer{ return Writer::create(Ids::FRAME) - ->writeBool(BlockStateNames::ITEM_FRAME_MAP_BIT, $block->hasMap()) - ->writeBool(BlockStateNames::ITEM_FRAME_PHOTO_BIT, false) + ->writeBool(StateNames::ITEM_FRAME_MAP_BIT, $block->hasMap()) + ->writeBool(StateNames::ITEM_FRAME_PHOTO_BIT, false) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::JUKEBOX(), fn() => new Writer(Ids::JUKEBOX)); - $this->map(VanillaBlocks::JUNGLE_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::JUNGLE_BUTTON))); - $this->map(VanillaBlocks::JUNGLE_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::JUNGLE_DOOR))); - $this->map(VanillaBlocks::JUNGLE_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::JUNGLE_FENCE_GATE))); - $this->map(VanillaBlocks::JUNGLE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::JUNGLE_PRESSURE_PLATE))); - $this->map(VanillaBlocks::JUNGLE_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::JUNGLE_STANDING_SIGN))); - $this->map(VanillaBlocks::JUNGLE_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_JUNGLE)); - $this->map(VanillaBlocks::JUNGLE_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::JUNGLE_STAIRS))); - $this->map(VanillaBlocks::JUNGLE_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::JUNGLE_TRAPDOOR))); - $this->map(VanillaBlocks::JUNGLE_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::JUNGLE_WALL_SIGN))); - $this->map(VanillaBlocks::JUNGLE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::LAB_TABLE(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_LAB_TABLE, new Writer(Ids::CHEMISTRY_TABLE))); - $this->map(VanillaBlocks::LADDER(), function(Ladder $block) : Writer{ + $this->map(Blocks::JUKEBOX(), fn() => new Writer(Ids::JUKEBOX)); + $this->map(Blocks::JUNGLE_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::JUNGLE_BUTTON))); + $this->map(Blocks::JUNGLE_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::JUNGLE_DOOR))); + $this->map(Blocks::JUNGLE_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::JUNGLE_FENCE_GATE))); + $this->map(Blocks::JUNGLE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::JUNGLE_PRESSURE_PLATE))); + $this->map(Blocks::JUNGLE_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::JUNGLE_STANDING_SIGN))); + $this->map(Blocks::JUNGLE_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_JUNGLE)); + $this->map(Blocks::JUNGLE_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::JUNGLE_STAIRS))); + $this->map(Blocks::JUNGLE_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::JUNGLE_TRAPDOOR))); + $this->map(Blocks::JUNGLE_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::JUNGLE_WALL_SIGN))); + $this->map(Blocks::JUNGLE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::LAB_TABLE(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_LAB_TABLE, new Writer(Ids::CHEMISTRY_TABLE))); + $this->map(Blocks::LADDER(), function(Ladder $block) : Writer{ return Writer::create(Ids::LADDER) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::LANTERN(), function(Lantern $block) : Writer{ + $this->map(Blocks::LANTERN(), function(Lantern $block) : Writer{ return Writer::create(Ids::LANTERN) - ->writeBool(BlockStateNames::HANGING, $block->isHanging()); + ->writeBool(StateNames::HANGING, $block->isHanging()); }); - $this->map(VanillaBlocks::LAPIS_LAZULI(), fn() => new Writer(Ids::LAPIS_BLOCK)); - $this->map(VanillaBlocks::LAPIS_LAZULI_ORE(), fn() => new Writer(Ids::LAPIS_ORE)); - $this->map(VanillaBlocks::LARGE_FERN(), fn(DoubleTallGrass $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_FERN, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::LAVA(), fn(Lava $block) => Helper::encodeLiquid($block, Ids::LAVA, Ids::FLOWING_LAVA)); - $this->map(VanillaBlocks::LECTERN(), function(Lectern $block) : Writer{ + $this->map(Blocks::LAPIS_LAZULI(), fn() => new Writer(Ids::LAPIS_BLOCK)); + $this->map(Blocks::LAPIS_LAZULI_ORE(), fn() => new Writer(Ids::LAPIS_ORE)); + $this->map(Blocks::LARGE_FERN(), fn(DoubleTallGrass $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_FERN, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::LAVA(), fn(Lava $block) => Helper::encodeLiquid($block, Ids::LAVA, Ids::FLOWING_LAVA)); + $this->map(Blocks::LECTERN(), function(Lectern $block) : Writer{ return Writer::create(Ids::LECTERN) - ->writeBool(BlockStateNames::POWERED_BIT, $block->isProducingSignal()) + ->writeBool(StateNames::POWERED_BIT, $block->isProducingSignal()) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::LEGACY_STONECUTTER(), fn() => new Writer(Ids::STONECUTTER)); - $this->map(VanillaBlocks::LEVER(), function(Lever $block) : Writer{ + $this->map(Blocks::LEGACY_STONECUTTER(), fn() => new Writer(Ids::STONECUTTER)); + $this->map(Blocks::LEVER(), function(Lever $block) : Writer{ return Writer::create(Ids::LEVER) - ->writeBool(BlockStateNames::OPEN_BIT, $block->isActivated()) - ->writeString(BlockStateNames::LEVER_DIRECTION, match($block->getFacing()->id()){ + ->writeBool(StateNames::OPEN_BIT, $block->isActivated()) + ->writeString(StateNames::LEVER_DIRECTION, match($block->getFacing()->id()){ LeverFacing::DOWN_AXIS_Z()->id() => StringValues::LEVER_DIRECTION_DOWN_NORTH_SOUTH, LeverFacing::DOWN_AXIS_X()->id() => StringValues::LEVER_DIRECTION_DOWN_EAST_WEST, LeverFacing::UP_AXIS_Z()->id() => StringValues::LEVER_DIRECTION_UP_NORTH_SOUTH, @@ -735,332 +736,332 @@ final class BlockStateSerializer{ default => throw new BlockStateSerializeException("Invalid Lever facing " . $block->getFacing()->name()), }); }); - $this->map(VanillaBlocks::LIGHT_BLUE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::LIGHT_GRAY_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::SILVER_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::LILAC(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_SYRINGA, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::LILY_OF_THE_VALLEY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_LILY_OF_THE_VALLEY)); - $this->map(VanillaBlocks::LILY_PAD(), fn() => new Writer(Ids::WATERLILY)); - $this->map(VanillaBlocks::LIME_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::LIME_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::LIT_PUMPKIN(), function(LitPumpkin $block) : Writer{ + $this->map(Blocks::LIGHT_BLUE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA))); + $this->map(Blocks::LIGHT_GRAY_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::SILVER_GLAZED_TERRACOTTA))); + $this->map(Blocks::LILAC(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_SYRINGA, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::LILY_OF_THE_VALLEY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_LILY_OF_THE_VALLEY)); + $this->map(Blocks::LILY_PAD(), fn() => new Writer(Ids::WATERLILY)); + $this->map(Blocks::LIME_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::LIME_GLAZED_TERRACOTTA))); + $this->map(Blocks::LIT_PUMPKIN(), function(LitPumpkin $block) : Writer{ return Writer::create(Ids::LIT_PUMPKIN) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::LOOM(), function(Loom $block) : Writer{ + $this->map(Blocks::LOOM(), function(Loom $block) : Writer{ return Writer::create(Ids::LOOM) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::MAGENTA_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::MAGENTA_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::MAGMA(), fn() => new Writer(Ids::MAGMA)); - $this->map(VanillaBlocks::MATERIAL_REDUCER(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_MATERIAL_REDUCER, new Writer(Ids::CHEMISTRY_TABLE))); - $this->map(VanillaBlocks::MELON(), fn() => new Writer(Ids::MELON_BLOCK)); - $this->map(VanillaBlocks::MELON_STEM(), fn(MelonStem $block) => Helper::encodeStem($block, new Writer(Ids::MELON_STEM))); - $this->map(VanillaBlocks::MOB_HEAD(), function(Skull $block) : Writer{ + $this->map(Blocks::MAGENTA_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::MAGENTA_GLAZED_TERRACOTTA))); + $this->map(Blocks::MAGMA(), fn() => new Writer(Ids::MAGMA)); + $this->map(Blocks::MATERIAL_REDUCER(), fn(ChemistryTable $block) => Helper::encodeChemistryTable($block, StringValues::CHEMISTRY_TABLE_TYPE_MATERIAL_REDUCER, new Writer(Ids::CHEMISTRY_TABLE))); + $this->map(Blocks::MELON(), fn() => new Writer(Ids::MELON_BLOCK)); + $this->map(Blocks::MELON_STEM(), fn(MelonStem $block) => Helper::encodeStem($block, new Writer(Ids::MELON_STEM))); + $this->map(Blocks::MOB_HEAD(), function(Skull $block) : Writer{ return Writer::create(Ids::SKULL) - ->writeBool(BlockStateNames::NO_DROP_BIT, $block->isNoDrops()) + ->writeBool(StateNames::NO_DROP_BIT, $block->isNoDrops()) ->writeFacingWithoutDown($block->getFacing()); }); - $this->map(VanillaBlocks::MONSTER_SPAWNER(), fn() => new Writer(Ids::MOB_SPAWNER)); - $this->map(VanillaBlocks::MOSSY_COBBLESTONE(), fn() => new Writer(Ids::MOSSY_COBBLESTONE)); - $this->map(VanillaBlocks::MOSSY_COBBLESTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_MOSSY_COBBLESTONE)); - $this->map(VanillaBlocks::MOSSY_COBBLESTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::MOSSY_COBBLESTONE_STAIRS))); - $this->map(VanillaBlocks::MOSSY_COBBLESTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_MOSSY_COBBLESTONE)); - $this->map(VanillaBlocks::MOSSY_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_MOSSY)); - $this->map(VanillaBlocks::MOSSY_STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_MOSSY_STONE_BRICK)); - $this->map(VanillaBlocks::MOSSY_STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::MOSSY_STONE_BRICK_STAIRS))); - $this->map(VanillaBlocks::MOSSY_STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_MOSSY_STONE_BRICK)); - $this->map(VanillaBlocks::MUSHROOM_STEM(), fn() => Writer::create(Ids::BROWN_MUSHROOM_BLOCK) - ->writeInt(BlockStateNames::HUGE_MUSHROOM_BITS, BlockLegacyMetadata::MUSHROOM_BLOCK_STEM)); - $this->map(VanillaBlocks::MYCELIUM(), fn() => new Writer(Ids::MYCELIUM)); - $this->map(VanillaBlocks::NETHERRACK(), fn() => new Writer(Ids::NETHERRACK)); - $this->map(VanillaBlocks::NETHER_BRICKS(), fn() => new Writer(Ids::NETHER_BRICK)); - $this->map(VanillaBlocks::NETHER_BRICK_FENCE(), fn() => new Writer(Ids::NETHER_BRICK_FENCE)); - $this->map(VanillaBlocks::NETHER_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_NETHER_BRICK)); - $this->map(VanillaBlocks::NETHER_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::NETHER_BRICK_STAIRS))); - $this->map(VanillaBlocks::NETHER_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_NETHER_BRICK)); - $this->map(VanillaBlocks::NETHER_PORTAL(), function(NetherPortal $block) : Writer{ + $this->map(Blocks::MONSTER_SPAWNER(), fn() => new Writer(Ids::MOB_SPAWNER)); + $this->map(Blocks::MOSSY_COBBLESTONE(), fn() => new Writer(Ids::MOSSY_COBBLESTONE)); + $this->map(Blocks::MOSSY_COBBLESTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_MOSSY_COBBLESTONE)); + $this->map(Blocks::MOSSY_COBBLESTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::MOSSY_COBBLESTONE_STAIRS))); + $this->map(Blocks::MOSSY_COBBLESTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_MOSSY_COBBLESTONE)); + $this->map(Blocks::MOSSY_STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_MOSSY)); + $this->map(Blocks::MOSSY_STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_MOSSY_STONE_BRICK)); + $this->map(Blocks::MOSSY_STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::MOSSY_STONE_BRICK_STAIRS))); + $this->map(Blocks::MOSSY_STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_MOSSY_STONE_BRICK)); + $this->map(Blocks::MUSHROOM_STEM(), fn() => Writer::create(Ids::BROWN_MUSHROOM_BLOCK) + ->writeInt(StateNames::HUGE_MUSHROOM_BITS, BlockLegacyMetadata::MUSHROOM_BLOCK_STEM)); + $this->map(Blocks::MYCELIUM(), fn() => new Writer(Ids::MYCELIUM)); + $this->map(Blocks::NETHERRACK(), fn() => new Writer(Ids::NETHERRACK)); + $this->map(Blocks::NETHER_BRICKS(), fn() => new Writer(Ids::NETHER_BRICK)); + $this->map(Blocks::NETHER_BRICK_FENCE(), fn() => new Writer(Ids::NETHER_BRICK_FENCE)); + $this->map(Blocks::NETHER_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_NETHER_BRICK)); + $this->map(Blocks::NETHER_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::NETHER_BRICK_STAIRS))); + $this->map(Blocks::NETHER_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_NETHER_BRICK)); + $this->map(Blocks::NETHER_PORTAL(), function(NetherPortal $block) : Writer{ return Writer::create(Ids::PORTAL) - ->writeString(BlockStateNames::PORTAL_AXIS, match($block->getAxis()){ + ->writeString(StateNames::PORTAL_AXIS, match($block->getAxis()){ Axis::X => StringValues::PORTAL_AXIS_X, Axis::Z => StringValues::PORTAL_AXIS_Z, default => throw new BlockStateSerializeException("Invalid Nether Portal axis " . $block->getAxis()), }); }); - $this->map(VanillaBlocks::NETHER_QUARTZ_ORE(), fn() => new Writer(Ids::QUARTZ_ORE)); - $this->map(VanillaBlocks::NETHER_REACTOR_CORE(), fn() => new Writer(Ids::NETHERREACTOR)); - $this->map(VanillaBlocks::NETHER_WART(), function(NetherWartPlant $block) : Writer{ + $this->map(Blocks::NETHER_QUARTZ_ORE(), fn() => new Writer(Ids::QUARTZ_ORE)); + $this->map(Blocks::NETHER_REACTOR_CORE(), fn() => new Writer(Ids::NETHERREACTOR)); + $this->map(Blocks::NETHER_WART(), function(NetherWartPlant $block) : Writer{ return Writer::create(Ids::NETHER_WART) - ->writeInt(BlockStateNames::AGE, $block->getAge()); + ->writeInt(StateNames::AGE, $block->getAge()); }); - $this->map(VanillaBlocks::NETHER_WART_BLOCK(), fn() => new Writer(Ids::NETHER_WART_BLOCK)); - $this->map(VanillaBlocks::NOTE_BLOCK(), fn() => new Writer(Ids::NOTEBLOCK)); - $this->map(VanillaBlocks::OAK_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::WOODEN_BUTTON))); - $this->map(VanillaBlocks::OAK_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::WOODEN_DOOR))); - $this->map(VanillaBlocks::OAK_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::FENCE_GATE))); - $this->map(VanillaBlocks::OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::WOODEN_PRESSURE_PLATE))); - $this->map(VanillaBlocks::OAK_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::STANDING_SIGN))); - $this->map(VanillaBlocks::OAK_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_OAK)); - $this->map(VanillaBlocks::OAK_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::OAK_STAIRS))); - $this->map(VanillaBlocks::OAK_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::TRAPDOOR))); - $this->map(VanillaBlocks::OAK_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::WALL_SIGN))); - $this->map(VanillaBlocks::OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::OBSIDIAN(), fn() => new Writer(Ids::OBSIDIAN)); - $this->map(VanillaBlocks::ORANGE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::ORANGE_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::ORANGE_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_ORANGE)); - $this->map(VanillaBlocks::OXEYE_DAISY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_OXEYE)); - $this->map(VanillaBlocks::PACKED_ICE(), fn() => new Writer(Ids::PACKED_ICE)); - $this->map(VanillaBlocks::PEONY(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_PAEONIA, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::PINK_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::PINK_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::PINK_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_PINK)); - $this->map(VanillaBlocks::PODZOL(), fn() => new Writer(Ids::PODZOL)); - $this->map(VanillaBlocks::POLISHED_ANDESITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_ANDESITE_SMOOTH)); - $this->map(VanillaBlocks::POLISHED_ANDESITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_ANDESITE)); - $this->map(VanillaBlocks::POLISHED_ANDESITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_ANDESITE_STAIRS))); - $this->map(VanillaBlocks::POLISHED_DIORITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_DIORITE_SMOOTH)); - $this->map(VanillaBlocks::POLISHED_DIORITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_DIORITE)); - $this->map(VanillaBlocks::POLISHED_DIORITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_DIORITE_STAIRS))); - $this->map(VanillaBlocks::POLISHED_GRANITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_GRANITE_SMOOTH)); - $this->map(VanillaBlocks::POLISHED_GRANITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_GRANITE)); - $this->map(VanillaBlocks::POLISHED_GRANITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_GRANITE_STAIRS))); - $this->map(VanillaBlocks::POPPY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_POPPY)); - $this->map(VanillaBlocks::POTATOES(), fn(Potato $block) => Helper::encodeCrops($block, new Writer(Ids::POTATOES))); - $this->map(VanillaBlocks::POWERED_RAIL(), function(PoweredRail $block) : Writer{ + $this->map(Blocks::NETHER_WART_BLOCK(), fn() => new Writer(Ids::NETHER_WART_BLOCK)); + $this->map(Blocks::NOTE_BLOCK(), fn() => new Writer(Ids::NOTEBLOCK)); + $this->map(Blocks::OAK_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::WOODEN_BUTTON))); + $this->map(Blocks::OAK_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::WOODEN_DOOR))); + $this->map(Blocks::OAK_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK)); + $this->map(Blocks::OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::FENCE_GATE))); + $this->map(Blocks::OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_OAK)); + $this->map(Blocks::OAK_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_OAK)); + $this->map(Blocks::OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK)); + $this->map(Blocks::OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::WOODEN_PRESSURE_PLATE))); + $this->map(Blocks::OAK_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_OAK)); + $this->map(Blocks::OAK_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::STANDING_SIGN))); + $this->map(Blocks::OAK_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_OAK)); + $this->map(Blocks::OAK_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::OAK_STAIRS))); + $this->map(Blocks::OAK_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::TRAPDOOR))); + $this->map(Blocks::OAK_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::WALL_SIGN))); + $this->map(Blocks::OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::OBSIDIAN(), fn() => new Writer(Ids::OBSIDIAN)); + $this->map(Blocks::ORANGE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::ORANGE_GLAZED_TERRACOTTA))); + $this->map(Blocks::ORANGE_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_ORANGE)); + $this->map(Blocks::OXEYE_DAISY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_OXEYE)); + $this->map(Blocks::PACKED_ICE(), fn() => new Writer(Ids::PACKED_ICE)); + $this->map(Blocks::PEONY(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_PAEONIA, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::PINK_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::PINK_GLAZED_TERRACOTTA))); + $this->map(Blocks::PINK_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_PINK)); + $this->map(Blocks::PODZOL(), fn() => new Writer(Ids::PODZOL)); + $this->map(Blocks::POLISHED_ANDESITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_ANDESITE_SMOOTH)); + $this->map(Blocks::POLISHED_ANDESITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_ANDESITE)); + $this->map(Blocks::POLISHED_ANDESITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_ANDESITE_STAIRS))); + $this->map(Blocks::POLISHED_DIORITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_DIORITE_SMOOTH)); + $this->map(Blocks::POLISHED_DIORITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_DIORITE)); + $this->map(Blocks::POLISHED_DIORITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_DIORITE_STAIRS))); + $this->map(Blocks::POLISHED_GRANITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_GRANITE_SMOOTH)); + $this->map(Blocks::POLISHED_GRANITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_POLISHED_GRANITE)); + $this->map(Blocks::POLISHED_GRANITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::POLISHED_GRANITE_STAIRS))); + $this->map(Blocks::POPPY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_POPPY)); + $this->map(Blocks::POTATOES(), fn(Potato $block) => Helper::encodeCrops($block, new Writer(Ids::POTATOES))); + $this->map(Blocks::POWERED_RAIL(), function(PoweredRail $block) : Writer{ return Writer::create(Ids::GOLDEN_RAIL) - ->writeBool(BlockStateNames::RAIL_DATA_BIT, $block->isPowered()) - ->writeInt(BlockStateNames::RAIL_DIRECTION, $block->getShape()); + ->writeBool(StateNames::RAIL_DATA_BIT, $block->isPowered()) + ->writeInt(StateNames::RAIL_DIRECTION, $block->getShape()); }); - $this->map(VanillaBlocks::PRISMARINE(), fn() => Writer::create(Ids::PRISMARINE) - ->writeString(BlockStateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_DEFAULT)); - $this->map(VanillaBlocks::PRISMARINE_BRICKS(), fn() => Writer::create(Ids::PRISMARINE) - ->writeString(BlockStateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_BRICKS)); - $this->map(VanillaBlocks::PRISMARINE_BRICKS_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_BRICK)); - $this->map(VanillaBlocks::PRISMARINE_BRICKS_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PRISMARINE_BRICKS_STAIRS))); - $this->map(VanillaBlocks::PRISMARINE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_ROUGH)); - $this->map(VanillaBlocks::PRISMARINE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PRISMARINE_STAIRS))); - $this->map(VanillaBlocks::PRISMARINE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_PRISMARINE)); - $this->map(VanillaBlocks::PUMPKIN(), function() : Writer{ + $this->map(Blocks::PRISMARINE(), fn() => Writer::create(Ids::PRISMARINE) + ->writeString(StateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_DEFAULT)); + $this->map(Blocks::PRISMARINE_BRICKS(), fn() => Writer::create(Ids::PRISMARINE) + ->writeString(StateNames::PRISMARINE_BLOCK_TYPE, StringValues::PRISMARINE_BLOCK_TYPE_BRICKS)); + $this->map(Blocks::PRISMARINE_BRICKS_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_BRICK)); + $this->map(Blocks::PRISMARINE_BRICKS_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PRISMARINE_BRICKS_STAIRS))); + $this->map(Blocks::PRISMARINE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PRISMARINE_ROUGH)); + $this->map(Blocks::PRISMARINE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PRISMARINE_STAIRS))); + $this->map(Blocks::PRISMARINE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_PRISMARINE)); + $this->map(Blocks::PUMPKIN(), function() : Writer{ return Writer::create(Ids::PUMPKIN) ->writeLegacyHorizontalFacing(Facing::SOUTH); //no longer used }); - $this->map(VanillaBlocks::PUMPKIN_STEM(), fn(PumpkinStem $block) => Helper::encodeStem($block, new Writer(Ids::PUMPKIN_STEM))); - $this->map(VanillaBlocks::PURPLE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::PURPLE_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::PURPLE_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, true, Writer::create(Ids::COLORED_TORCH_BP))); - $this->map(VanillaBlocks::PURPUR(), function() : Writer{ + $this->map(Blocks::PUMPKIN_STEM(), fn(PumpkinStem $block) => Helper::encodeStem($block, new Writer(Ids::PUMPKIN_STEM))); + $this->map(Blocks::PURPLE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::PURPLE_GLAZED_TERRACOTTA))); + $this->map(Blocks::PURPLE_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, true, Writer::create(Ids::COLORED_TORCH_BP))); + $this->map(Blocks::PURPUR(), function() : Writer{ return Writer::create(Ids::PURPUR_BLOCK) - ->writeString(BlockStateNames::CHISEL_TYPE, StringValues::CHISEL_TYPE_DEFAULT) + ->writeString(StateNames::CHISEL_TYPE, StringValues::CHISEL_TYPE_DEFAULT) ->writePillarAxis(Axis::Y); //useless, but MCPE wants it }); - $this->map(VanillaBlocks::PURPUR_PILLAR(), function(SimplePillar $block) : Writer{ + $this->map(Blocks::PURPUR_PILLAR(), function(SimplePillar $block) : Writer{ return Writer::create(Ids::PURPUR_BLOCK) - ->writeString(BlockStateNames::CHISEL_TYPE, StringValues::CHISEL_TYPE_LINES) + ->writeString(StateNames::CHISEL_TYPE, StringValues::CHISEL_TYPE_LINES) ->writePillarAxis($block->getAxis()); }); - $this->map(VanillaBlocks::PURPUR_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PURPUR)); - $this->map(VanillaBlocks::PURPUR_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PURPUR_STAIRS))); - $this->map(VanillaBlocks::QUARTZ(), fn() => Helper::encodeQuartz(StringValues::CHISEL_TYPE_DEFAULT, Axis::Y)); - $this->map(VanillaBlocks::QUARTZ_PILLAR(), fn(SimplePillar $block) => Helper::encodeQuartz(StringValues::CHISEL_TYPE_LINES, $block->getAxis())); - $this->map(VanillaBlocks::QUARTZ_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_QUARTZ)); - $this->map(VanillaBlocks::QUARTZ_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::QUARTZ_STAIRS))); - $this->map(VanillaBlocks::RAIL(), function(Rail $block) : Writer{ + $this->map(Blocks::PURPUR_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_PURPUR)); + $this->map(Blocks::PURPUR_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::PURPUR_STAIRS))); + $this->map(Blocks::QUARTZ(), fn() => Helper::encodeQuartz(StringValues::CHISEL_TYPE_DEFAULT, Axis::Y)); + $this->map(Blocks::QUARTZ_PILLAR(), fn(SimplePillar $block) => Helper::encodeQuartz(StringValues::CHISEL_TYPE_LINES, $block->getAxis())); + $this->map(Blocks::QUARTZ_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_QUARTZ)); + $this->map(Blocks::QUARTZ_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::QUARTZ_STAIRS))); + $this->map(Blocks::RAIL(), function(Rail $block) : Writer{ return Writer::create(Ids::RAIL) - ->writeInt(BlockStateNames::RAIL_DIRECTION, $block->getShape()); + ->writeInt(StateNames::RAIL_DIRECTION, $block->getShape()); }); - $this->map(VanillaBlocks::REDSTONE(), fn() => new Writer(Ids::REDSTONE_BLOCK)); - $this->map(VanillaBlocks::REDSTONE_COMPARATOR(), function(RedstoneComparator $block) : BlockStateWriter{ + $this->map(Blocks::REDSTONE(), fn() => new Writer(Ids::REDSTONE_BLOCK)); + $this->map(Blocks::REDSTONE_COMPARATOR(), function(RedstoneComparator $block) : BlockStateWriter{ return BlockStateWriter::create($block->isPowered() ? Ids::POWERED_COMPARATOR : Ids::UNPOWERED_COMPARATOR) - ->writeBool(BlockStateNames::OUTPUT_LIT_BIT, $block->isPowered()) - ->writeBool(BlockStateNames::OUTPUT_SUBTRACT_BIT, $block->isSubtractMode()) + ->writeBool(StateNames::OUTPUT_LIT_BIT, $block->isPowered()) + ->writeBool(StateNames::OUTPUT_SUBTRACT_BIT, $block->isSubtractMode()) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::REDSTONE_LAMP(), fn(RedstoneLamp $block) => new Writer($block->isPowered() ? Ids::LIT_REDSTONE_LAMP : Ids::REDSTONE_LAMP)); - $this->map(VanillaBlocks::REDSTONE_ORE(), fn(RedstoneOre $block) => new Writer($block->isLit() ? Ids::LIT_REDSTONE_ORE : Ids::REDSTONE_ORE)); - $this->map(VanillaBlocks::REDSTONE_REPEATER(), function(RedstoneRepeater $block) : BlockStateWriter{ + $this->map(Blocks::REDSTONE_LAMP(), fn(RedstoneLamp $block) => new Writer($block->isPowered() ? Ids::LIT_REDSTONE_LAMP : Ids::REDSTONE_LAMP)); + $this->map(Blocks::REDSTONE_ORE(), fn(RedstoneOre $block) => new Writer($block->isLit() ? Ids::LIT_REDSTONE_ORE : Ids::REDSTONE_ORE)); + $this->map(Blocks::REDSTONE_REPEATER(), function(RedstoneRepeater $block) : BlockStateWriter{ return Writer::create($block->isPowered() ? Ids::POWERED_REPEATER : Ids::UNPOWERED_REPEATER) ->writeLegacyHorizontalFacing($block->getFacing()) - ->writeInt(BlockStateNames::REPEATER_DELAY, $block->getDelay() - 1); + ->writeInt(StateNames::REPEATER_DELAY, $block->getDelay() - 1); }); - $this->map(VanillaBlocks::REDSTONE_TORCH(), function(RedstoneTorch $block) : Writer{ + $this->map(Blocks::REDSTONE_TORCH(), function(RedstoneTorch $block) : Writer{ return Writer::create($block->isLit() ? Ids::REDSTONE_TORCH : Ids::UNLIT_REDSTONE_TORCH) ->writeTorchFacing($block->getFacing()); }); - $this->map(VanillaBlocks::REDSTONE_WIRE(), function(RedstoneWire $block) : Writer{ + $this->map(Blocks::REDSTONE_WIRE(), function(RedstoneWire $block) : Writer{ return Writer::create(Ids::REDSTONE_WIRE) - ->writeInt(BlockStateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); + ->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); }); - $this->map(VanillaBlocks::RED_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::RED_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::RED_MUSHROOM(), fn() => new Writer(Ids::RED_MUSHROOM)); - $this->map(VanillaBlocks::RED_MUSHROOM_BLOCK(), fn(RedMushroomBlock $block) => Helper::encodeMushroomBlock($block, new Writer(Ids::RED_MUSHROOM_BLOCK))); - $this->map(VanillaBlocks::RED_NETHER_BRICKS(), fn() => new Writer(Ids::RED_NETHER_BRICK)); - $this->map(VanillaBlocks::RED_NETHER_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_RED_NETHER_BRICK)); - $this->map(VanillaBlocks::RED_NETHER_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::RED_NETHER_BRICK_STAIRS))); - $this->map(VanillaBlocks::RED_NETHER_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_RED_NETHER_BRICK)); - $this->map(VanillaBlocks::RED_SAND(), fn() => Writer::create(Ids::SAND) - ->writeString(BlockStateNames::SAND_TYPE, StringValues::SAND_TYPE_RED)); - $this->map(VanillaBlocks::RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_DEFAULT)); - $this->map(VanillaBlocks::RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_RED_SANDSTONE)); - $this->map(VanillaBlocks::RED_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::RED_SANDSTONE_STAIRS))); - $this->map(VanillaBlocks::RED_SANDSTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_RED_SANDSTONE)); - $this->map(VanillaBlocks::RED_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, false, Writer::create(Ids::COLORED_TORCH_RG))); - $this->map(VanillaBlocks::RED_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_RED)); - $this->map(VanillaBlocks::RESERVED6(), fn() => new Writer(Ids::RESERVED6)); - $this->map(VanillaBlocks::ROSE_BUSH(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_ROSE, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::SAND(), fn() => Writer::create(Ids::SAND) - ->writeString(BlockStateNames::SAND_TYPE, StringValues::SAND_TYPE_NORMAL)); - $this->map(VanillaBlocks::SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_DEFAULT)); - $this->map(VanillaBlocks::SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_SANDSTONE)); - $this->map(VanillaBlocks::SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SANDSTONE_STAIRS))); - $this->map(VanillaBlocks::SANDSTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_SANDSTONE)); - $this->map(VanillaBlocks::SEA_LANTERN(), fn() => new Writer(Ids::SEALANTERN)); - $this->map(VanillaBlocks::SEA_PICKLE(), function(SeaPickle $block) : Writer{ + $this->map(Blocks::RED_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::RED_GLAZED_TERRACOTTA))); + $this->map(Blocks::RED_MUSHROOM(), fn() => new Writer(Ids::RED_MUSHROOM)); + $this->map(Blocks::RED_MUSHROOM_BLOCK(), fn(RedMushroomBlock $block) => Helper::encodeMushroomBlock($block, new Writer(Ids::RED_MUSHROOM_BLOCK))); + $this->map(Blocks::RED_NETHER_BRICKS(), fn() => new Writer(Ids::RED_NETHER_BRICK)); + $this->map(Blocks::RED_NETHER_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_RED_NETHER_BRICK)); + $this->map(Blocks::RED_NETHER_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::RED_NETHER_BRICK_STAIRS))); + $this->map(Blocks::RED_NETHER_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_RED_NETHER_BRICK)); + $this->map(Blocks::RED_SAND(), fn() => Writer::create(Ids::SAND) + ->writeString(StateNames::SAND_TYPE, StringValues::SAND_TYPE_RED)); + $this->map(Blocks::RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_DEFAULT)); + $this->map(Blocks::RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_RED_SANDSTONE)); + $this->map(Blocks::RED_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::RED_SANDSTONE_STAIRS))); + $this->map(Blocks::RED_SANDSTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_RED_SANDSTONE)); + $this->map(Blocks::RED_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, false, Writer::create(Ids::COLORED_TORCH_RG))); + $this->map(Blocks::RED_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_RED)); + $this->map(Blocks::RESERVED6(), fn() => new Writer(Ids::RESERVED6)); + $this->map(Blocks::ROSE_BUSH(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_ROSE, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::SAND(), fn() => Writer::create(Ids::SAND) + ->writeString(StateNames::SAND_TYPE, StringValues::SAND_TYPE_NORMAL)); + $this->map(Blocks::SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_DEFAULT)); + $this->map(Blocks::SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_SANDSTONE)); + $this->map(Blocks::SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SANDSTONE_STAIRS))); + $this->map(Blocks::SANDSTONE_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_SANDSTONE)); + $this->map(Blocks::SEA_LANTERN(), fn() => new Writer(Ids::SEALANTERN)); + $this->map(Blocks::SEA_PICKLE(), function(SeaPickle $block) : Writer{ return Writer::create(Ids::SEA_PICKLE) - ->writeBool(BlockStateNames::DEAD_BIT, !$block->isUnderwater()) - ->writeInt(BlockStateNames::CLUSTER_COUNT, $block->getCount() - 1); + ->writeBool(StateNames::DEAD_BIT, !$block->isUnderwater()) + ->writeInt(StateNames::CLUSTER_COUNT, $block->getCount() - 1); }); - $this->map(VanillaBlocks::SHULKER_BOX(), fn() => new Writer(Ids::UNDYED_SHULKER_BOX)); - $this->map(VanillaBlocks::SLIME(), fn() => new Writer(Ids::SLIME)); - $this->map(VanillaBlocks::SMOKER(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::SMOKER, Ids::LIT_SMOKER)); - $this->map(VanillaBlocks::SMOOTH_QUARTZ(), fn() => Helper::encodeQuartz(StringValues::CHISEL_TYPE_SMOOTH, Axis::Y)); - $this->map(VanillaBlocks::SMOOTH_QUARTZ_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_SMOOTH_QUARTZ)); - $this->map(VanillaBlocks::SMOOTH_QUARTZ_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_QUARTZ_STAIRS))); - $this->map(VanillaBlocks::SMOOTH_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_SMOOTH)); - $this->map(VanillaBlocks::SMOOTH_RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_SMOOTH_RED_SANDSTONE)); - $this->map(VanillaBlocks::SMOOTH_RED_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_RED_SANDSTONE_STAIRS))); - $this->map(VanillaBlocks::SMOOTH_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_SMOOTH)); - $this->map(VanillaBlocks::SMOOTH_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_SMOOTH_SANDSTONE)); - $this->map(VanillaBlocks::SMOOTH_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_SANDSTONE_STAIRS))); - $this->map(VanillaBlocks::SMOOTH_STONE(), fn() => new Writer(Ids::SMOOTH_STONE)); - $this->map(VanillaBlocks::SMOOTH_STONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_SMOOTH_STONE)); - $this->map(VanillaBlocks::SNOW(), fn() => new Writer(Ids::SNOW)); - $this->map(VanillaBlocks::SNOW_LAYER(), function(SnowLayer $block) : Writer{ + $this->map(Blocks::SHULKER_BOX(), fn() => new Writer(Ids::UNDYED_SHULKER_BOX)); + $this->map(Blocks::SLIME(), fn() => new Writer(Ids::SLIME)); + $this->map(Blocks::SMOKER(), fn(Furnace $block) => Helper::encodeFurnace($block, Ids::SMOKER, Ids::LIT_SMOKER)); + $this->map(Blocks::SMOOTH_QUARTZ(), fn() => Helper::encodeQuartz(StringValues::CHISEL_TYPE_SMOOTH, Axis::Y)); + $this->map(Blocks::SMOOTH_QUARTZ_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_SMOOTH_QUARTZ)); + $this->map(Blocks::SMOOTH_QUARTZ_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_QUARTZ_STAIRS))); + $this->map(Blocks::SMOOTH_RED_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::RED_SANDSTONE, StringValues::SAND_STONE_TYPE_SMOOTH)); + $this->map(Blocks::SMOOTH_RED_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_SMOOTH_RED_SANDSTONE)); + $this->map(Blocks::SMOOTH_RED_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_RED_SANDSTONE_STAIRS))); + $this->map(Blocks::SMOOTH_SANDSTONE(), fn() => Helper::encodeSandstone(Ids::SANDSTONE, StringValues::SAND_STONE_TYPE_SMOOTH)); + $this->map(Blocks::SMOOTH_SANDSTONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab2($block, StringValues::STONE_SLAB_TYPE_2_SMOOTH_SANDSTONE)); + $this->map(Blocks::SMOOTH_SANDSTONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::SMOOTH_SANDSTONE_STAIRS))); + $this->map(Blocks::SMOOTH_STONE(), fn() => new Writer(Ids::SMOOTH_STONE)); + $this->map(Blocks::SMOOTH_STONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_SMOOTH_STONE)); + $this->map(Blocks::SNOW(), fn() => new Writer(Ids::SNOW)); + $this->map(Blocks::SNOW_LAYER(), function(SnowLayer $block) : Writer{ return Writer::create(Ids::SNOW_LAYER) - ->writeBool(BlockStateNames::COVERED_BIT, false) - ->writeInt(BlockStateNames::HEIGHT, $block->getLayers() - 1); + ->writeBool(StateNames::COVERED_BIT, false) + ->writeInt(StateNames::HEIGHT, $block->getLayers() - 1); }); - $this->map(VanillaBlocks::SOUL_SAND(), fn() => new Writer(Ids::SOUL_SAND)); - $this->map(VanillaBlocks::SPONGE(), function(Sponge $block) : Writer{ + $this->map(Blocks::SOUL_SAND(), fn() => new Writer(Ids::SOUL_SAND)); + $this->map(Blocks::SPONGE(), function(Sponge $block) : Writer{ return Writer::create(Ids::SPONGE) - ->writeString(BlockStateNames::SPONGE_TYPE, $block->isWet() ? StringValues::SPONGE_TYPE_WET : StringValues::SPONGE_TYPE_DRY); + ->writeString(StateNames::SPONGE_TYPE, $block->isWet() ? StringValues::SPONGE_TYPE_WET : StringValues::SPONGE_TYPE_DRY); }); - $this->map(VanillaBlocks::SPRUCE_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::SPRUCE_BUTTON))); - $this->map(VanillaBlocks::SPRUCE_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::SPRUCE_DOOR))); - $this->map(VanillaBlocks::SPRUCE_FENCE(), fn() => Writer::create(Ids::FENCE) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::SPRUCE_FENCE_GATE))); - $this->map(VanillaBlocks::SPRUCE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_PLANKS(), fn() => Writer::create(Ids::PLANKS) - ->writeString(BlockStateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::SPRUCE_PRESSURE_PLATE))); - $this->map(VanillaBlocks::SPRUCE_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::SPRUCE_STANDING_SIGN))); - $this->map(VanillaBlocks::SPRUCE_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_SPRUCE)); - $this->map(VanillaBlocks::SPRUCE_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::SPRUCE_STAIRS))); - $this->map(VanillaBlocks::SPRUCE_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::SPRUCE_TRAPDOOR))); - $this->map(VanillaBlocks::SPRUCE_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::SPRUCE_WALL_SIGN))); - $this->map(VanillaBlocks::SPRUCE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STAINED_CLAY(), function(StainedHardenedClay $block) : Writer{ + $this->map(Blocks::SPRUCE_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::SPRUCE_BUTTON))); + $this->map(Blocks::SPRUCE_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::SPRUCE_DOOR))); + $this->map(Blocks::SPRUCE_FENCE(), fn() => Writer::create(Ids::FENCE) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::SPRUCE_FENCE_GATE))); + $this->map(Blocks::SPRUCE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_PLANKS(), fn() => Writer::create(Ids::PLANKS) + ->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::SPRUCE_PRESSURE_PLATE))); + $this->map(Blocks::SPRUCE_SAPLING(), fn(Sapling $block) => Helper::encodeSapling($block, StringValues::SAPLING_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_SIGN(), fn(FloorSign $block) => Helper::encodeFloorSign($block, new Writer(Ids::SPRUCE_STANDING_SIGN))); + $this->map(Blocks::SPRUCE_SLAB(), fn(Slab $block) => Helper::encodeWoodenSlab($block, StringValues::WOOD_TYPE_SPRUCE)); + $this->map(Blocks::SPRUCE_STAIRS(), fn(WoodenStairs $block) => Helper::encodeStairs($block, new Writer(Ids::SPRUCE_STAIRS))); + $this->map(Blocks::SPRUCE_TRAPDOOR(), fn(WoodenTrapdoor $block) => Helper::encodeTrapdoor($block, new Writer(Ids::SPRUCE_TRAPDOOR))); + $this->map(Blocks::SPRUCE_WALL_SIGN(), fn(WallSign $block) => Helper::encodeWallSign($block, new Writer(Ids::SPRUCE_WALL_SIGN))); + $this->map(Blocks::SPRUCE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STAINED_CLAY(), function(StainedHardenedClay $block) : Writer{ return Writer::create(Ids::STAINED_HARDENED_CLAY) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::STAINED_GLASS(), function(StainedGlass $block) : Writer{ + $this->map(Blocks::STAINED_GLASS(), function(StainedGlass $block) : Writer{ return Writer::create(Ids::STAINED_GLASS) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::STAINED_GLASS_PANE(), function(StainedGlassPane $block) : Writer{ + $this->map(Blocks::STAINED_GLASS_PANE(), function(StainedGlassPane $block) : Writer{ return Writer::create(Ids::STAINED_GLASS_PANE) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::STAINED_HARDENED_GLASS(), function(StainedHardenedGlass $block) : Writer{ + $this->map(Blocks::STAINED_HARDENED_GLASS(), function(StainedHardenedGlass $block) : Writer{ return Writer::create(Ids::HARD_STAINED_GLASS) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::STAINED_HARDENED_GLASS_PANE(), function(StainedHardenedGlassPane $block) : Writer{ + $this->map(Blocks::STAINED_HARDENED_GLASS_PANE(), function(StainedHardenedGlassPane $block) : Writer{ return Writer::create(Ids::HARD_STAINED_GLASS_PANE) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::STONE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_STONE)); - $this->map(VanillaBlocks::STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_DEFAULT)); - $this->map(VanillaBlocks::STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_STONE_BRICK)); - $this->map(VanillaBlocks::STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::STONE_BRICK_STAIRS))); - $this->map(VanillaBlocks::STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_STONE_BRICK)); - $this->map(VanillaBlocks::STONE_BUTTON(), fn(StoneButton $block) => Helper::encodeButton($block, new Writer(Ids::STONE_BUTTON))); - $this->map(VanillaBlocks::STONE_PRESSURE_PLATE(), fn(StonePressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::STONE_PRESSURE_PLATE))); - $this->map(VanillaBlocks::STONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_STONE)); - $this->map(VanillaBlocks::STONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::NORMAL_STONE_STAIRS))); - $this->map(VanillaBlocks::STRIPPED_ACACIA_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_ACACIA_LOG) + $this->map(Blocks::STONE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_STONE)); + $this->map(Blocks::STONE_BRICKS(), fn() => Helper::encodeStoneBricks(StringValues::STONE_BRICK_TYPE_DEFAULT)); + $this->map(Blocks::STONE_BRICK_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab1($block, StringValues::STONE_SLAB_TYPE_STONE_BRICK)); + $this->map(Blocks::STONE_BRICK_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::STONE_BRICK_STAIRS))); + $this->map(Blocks::STONE_BRICK_WALL(), fn(Wall $block) => Helper::encodeLegacyWall($block, StringValues::WALL_BLOCK_TYPE_STONE_BRICK)); + $this->map(Blocks::STONE_BUTTON(), fn(StoneButton $block) => Helper::encodeButton($block, new Writer(Ids::STONE_BUTTON))); + $this->map(Blocks::STONE_PRESSURE_PLATE(), fn(StonePressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::STONE_PRESSURE_PLATE))); + $this->map(Blocks::STONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_STONE)); + $this->map(Blocks::STONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::NORMAL_STONE_STAIRS))); + $this->map(Blocks::STRIPPED_ACACIA_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_ACACIA_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_ACACIA_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STRIPPED_BIRCH_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_BIRCH_LOG) + $this->map(Blocks::STRIPPED_ACACIA_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STRIPPED_BIRCH_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_BIRCH_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_BIRCH_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STRIPPED_DARK_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_DARK_OAK_LOG) + $this->map(Blocks::STRIPPED_BIRCH_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STRIPPED_DARK_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_DARK_OAK_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_DARK_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STRIPPED_JUNGLE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_JUNGLE_LOG) + $this->map(Blocks::STRIPPED_DARK_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STRIPPED_JUNGLE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_JUNGLE_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_JUNGLE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STRIPPED_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_OAK_LOG) + $this->map(Blocks::STRIPPED_JUNGLE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STRIPPED_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_OAK_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::STRIPPED_SPRUCE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_SPRUCE_LOG) + $this->map(Blocks::STRIPPED_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::STRIPPED_SPRUCE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_SPRUCE_LOG) ->writePillarAxis($block->getAxis())); - $this->map(VanillaBlocks::STRIPPED_SPRUCE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); - $this->map(VanillaBlocks::SUGARCANE(), function(Sugarcane $block) : Writer{ + $this->map(Blocks::STRIPPED_SPRUCE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block)); + $this->map(Blocks::SUGARCANE(), function(Sugarcane $block) : Writer{ return Writer::create(Ids::REEDS) - ->writeInt(BlockStateNames::AGE, $block->getAge()); + ->writeInt(StateNames::AGE, $block->getAge()); }); - $this->map(VanillaBlocks::SUNFLOWER(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_SUNFLOWER, Writer::create(Ids::DOUBLE_PLANT))); - $this->map(VanillaBlocks::SWEET_BERRY_BUSH(), function(SweetBerryBush $block) : Writer{ + $this->map(Blocks::SUNFLOWER(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, StringValues::DOUBLE_PLANT_TYPE_SUNFLOWER, Writer::create(Ids::DOUBLE_PLANT))); + $this->map(Blocks::SWEET_BERRY_BUSH(), function(SweetBerryBush $block) : Writer{ return Writer::create(Ids::SWEET_BERRY_BUSH) - ->writeInt(BlockStateNames::GROWTH, $block->getAge()); + ->writeInt(StateNames::GROWTH, $block->getAge()); }); - $this->map(VanillaBlocks::TALL_GRASS(), fn() => Writer::create(Ids::TALLGRASS) - ->writeString(BlockStateNames::TALL_GRASS_TYPE, StringValues::TALL_GRASS_TYPE_TALL)); - $this->map(VanillaBlocks::TNT(), function(TNT $block) : Writer{ + $this->map(Blocks::TALL_GRASS(), fn() => Writer::create(Ids::TALLGRASS) + ->writeString(StateNames::TALL_GRASS_TYPE, StringValues::TALL_GRASS_TYPE_TALL)); + $this->map(Blocks::TNT(), function(TNT $block) : Writer{ return Writer::create(Ids::TNT) - ->writeBool(BlockStateNames::ALLOW_UNDERWATER_BIT, $block->worksUnderwater()) - ->writeBool(BlockStateNames::EXPLODE_BIT, $block->isUnstable()); + ->writeBool(StateNames::ALLOW_UNDERWATER_BIT, $block->worksUnderwater()) + ->writeBool(StateNames::EXPLODE_BIT, $block->isUnstable()); }); - $this->map(VanillaBlocks::TORCH(), function(Torch $block) : Writer{ + $this->map(Blocks::TORCH(), function(Torch $block) : Writer{ return Writer::create(Ids::TORCH) ->writeTorchFacing($block->getFacing()); }); - $this->map(VanillaBlocks::TRAPPED_CHEST(), function(TrappedChest $block) : Writer{ + $this->map(Blocks::TRAPPED_CHEST(), function(TrappedChest $block) : Writer{ return Writer::create(Ids::TRAPPED_CHEST) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::TRIPWIRE(), function(Tripwire $block) : Writer{ + $this->map(Blocks::TRIPWIRE(), function(Tripwire $block) : Writer{ return Writer::create(Ids::TRIPWIRE) - ->writeBool(BlockStateNames::ATTACHED_BIT, $block->isConnected()) - ->writeBool(BlockStateNames::DISARMED_BIT, $block->isDisarmed()) - ->writeBool(BlockStateNames::POWERED_BIT, $block->isTriggered()) - ->writeBool(BlockStateNames::SUSPENDED_BIT, $block->isSuspended()); + ->writeBool(StateNames::ATTACHED_BIT, $block->isConnected()) + ->writeBool(StateNames::DISARMED_BIT, $block->isDisarmed()) + ->writeBool(StateNames::POWERED_BIT, $block->isTriggered()) + ->writeBool(StateNames::SUSPENDED_BIT, $block->isSuspended()); }); - $this->map(VanillaBlocks::TRIPWIRE_HOOK(), function(TripwireHook $block) : Writer{ + $this->map(Blocks::TRIPWIRE_HOOK(), function(TripwireHook $block) : Writer{ return Writer::create(Ids::TRIPWIRE_HOOK) - ->writeBool(BlockStateNames::ATTACHED_BIT, $block->isConnected()) - ->writeBool(BlockStateNames::POWERED_BIT, $block->isPowered()) + ->writeBool(StateNames::ATTACHED_BIT, $block->isConnected()) + ->writeBool(StateNames::POWERED_BIT, $block->isPowered()) ->writeLegacyHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::UNDERWATER_TORCH(), function(UnderwaterTorch $block) : Writer{ + $this->map(Blocks::UNDERWATER_TORCH(), function(UnderwaterTorch $block) : Writer{ return Writer::create(Ids::UNDERWATER_TORCH) ->writeTorchFacing($block->getFacing()); }); - $this->map(VanillaBlocks::VINES(), function(Vine $block) : Writer{ + $this->map(Blocks::VINES(), function(Vine $block) : Writer{ return Writer::create(Ids::VINE) - ->writeInt(BlockStateNames::VINE_DIRECTION_BITS, ($block->hasFace(Facing::NORTH) ? BlockLegacyMetadata::VINE_FLAG_NORTH : 0) | ($block->hasFace(Facing::SOUTH) ? BlockLegacyMetadata::VINE_FLAG_SOUTH : 0) | ($block->hasFace(Facing::WEST) ? BlockLegacyMetadata::VINE_FLAG_WEST : 0) | ($block->hasFace(Facing::EAST) ? BlockLegacyMetadata::VINE_FLAG_EAST : 0)); + ->writeInt(StateNames::VINE_DIRECTION_BITS, ($block->hasFace(Facing::NORTH) ? BlockLegacyMetadata::VINE_FLAG_NORTH : 0) | ($block->hasFace(Facing::SOUTH) ? BlockLegacyMetadata::VINE_FLAG_SOUTH : 0) | ($block->hasFace(Facing::WEST) ? BlockLegacyMetadata::VINE_FLAG_WEST : 0) | ($block->hasFace(Facing::EAST) ? BlockLegacyMetadata::VINE_FLAG_EAST : 0)); }); - $this->map(VanillaBlocks::WALL_BANNER(), function(WallBanner $block) : Writer{ + $this->map(Blocks::WALL_BANNER(), function(WallBanner $block) : Writer{ return Writer::create(Ids::WALL_BANNER) ->writeHorizontalFacing($block->getFacing()); }); - $this->map(VanillaBlocks::WALL_CORAL_FAN(), function(WallCoralFan $block) : Writer{ + $this->map(Blocks::WALL_CORAL_FAN(), function(WallCoralFan $block) : Writer{ $coralType = $block->getCoralType(); return Writer::create(match($coralType->id()){ CoralType::TUBE()->id(), CoralType::BRAIN()->id() => Ids::CORAL_FAN_HANG, @@ -1068,26 +1069,26 @@ final class BlockStateSerializer{ CoralType::HORN()->id() => Ids::CORAL_FAN_HANG3, default => throw new BlockStateSerializeException("Invalid Coral type " . $coralType->name()), }) - ->writeBool(BlockStateNames::CORAL_HANG_TYPE_BIT, $coralType->equals(CoralType::BRAIN()) || $coralType->equals(CoralType::FIRE())) - ->writeBool(BlockStateNames::DEAD_BIT, $block->isDead()) + ->writeBool(StateNames::CORAL_HANG_TYPE_BIT, $coralType->equals(CoralType::BRAIN()) || $coralType->equals(CoralType::FIRE())) + ->writeBool(StateNames::DEAD_BIT, $block->isDead()) ->writeCoralFacing($block->getFacing()); }); - $this->map(VanillaBlocks::WATER(), fn(Water $block) => Helper::encodeLiquid($block, Ids::WATER, Ids::FLOWING_WATER)); - $this->map(VanillaBlocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), function(WeightedPressurePlateHeavy $block) : Writer{ + $this->map(Blocks::WATER(), fn(Water $block) => Helper::encodeLiquid($block, Ids::WATER, Ids::FLOWING_WATER)); + $this->map(Blocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), function(WeightedPressurePlateHeavy $block) : Writer{ return Writer::create(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE) - ->writeInt(BlockStateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); + ->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); }); - $this->map(VanillaBlocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), function(WeightedPressurePlateLight $block) : Writer{ + $this->map(Blocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), function(WeightedPressurePlateLight $block) : Writer{ return Writer::create(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE) - ->writeInt(BlockStateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); + ->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength()); }); - $this->map(VanillaBlocks::WHEAT(), fn(Wheat $block) => Helper::encodeCrops($block, new Writer(Ids::WHEAT))); - $this->map(VanillaBlocks::WHITE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::WHITE_GLAZED_TERRACOTTA))); - $this->map(VanillaBlocks::WHITE_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_WHITE)); - $this->map(VanillaBlocks::WOOL(), function(Wool $block) : Writer{ + $this->map(Blocks::WHEAT(), fn(Wheat $block) => Helper::encodeCrops($block, new Writer(Ids::WHEAT))); + $this->map(Blocks::WHITE_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::WHITE_GLAZED_TERRACOTTA))); + $this->map(Blocks::WHITE_TULIP(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_TULIP_WHITE)); + $this->map(Blocks::WOOL(), function(Wool $block) : Writer{ return Writer::create(Ids::WOOL) ->writeColor($block->getColor()); }); - $this->map(VanillaBlocks::YELLOW_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::YELLOW_GLAZED_TERRACOTTA))); + $this->map(Blocks::YELLOW_GLAZED_TERRACOTTA(), fn(GlazedTerracotta $block) => Helper::encodeGlazedTerracotta($block, new Writer(Ids::YELLOW_GLAZED_TERRACOTTA))); } }