PM5-specific changes for 1.20.0.23 beta

This commit is contained in:
Dylan K. Taylor 2023-06-07 21:08:41 +01:00
parent 132330e16f
commit 9a67e3d660
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
10 changed files with 160 additions and 40 deletions

View File

@ -44,6 +44,7 @@ use function fwrite;
use function is_string;
use function ksort;
use function mb_strtoupper;
use function preg_replace;
use function sort;
use function strrpos;
use function strtoupper;
@ -138,7 +139,7 @@ function generateBlockStateNames(BlockPaletteReport $data) : void{
fwrite($output, generateClassHeader(BlockStateNames::class));
foreach(Utils::stringifyKeys($data->seenStateValues) as $state => $values){
$constName = mb_strtoupper($state, 'US-ASCII');
$constName = mb_strtoupper(preg_replace("/^minecraft:/", "", $state) ?? throw new AssumptionFailedError("This regex is not invalid"), 'US-ASCII');
fwrite($output, "\tpublic const $constName = \"$state\";\n");
}
@ -158,7 +159,7 @@ function generateBlockStringValues(BlockPaletteReport $data) : void{
continue;
}
$anyWritten = true;
$constName = mb_strtoupper($stateName . "_" . $value, 'US-ASCII');
$constName = mb_strtoupper(preg_replace("/^minecraft:/", "", $stateName) . "_" . $value, 'US-ASCII');
fwrite($output, "\tpublic const $constName = \"$value\";\n");
}
if($anyWritten){

View File

@ -98,6 +98,7 @@ final class BlockStateNames{
public const LEVER_DIRECTION = "lever_direction";
public const LIQUID_DEPTH = "liquid_depth";
public const LIT = "lit";
public const CARDINAL_DIRECTION = "minecraft:cardinal_direction";
public const MOISTURIZED_AMOUNT = "moisturized_amount";
public const MONSTER_EGG_STONE_TYPE = "monster_egg_stone_type";
public const MULTI_FACE_DIRECTION_BITS = "multi_face_direction_bits";
@ -122,6 +123,7 @@ final class BlockStateNames{
public const SAND_STONE_TYPE = "sand_stone_type";
public const SAND_TYPE = "sand_type";
public const SAPLING_TYPE = "sapling_type";
public const SCULK_SENSOR_PHASE = "sculk_sensor_phase";
public const SEA_GRASS_TYPE = "sea_grass_type";
public const SPONGE_TYPE = "sponge_type";
public const STABILITY = "stability";

View File

@ -131,6 +131,11 @@ final class BlockStateStringValues{
public const LEVER_DIRECTION_UP_NORTH_SOUTH = "up_north_south";
public const LEVER_DIRECTION_WEST = "west";
public const CARDINAL_DIRECTION_EAST = "east";
public const CARDINAL_DIRECTION_NORTH = "north";
public const CARDINAL_DIRECTION_SOUTH = "south";
public const CARDINAL_DIRECTION_WEST = "west";
public const MONSTER_EGG_STONE_TYPE_CHISELED_STONE_BRICK = "chiseled_stone_brick";
public const MONSTER_EGG_STONE_TYPE_COBBLESTONE = "cobblestone";
public const MONSTER_EGG_STONE_TYPE_CRACKED_STONE_BRICK = "cracked_stone_brick";

View File

@ -97,6 +97,7 @@ final class BlockTypeNames{
public const BIRCH_WALL_SIGN = "minecraft:birch_wall_sign";
public const BLACK_CANDLE = "minecraft:black_candle";
public const BLACK_CANDLE_CAKE = "minecraft:black_candle_cake";
public const BLACK_CARPET = "minecraft:black_carpet";
public const BLACK_GLAZED_TERRACOTTA = "minecraft:black_glazed_terracotta";
public const BLACK_WOOL = "minecraft:black_wool";
public const BLACKSTONE = "minecraft:blackstone";
@ -107,22 +108,26 @@ final class BlockTypeNames{
public const BLAST_FURNACE = "minecraft:blast_furnace";
public const BLUE_CANDLE = "minecraft:blue_candle";
public const BLUE_CANDLE_CAKE = "minecraft:blue_candle_cake";
public const BLUE_CARPET = "minecraft:blue_carpet";
public const BLUE_GLAZED_TERRACOTTA = "minecraft:blue_glazed_terracotta";
public const BLUE_ICE = "minecraft:blue_ice";
public const BLUE_WOOL = "minecraft:blue_wool";
public const BONE_BLOCK = "minecraft:bone_block";
public const BOOKSHELF = "minecraft:bookshelf";
public const BORDER_BLOCK = "minecraft:border_block";
public const BRAIN_CORAL = "minecraft:brain_coral";
public const BREWING_STAND = "minecraft:brewing_stand";
public const BRICK_BLOCK = "minecraft:brick_block";
public const BRICK_STAIRS = "minecraft:brick_stairs";
public const BROWN_CANDLE = "minecraft:brown_candle";
public const BROWN_CANDLE_CAKE = "minecraft:brown_candle_cake";
public const BROWN_CARPET = "minecraft:brown_carpet";
public const BROWN_GLAZED_TERRACOTTA = "minecraft:brown_glazed_terracotta";
public const BROWN_MUSHROOM = "minecraft:brown_mushroom";
public const BROWN_MUSHROOM_BLOCK = "minecraft:brown_mushroom_block";
public const BROWN_WOOL = "minecraft:brown_wool";
public const BUBBLE_COLUMN = "minecraft:bubble_column";
public const BUBBLE_CORAL = "minecraft:bubble_coral";
public const BUDDING_AMETHYST = "minecraft:budding_amethyst";
public const CACTUS = "minecraft:cactus";
public const CAKE = "minecraft:cake";
@ -132,7 +137,6 @@ final class BlockTypeNames{
public const CAMPFIRE = "minecraft:campfire";
public const CANDLE = "minecraft:candle";
public const CANDLE_CAKE = "minecraft:candle_cake";
public const CARPET = "minecraft:carpet";
public const CARROTS = "minecraft:carrots";
public const CARTOGRAPHY_TABLE = "minecraft:cartography_table";
public const CARVED_PUMPKIN = "minecraft:carved_pumpkin";
@ -189,7 +193,6 @@ final class BlockTypeNames{
public const CONDUIT = "minecraft:conduit";
public const COPPER_BLOCK = "minecraft:copper_block";
public const COPPER_ORE = "minecraft:copper_ore";
public const CORAL = "minecraft:coral";
public const CORAL_BLOCK = "minecraft:coral_block";
public const CORAL_FAN = "minecraft:coral_fan";
public const CORAL_FAN_DEAD = "minecraft:coral_fan_dead";
@ -225,6 +228,7 @@ final class BlockTypeNames{
public const CUT_COPPER_STAIRS = "minecraft:cut_copper_stairs";
public const CYAN_CANDLE = "minecraft:cyan_candle";
public const CYAN_CANDLE_CAKE = "minecraft:cyan_candle_cake";
public const CYAN_CARPET = "minecraft:cyan_carpet";
public const CYAN_GLAZED_TERRACOTTA = "minecraft:cyan_glazed_terracotta";
public const CYAN_WOOL = "minecraft:cyan_wool";
public const DARK_OAK_BUTTON = "minecraft:dark_oak_button";
@ -241,6 +245,11 @@ final class BlockTypeNames{
public const DARKOAK_WALL_SIGN = "minecraft:darkoak_wall_sign";
public const DAYLIGHT_DETECTOR = "minecraft:daylight_detector";
public const DAYLIGHT_DETECTOR_INVERTED = "minecraft:daylight_detector_inverted";
public const DEAD_BRAIN_CORAL = "minecraft:dead_brain_coral";
public const DEAD_BUBBLE_CORAL = "minecraft:dead_bubble_coral";
public const DEAD_FIRE_CORAL = "minecraft:dead_fire_coral";
public const DEAD_HORN_CORAL = "minecraft:dead_horn_coral";
public const DEAD_TUBE_CORAL = "minecraft:dead_tube_coral";
public const DEADBUSH = "minecraft:deadbush";
public const DECORATED_POT = "minecraft:decorated_pot";
public const DEEPSLATE = "minecraft:deepslate";
@ -419,6 +428,7 @@ final class BlockTypeNames{
public const FARMLAND = "minecraft:farmland";
public const FENCE_GATE = "minecraft:fence_gate";
public const FIRE = "minecraft:fire";
public const FIRE_CORAL = "minecraft:fire_coral";
public const FLETCHING_TABLE = "minecraft:fletching_table";
public const FLOWER_POT = "minecraft:flower_pot";
public const FLOWERING_AZALEA = "minecraft:flowering_azalea";
@ -444,10 +454,12 @@ final class BlockTypeNames{
public const GRAVEL = "minecraft:gravel";
public const GRAY_CANDLE = "minecraft:gray_candle";
public const GRAY_CANDLE_CAKE = "minecraft:gray_candle_cake";
public const GRAY_CARPET = "minecraft:gray_carpet";
public const GRAY_GLAZED_TERRACOTTA = "minecraft:gray_glazed_terracotta";
public const GRAY_WOOL = "minecraft:gray_wool";
public const GREEN_CANDLE = "minecraft:green_candle";
public const GREEN_CANDLE_CAKE = "minecraft:green_candle_cake";
public const GREEN_CARPET = "minecraft:green_carpet";
public const GREEN_GLAZED_TERRACOTTA = "minecraft:green_glazed_terracotta";
public const GREEN_WOOL = "minecraft:green_wool";
public const GRINDSTONE = "minecraft:grindstone";
@ -462,6 +474,7 @@ final class BlockTypeNames{
public const HONEY_BLOCK = "minecraft:honey_block";
public const HONEYCOMB_BLOCK = "minecraft:honeycomb_block";
public const HOPPER = "minecraft:hopper";
public const HORN_CORAL = "minecraft:horn_coral";
public const ICE = "minecraft:ice";
public const INFESTED_DEEPSLATE = "minecraft:infested_deepslate";
public const INFO_UPDATE = "minecraft:info_update";
@ -492,7 +505,6 @@ final class BlockTypeNames{
public const LAPIS_ORE = "minecraft:lapis_ore";
public const LARGE_AMETHYST_BUD = "minecraft:large_amethyst_bud";
public const LAVA = "minecraft:lava";
public const LAVA_CAULDRON = "minecraft:lava_cauldron";
public const LEAVES = "minecraft:leaves";
public const LEAVES2 = "minecraft:leaves2";
public const LECTERN = "minecraft:lectern";
@ -500,15 +512,18 @@ final class BlockTypeNames{
public const LIGHT_BLOCK = "minecraft:light_block";
public const LIGHT_BLUE_CANDLE = "minecraft:light_blue_candle";
public const LIGHT_BLUE_CANDLE_CAKE = "minecraft:light_blue_candle_cake";
public const LIGHT_BLUE_CARPET = "minecraft:light_blue_carpet";
public const LIGHT_BLUE_GLAZED_TERRACOTTA = "minecraft:light_blue_glazed_terracotta";
public const LIGHT_BLUE_WOOL = "minecraft:light_blue_wool";
public const LIGHT_GRAY_CANDLE = "minecraft:light_gray_candle";
public const LIGHT_GRAY_CANDLE_CAKE = "minecraft:light_gray_candle_cake";
public const LIGHT_GRAY_CARPET = "minecraft:light_gray_carpet";
public const LIGHT_GRAY_WOOL = "minecraft:light_gray_wool";
public const LIGHT_WEIGHTED_PRESSURE_PLATE = "minecraft:light_weighted_pressure_plate";
public const LIGHTNING_ROD = "minecraft:lightning_rod";
public const LIME_CANDLE = "minecraft:lime_candle";
public const LIME_CANDLE_CAKE = "minecraft:lime_candle_cake";
public const LIME_CARPET = "minecraft:lime_carpet";
public const LIME_GLAZED_TERRACOTTA = "minecraft:lime_glazed_terracotta";
public const LIME_WOOL = "minecraft:lime_wool";
public const LIT_BLAST_FURNACE = "minecraft:lit_blast_furnace";
@ -522,6 +537,7 @@ final class BlockTypeNames{
public const LOOM = "minecraft:loom";
public const MAGENTA_CANDLE = "minecraft:magenta_candle";
public const MAGENTA_CANDLE_CAKE = "minecraft:magenta_candle_cake";
public const MAGENTA_CARPET = "minecraft:magenta_carpet";
public const MAGENTA_GLAZED_TERRACOTTA = "minecraft:magenta_glazed_terracotta";
public const MAGENTA_WOOL = "minecraft:magenta_wool";
public const MAGMA = "minecraft:magma";
@ -583,6 +599,7 @@ final class BlockTypeNames{
public const OCHRE_FROGLIGHT = "minecraft:ochre_froglight";
public const ORANGE_CANDLE = "minecraft:orange_candle";
public const ORANGE_CANDLE_CAKE = "minecraft:orange_candle_cake";
public const ORANGE_CARPET = "minecraft:orange_carpet";
public const ORANGE_GLAZED_TERRACOTTA = "minecraft:orange_glazed_terracotta";
public const ORANGE_WOOL = "minecraft:orange_wool";
public const OXIDIZED_COPPER = "minecraft:oxidized_copper";
@ -595,11 +612,14 @@ final class BlockTypeNames{
public const PEARLESCENT_FROGLIGHT = "minecraft:pearlescent_froglight";
public const PINK_CANDLE = "minecraft:pink_candle";
public const PINK_CANDLE_CAKE = "minecraft:pink_candle_cake";
public const PINK_CARPET = "minecraft:pink_carpet";
public const PINK_GLAZED_TERRACOTTA = "minecraft:pink_glazed_terracotta";
public const PINK_PETALS = "minecraft:pink_petals";
public const PINK_WOOL = "minecraft:pink_wool";
public const PISTON = "minecraft:piston";
public const PISTON_ARM_COLLISION = "minecraft:piston_arm_collision";
public const PITCHER_CROP = "minecraft:pitcher_crop";
public const PITCHER_PLANT = "minecraft:pitcher_plant";
public const PLANKS = "minecraft:planks";
public const PODZOL = "minecraft:podzol";
public const POINTED_DRIPSTONE = "minecraft:pointed_dripstone";
@ -636,6 +656,7 @@ final class BlockTypeNames{
public const PUMPKIN_STEM = "minecraft:pumpkin_stem";
public const PURPLE_CANDLE = "minecraft:purple_candle";
public const PURPLE_CANDLE_CAKE = "minecraft:purple_candle_cake";
public const PURPLE_CARPET = "minecraft:purple_carpet";
public const PURPLE_GLAZED_TERRACOTTA = "minecraft:purple_glazed_terracotta";
public const PURPLE_WOOL = "minecraft:purple_wool";
public const PURPUR_BLOCK = "minecraft:purpur_block";
@ -650,6 +671,7 @@ final class BlockTypeNames{
public const RAW_IRON_BLOCK = "minecraft:raw_iron_block";
public const RED_CANDLE = "minecraft:red_candle";
public const RED_CANDLE_CAKE = "minecraft:red_candle_cake";
public const RED_CARPET = "minecraft:red_carpet";
public const RED_FLOWER = "minecraft:red_flower";
public const RED_GLAZED_TERRACOTTA = "minecraft:red_glazed_terracotta";
public const RED_MUSHROOM = "minecraft:red_mushroom";
@ -696,6 +718,7 @@ final class BlockTypeNames{
public const SMOOTH_RED_SANDSTONE_STAIRS = "minecraft:smooth_red_sandstone_stairs";
public const SMOOTH_SANDSTONE_STAIRS = "minecraft:smooth_sandstone_stairs";
public const SMOOTH_STONE = "minecraft:smooth_stone";
public const SNIFFER_EGG = "minecraft:sniffer_egg";
public const SNOW = "minecraft:snow";
public const SNOW_LAYER = "minecraft:snow_layer";
public const SOUL_CAMPFIRE = "minecraft:soul_campfire";
@ -767,6 +790,7 @@ final class BlockTypeNames{
public const TRAPPED_CHEST = "minecraft:trapped_chest";
public const TRIP_WIRE = "minecraft:trip_wire";
public const TRIPWIRE_HOOK = "minecraft:tripwire_hook";
public const TUBE_CORAL = "minecraft:tube_coral";
public const TUFF = "minecraft:tuff";
public const TURTLE_EGG = "minecraft:turtle_egg";
public const TWISTING_VINES = "minecraft:twisting_vines";
@ -831,6 +855,7 @@ final class BlockTypeNames{
public const WHEAT = "minecraft:wheat";
public const WHITE_CANDLE = "minecraft:white_candle";
public const WHITE_CANDLE_CAKE = "minecraft:white_candle_cake";
public const WHITE_CARPET = "minecraft:white_carpet";
public const WHITE_GLAZED_TERRACOTTA = "minecraft:white_glazed_terracotta";
public const WHITE_WOOL = "minecraft:white_wool";
public const WITHER_ROSE = "minecraft:wither_rose";
@ -841,6 +866,7 @@ final class BlockTypeNames{
public const WOODEN_SLAB = "minecraft:wooden_slab";
public const YELLOW_CANDLE = "minecraft:yellow_candle";
public const YELLOW_CANDLE_CAKE = "minecraft:yellow_candle_cake";
public const YELLOW_CARPET = "minecraft:yellow_carpet";
public const YELLOW_FLOWER = "minecraft:yellow_flower";
public const YELLOW_GLAZED_TERRACOTTA = "minecraft:yellow_glazed_terracotta";
public const YELLOW_WOOL = "minecraft:yellow_wool";

View File

@ -190,6 +190,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
public function __construct(){
$this->registerCandleSerializers();
$this->registerFlatColorBlockSerializers();
$this->registerFlatCoralSerializers();
$this->registerCauldronSerializers();
$this->registerWoodBlockSerializers();
$this->registerSimpleSerializers();
@ -346,14 +347,47 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
DyeColor::YELLOW() => Ids::YELLOW_WOOL,
default => throw new AssumptionFailedError("Unhandled dye colour " . $color->name())
}));
$this->map(Blocks::CARPET(), fn(Carpet $block) => Writer::create(match($color = $block->getColor()){
DyeColor::BLACK() => Ids::BLACK_CARPET,
DyeColor::BLUE() => Ids::BLUE_CARPET,
DyeColor::BROWN() => Ids::BROWN_CARPET,
DyeColor::CYAN() => Ids::CYAN_CARPET,
DyeColor::GRAY() => Ids::GRAY_CARPET,
DyeColor::GREEN() => Ids::GREEN_CARPET,
DyeColor::LIGHT_BLUE() => Ids::LIGHT_BLUE_CARPET,
DyeColor::LIGHT_GRAY() => Ids::LIGHT_GRAY_CARPET,
DyeColor::LIME() => Ids::LIME_CARPET,
DyeColor::MAGENTA() => Ids::MAGENTA_CARPET,
DyeColor::ORANGE() => Ids::ORANGE_CARPET,
DyeColor::PINK() => Ids::PINK_CARPET,
DyeColor::PURPLE() => Ids::PURPLE_CARPET,
DyeColor::RED() => Ids::RED_CARPET,
DyeColor::WHITE() => Ids::WHITE_CARPET,
DyeColor::YELLOW() => Ids::YELLOW_CARPET,
default => throw new AssumptionFailedError("Unhandled dye colour " . $color->name())
}));
}
private function registerFlatCoralSerializers() : void{
$this->map(Blocks::CORAL(), fn(Coral $block) => Writer::create(
match($coralType = $block->getCoralType()){
CoralType::BRAIN() => $block->isDead() ? Ids::DEAD_BRAIN_CORAL : Ids::BRAIN_CORAL,
CoralType::BUBBLE() => $block->isDead() ? Ids::DEAD_BUBBLE_CORAL : Ids::BUBBLE_CORAL,
CoralType::FIRE() => $block->isDead() ? Ids::DEAD_FIRE_CORAL : Ids::FIRE_CORAL,
CoralType::HORN() => $block->isDead() ? Ids::DEAD_HORN_CORAL : Ids::HORN_CORAL,
CoralType::TUBE() => $block->isDead() ? Ids::DEAD_TUBE_CORAL : Ids::TUBE_CORAL,
default => throw new AssumptionFailedError("Unhandled coral type " . $coralType->name())
}
));
}
private function registerCauldronSerializers() : void{
$this->map(Blocks::CAULDRON(), fn() => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, 0, new Writer(Ids::CAULDRON)));
$this->map(Blocks::LAVA_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_LAVA, $b->getFillLevel(), new Writer(Ids::LAVA_CAULDRON)));
$this->map(Blocks::CAULDRON(), fn() => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, 0));
$this->map(Blocks::LAVA_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_LAVA, $b->getFillLevel()));
//potion cauldrons store their real information in the block actor data
$this->map(Blocks::POTION_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, $b->getFillLevel(), new Writer(Ids::CAULDRON)));
$this->map(Blocks::WATER_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, $b->getFillLevel(), new Writer(Ids::CAULDRON)));
$this->map(Blocks::POTION_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, $b->getFillLevel()));
$this->map(Blocks::WATER_CAULDRON(), fn(FillableCauldron $b) => Helper::encodeCauldron(StringValues::CAULDRON_LIQUID_WATER, $b->getFillLevel()));
}
private function registerWoodBlockSerializers() : void{
@ -758,14 +792,10 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
return Writer::create(Ids::CAKE)
->writeInt(StateNames::BITE_COUNTER, $block->getBites());
});
$this->map(Blocks::CARPET(), function(Carpet $block) : Writer{
return Writer::create(Ids::CARPET)
->writeColor($block->getColor());
});
$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());
->writeCardinalHorizontalFacing($block->getFacing());
});
$this->map(Blocks::CAVE_VINES(), function(CaveVines $block) : Writer{
//I have no idea why this only has 3 IDs - there are 4 in Java and 4 visually distinct states in Bedrock
@ -888,11 +918,6 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
return Writer::create(Ids::CONCRETE_POWDER)
->writeColor($block->getColor());
});
$this->map(Blocks::CORAL(), function(Coral $block) : Writer{
return Writer::create(Ids::CORAL)
->writeBool(StateNames::DEAD_BIT, $block->isDead())
->writeCoralType($block->getCoralType());
});
$this->map(Blocks::CORAL_BLOCK(), function(CoralBlock $block) : Writer{
return Writer::create(Ids::CORAL_BLOCK)
->writeBool(StateNames::DEAD_BIT, $block->isDead())
@ -1118,7 +1143,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
$this->map(Blocks::LILY_OF_THE_VALLEY(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_LILY_OF_THE_VALLEY));
$this->map(Blocks::LIT_PUMPKIN(), function(LitPumpkin $block) : Writer{
return Writer::create(Ids::LIT_PUMPKIN)
->writeLegacyHorizontalFacing($block->getFacing());
->writeCardinalHorizontalFacing($block->getFacing());
});
$this->map(Blocks::LOOM(), function(Loom $block) : Writer{
return Writer::create(Ids::LOOM)
@ -1241,7 +1266,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
$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
->writeCardinalHorizontalFacing(Facing::SOUTH); //no longer used
});
$this->map(Blocks::PUMPKIN_STEM(), fn(PumpkinStem $block) => Helper::encodeStem($block, new Writer(Ids::PUMPKIN_STEM)));
$this->map(Blocks::PURPLE_TORCH(), fn(Torch $block) => Helper::encodeColoredTorch($block, true, Writer::create(Ids::COLORED_TORCH_BP)));

View File

@ -185,6 +185,20 @@ final class BlockStateReader{
]);
}
/**
* Used by pumpkins as of 1.20.0.23 beta
* @throws BlockStateDeserializeException
*/
public function readCardinalHorizontalFacing() : int{
return match($raw = $this->readString(BlockStateNames::CARDINAL_DIRECTION)){
StringValues::CARDINAL_DIRECTION_NORTH => Facing::NORTH,
StringValues::CARDINAL_DIRECTION_SOUTH => Facing::SOUTH,
StringValues::CARDINAL_DIRECTION_WEST => Facing::WEST,
StringValues::CARDINAL_DIRECTION_EAST => Facing::EAST,
default => throw $this->badValueException(BlockStateNames::CARDINAL_DIRECTION, $raw)
};
}
/** @throws BlockStateDeserializeException */
public function readColor() : DyeColor{
// * color (StringTag) = black, blue, brown, cyan, gray, green, light_blue, lime, magenta, orange, pink, purple, red, silver, white, yellow

View File

@ -93,8 +93,8 @@ final class BlockStateSerializerHelper{
->writeTorchFacing($block->getFacing());
}
public static function encodeCauldron(string $liquid, int $fillLevel, BlockStateWriter $out) : BlockStateWriter{
return $out
public static function encodeCauldron(string $liquid, int $fillLevel) : BlockStateWriter{
return Writer::create(Ids::CAULDRON)
->writeString(BlockStateNames::CAULDRON_LIQUID, $liquid)
->writeInt(BlockStateNames::FILL_LEVEL, $fillLevel);
}

View File

@ -73,6 +73,7 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
public function __construct(){
$this->registerCandleDeserializers();
$this->registerFlatColorBlockDeserializers();
$this->registerFlatCoralDeserializers();
$this->registerCauldronDeserializers();
$this->registerWoodBlockDeserializers();
$this->registerSimpleDeserializers();
@ -220,6 +221,48 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
] as $id => $color){
$this->mapSimple($id, fn() => Blocks::WOOL()->setColor($color));
}
foreach([
Ids::BLACK_CARPET => DyeColor::BLACK(),
Ids::BLUE_CARPET => DyeColor::BLUE(),
Ids::BROWN_CARPET => DyeColor::BROWN(),
Ids::CYAN_CARPET => DyeColor::CYAN(),
Ids::GRAY_CARPET => DyeColor::GRAY(),
Ids::GREEN_CARPET => DyeColor::GREEN(),
Ids::LIGHT_BLUE_CARPET => DyeColor::LIGHT_BLUE(),
Ids::LIGHT_GRAY_CARPET => DyeColor::LIGHT_GRAY(),
Ids::LIME_CARPET => DyeColor::LIME(),
Ids::MAGENTA_CARPET => DyeColor::MAGENTA(),
Ids::ORANGE_CARPET => DyeColor::ORANGE(),
Ids::PINK_CARPET => DyeColor::PINK(),
Ids::PURPLE_CARPET => DyeColor::PURPLE(),
Ids::RED_CARPET => DyeColor::RED(),
Ids::WHITE_CARPET => DyeColor::WHITE(),
Ids::YELLOW_CARPET => DyeColor::YELLOW(),
] as $id => $color){
$this->mapSimple($id, fn() => Blocks::CARPET()->setColor($color));
}
}
private function registerFlatCoralDeserializers() : void{
foreach([
Ids::BRAIN_CORAL => CoralType::BRAIN(),
Ids::BUBBLE_CORAL => CoralType::BUBBLE(),
Ids::FIRE_CORAL => CoralType::FIRE(),
Ids::HORN_CORAL => CoralType::HORN(),
Ids::TUBE_CORAL => CoralType::TUBE(),
] as $id => $coralType){
$this->mapSimple($id, fn() => Blocks::CORAL()->setCoralType($coralType)->setDead(false));
}
foreach([
Ids::DEAD_BRAIN_CORAL => CoralType::BRAIN(),
Ids::DEAD_BUBBLE_CORAL => CoralType::BUBBLE(),
Ids::DEAD_FIRE_CORAL => CoralType::FIRE(),
Ids::DEAD_HORN_CORAL => CoralType::HORN(),
Ids::DEAD_TUBE_CORAL => CoralType::TUBE(),
] as $id => $coralType){
$this->mapSimple($id, fn() => Blocks::CORAL()->setCoralType($coralType)->setDead(true));
}
}
private function registerCauldronDeserializers() : void{
@ -238,7 +281,6 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
})->setFillLevel($level);
};
$this->map(Ids::CAULDRON, $deserializer);
$this->map(Ids::LAVA_CAULDRON, $deserializer);
}
private function registerWoodBlockDeserializers() : void{
@ -621,14 +663,10 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
return Blocks::CAKE()
->setBites($in->readBoundedInt(StateNames::BITE_COUNTER, 0, 6));
});
$this->map(Ids::CARPET, function(Reader $in) : Block{
return Blocks::CARPET()
->setColor($in->readColor());
});
$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());
->setFacing($in->readCardinalHorizontalFacing());
});
$this->map(Ids::CAVE_VINES, function(Reader $in) : CaveVines{
return Blocks::CAVE_VINES()
@ -700,11 +738,6 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
$this->map(Ids::CUT_COPPER, fn() => Helper::decodeCopper(Blocks::CUT_COPPER(), CopperOxidation::NONE()));
$this->mapSlab(Ids::CUT_COPPER_SLAB, Ids::DOUBLE_CUT_COPPER_SLAB, fn() => Helper::decodeCopper(Blocks::CUT_COPPER_SLAB(), CopperOxidation::NONE()));
$this->mapStairs(Ids::CUT_COPPER_STAIRS, fn() => Helper::decodeCopper(Blocks::CUT_COPPER_STAIRS(), CopperOxidation::NONE()));
$this->map(Ids::CORAL, function(Reader $in) : Block{
return Blocks::CORAL()
->setCoralType($in->readCoralType())
->setDead($in->readBool(StateNames::DEAD_BIT));
});
$this->map(Ids::CORAL_BLOCK, function(Reader $in) : Block{
return Blocks::CORAL_BLOCK()
->setCoralType($in->readCoralType())
@ -925,7 +958,7 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
});
$this->map(Ids::LIT_PUMPKIN, function(Reader $in) : Block{
return Blocks::LIT_PUMPKIN()
->setFacing($in->readLegacyHorizontalFacing());
->setFacing($in->readCardinalHorizontalFacing());
});
$this->map(Ids::LIT_REDSTONE_LAMP, function() : Block{
return Blocks::REDSTONE_LAMP()
@ -1046,7 +1079,7 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
$this->mapStairs(Ids::PRISMARINE_BRICKS_STAIRS, fn() => Blocks::PRISMARINE_BRICKS_STAIRS());
$this->mapStairs(Ids::PRISMARINE_STAIRS, fn() => Blocks::PRISMARINE_STAIRS());
$this->map(Ids::PUMPKIN, function(Reader $in) : Block{
$in->ignored(StateNames::DIRECTION); //obsolete
$in->ignored(StateNames::CARDINAL_DIRECTION); //obsolete
return Blocks::PUMPKIN();
});
$this->map(Ids::PUMPKIN_STEM, fn(Reader $in) => Helper::decodeStem(Blocks::PUMPKIN_STEM(), $in));

View File

@ -141,6 +141,20 @@ final class BlockStateWriter{
});
}
/**
* Used by pumpkins as of 1.20.0.23 beta
* @return $this
*/
public function writeCardinalHorizontalFacing(int $value) : self{
return $this->writeString(BlockStateNames::CARDINAL_DIRECTION, match($value){
Facing::SOUTH => StringValues::CARDINAL_DIRECTION_SOUTH,
Facing::WEST => StringValues::CARDINAL_DIRECTION_WEST,
Facing::NORTH => StringValues::CARDINAL_DIRECTION_NORTH,
Facing::EAST => StringValues::CARDINAL_DIRECTION_EAST,
default => throw new BlockStateSerializeException("Invalid horizontal facing $value")
});
}
/** @return $this */
public function writeColor(DyeColor $color) : self{
$this->writeString(BlockStateNames::COLOR, match($color->id()){

View File

@ -50,12 +50,12 @@ use function time;
class BedrockWorldData extends BaseNbtWorldData{
public const CURRENT_STORAGE_VERSION = 10;
public const CURRENT_STORAGE_NETWORK_VERSION = 582;
public const CURRENT_STORAGE_NETWORK_VERSION = 589;
public const CURRENT_CLIENT_VERSION_TARGET = [
1, //major
19, //minor
80, //patch
0, //revision
20, //minor
0, //patch
1, //revision
0 //is beta
];