This commit is contained in:
Dylan K. Taylor 2025-08-15 19:47:28 +01:00
parent db880c49a5
commit 390c03f52e
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -272,15 +272,19 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
throw new BlockStateSerializeException("No serializer registered for " . get_class($blockState) . " with type ID $typeId"); throw new BlockStateSerializeException("No serializer registered for " . get_class($blockState) . " with type ID $typeId");
} }
if($locatedSerializer instanceof BlockStateData){
return $locatedSerializer;
}
/** /**
* TODO: there is no guarantee that this type actually matches that of $blockState - a plugin may have stolen * TODO: there is no guarantee that this type actually matches that of $blockState - a plugin may have stolen
* the type ID of the block (which never makes sense, even in a world where overriding block types is a thing). * the type ID of the block (which never makes sense, even in a world where overriding block types is a thing).
* In the future we'll need some way to guarantee that type IDs are never reused (perhaps spl_object_id()?) * In the future we'll need some way to guarantee that type IDs are never reused (perhaps spl_object_id()?)
* *
* @var \Closure|BlockStateData $locatedSerializer * @var \Closure $locatedSerializer
* @phpstan-var \Closure(TBlockType) : (Writer|BlockStateData)|BlockStateData $locatedSerializer * @phpstan-var \Closure(TBlockType) : (Writer|BlockStateData) $locatedSerializer
*/ */
$writerOrState = $locatedSerializer instanceof \Closure ? $locatedSerializer($blockState) : $locatedSerializer; $writerOrState = $locatedSerializer($blockState);
return $writerOrState instanceof Writer ? $writerOrState->getBlockStateData() : $writerOrState; return $writerOrState instanceof Writer ? $writerOrState->getBlockStateData() : $writerOrState;
} }
@ -328,45 +332,43 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
} }
public function registerFlatColorBlockSerializers() : void{ public function registerFlatColorBlockSerializers() : void{
$this->map(Blocks::STAINED_HARDENED_GLASS(), fn(StainedHardenedGlass $block) => $this->map(Blocks::STAINED_HARDENED_GLASS(), fn(StainedHardenedGlass $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::HARD_BLACK_STAINED_GLASS,
DyeColor::BLACK => Ids::HARD_BLACK_STAINED_GLASS, DyeColor::BLUE => Ids::HARD_BLUE_STAINED_GLASS,
DyeColor::BLUE => Ids::HARD_BLUE_STAINED_GLASS, DyeColor::BROWN => Ids::HARD_BROWN_STAINED_GLASS,
DyeColor::BROWN => Ids::HARD_BROWN_STAINED_GLASS, DyeColor::CYAN => Ids::HARD_CYAN_STAINED_GLASS,
DyeColor::CYAN => Ids::HARD_CYAN_STAINED_GLASS, DyeColor::GRAY => Ids::HARD_GRAY_STAINED_GLASS,
DyeColor::GRAY => Ids::HARD_GRAY_STAINED_GLASS, DyeColor::GREEN => Ids::HARD_GREEN_STAINED_GLASS,
DyeColor::GREEN => Ids::HARD_GREEN_STAINED_GLASS, DyeColor::LIGHT_BLUE => Ids::HARD_LIGHT_BLUE_STAINED_GLASS,
DyeColor::LIGHT_BLUE => Ids::HARD_LIGHT_BLUE_STAINED_GLASS, DyeColor::LIGHT_GRAY => Ids::HARD_LIGHT_GRAY_STAINED_GLASS,
DyeColor::LIGHT_GRAY => Ids::HARD_LIGHT_GRAY_STAINED_GLASS, DyeColor::LIME => Ids::HARD_LIME_STAINED_GLASS,
DyeColor::LIME => Ids::HARD_LIME_STAINED_GLASS, DyeColor::MAGENTA => Ids::HARD_MAGENTA_STAINED_GLASS,
DyeColor::MAGENTA => Ids::HARD_MAGENTA_STAINED_GLASS, DyeColor::ORANGE => Ids::HARD_ORANGE_STAINED_GLASS,
DyeColor::ORANGE => Ids::HARD_ORANGE_STAINED_GLASS, DyeColor::PINK => Ids::HARD_PINK_STAINED_GLASS,
DyeColor::PINK => Ids::HARD_PINK_STAINED_GLASS, DyeColor::PURPLE => Ids::HARD_PURPLE_STAINED_GLASS,
DyeColor::PURPLE => Ids::HARD_PURPLE_STAINED_GLASS, DyeColor::RED => Ids::HARD_RED_STAINED_GLASS,
DyeColor::RED => Ids::HARD_RED_STAINED_GLASS, DyeColor::WHITE => Ids::HARD_WHITE_STAINED_GLASS,
DyeColor::WHITE => Ids::HARD_WHITE_STAINED_GLASS, DyeColor::YELLOW => Ids::HARD_YELLOW_STAINED_GLASS,
DyeColor::YELLOW => Ids::HARD_YELLOW_STAINED_GLASS, }, []));
}, []));
$this->map(Blocks::STAINED_HARDENED_GLASS_PANE(), fn(StainedHardenedGlassPane $block) => $this->map(Blocks::STAINED_HARDENED_GLASS_PANE(), fn(StainedHardenedGlassPane $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::HARD_BLACK_STAINED_GLASS_PANE,
DyeColor::BLACK => Ids::HARD_BLACK_STAINED_GLASS_PANE, DyeColor::BLUE => Ids::HARD_BLUE_STAINED_GLASS_PANE,
DyeColor::BLUE => Ids::HARD_BLUE_STAINED_GLASS_PANE, DyeColor::BROWN => Ids::HARD_BROWN_STAINED_GLASS_PANE,
DyeColor::BROWN => Ids::HARD_BROWN_STAINED_GLASS_PANE, DyeColor::CYAN => Ids::HARD_CYAN_STAINED_GLASS_PANE,
DyeColor::CYAN => Ids::HARD_CYAN_STAINED_GLASS_PANE, DyeColor::GRAY => Ids::HARD_GRAY_STAINED_GLASS_PANE,
DyeColor::GRAY => Ids::HARD_GRAY_STAINED_GLASS_PANE, DyeColor::GREEN => Ids::HARD_GREEN_STAINED_GLASS_PANE,
DyeColor::GREEN => Ids::HARD_GREEN_STAINED_GLASS_PANE, DyeColor::LIGHT_BLUE => Ids::HARD_LIGHT_BLUE_STAINED_GLASS_PANE,
DyeColor::LIGHT_BLUE => Ids::HARD_LIGHT_BLUE_STAINED_GLASS_PANE, DyeColor::LIGHT_GRAY => Ids::HARD_LIGHT_GRAY_STAINED_GLASS_PANE,
DyeColor::LIGHT_GRAY => Ids::HARD_LIGHT_GRAY_STAINED_GLASS_PANE, DyeColor::LIME => Ids::HARD_LIME_STAINED_GLASS_PANE,
DyeColor::LIME => Ids::HARD_LIME_STAINED_GLASS_PANE, DyeColor::MAGENTA => Ids::HARD_MAGENTA_STAINED_GLASS_PANE,
DyeColor::MAGENTA => Ids::HARD_MAGENTA_STAINED_GLASS_PANE, DyeColor::ORANGE => Ids::HARD_ORANGE_STAINED_GLASS_PANE,
DyeColor::ORANGE => Ids::HARD_ORANGE_STAINED_GLASS_PANE, DyeColor::PINK => Ids::HARD_PINK_STAINED_GLASS_PANE,
DyeColor::PINK => Ids::HARD_PINK_STAINED_GLASS_PANE, DyeColor::PURPLE => Ids::HARD_PURPLE_STAINED_GLASS_PANE,
DyeColor::PURPLE => Ids::HARD_PURPLE_STAINED_GLASS_PANE, DyeColor::RED => Ids::HARD_RED_STAINED_GLASS_PANE,
DyeColor::RED => Ids::HARD_RED_STAINED_GLASS_PANE, DyeColor::WHITE => Ids::HARD_WHITE_STAINED_GLASS_PANE,
DyeColor::WHITE => Ids::HARD_WHITE_STAINED_GLASS_PANE, DyeColor::YELLOW => Ids::HARD_YELLOW_STAINED_GLASS_PANE,
DyeColor::YELLOW => Ids::HARD_YELLOW_STAINED_GLASS_PANE, }, []));
}, []));
$this->map(Blocks::GLAZED_TERRACOTTA(), function(GlazedTerracotta $block) : Writer{ $this->map(Blocks::GLAZED_TERRACOTTA(), function(GlazedTerracotta $block) : Writer{
return Writer::create(match($block->getColor()){ return Writer::create(match($block->getColor()){
@ -390,177 +392,167 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
->writeHorizontalFacing($block->getFacing()); ->writeHorizontalFacing($block->getFacing());
}); });
$this->map(Blocks::WOOL(), fn(Wool $block) => $this->map(Blocks::WOOL(), fn(Wool $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_WOOL,
DyeColor::BLACK => Ids::BLACK_WOOL, DyeColor::BLUE => Ids::BLUE_WOOL,
DyeColor::BLUE => Ids::BLUE_WOOL, DyeColor::BROWN => Ids::BROWN_WOOL,
DyeColor::BROWN => Ids::BROWN_WOOL, DyeColor::CYAN => Ids::CYAN_WOOL,
DyeColor::CYAN => Ids::CYAN_WOOL, DyeColor::GRAY => Ids::GRAY_WOOL,
DyeColor::GRAY => Ids::GRAY_WOOL, DyeColor::GREEN => Ids::GREEN_WOOL,
DyeColor::GREEN => Ids::GREEN_WOOL, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_WOOL,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_WOOL, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_WOOL,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_WOOL, DyeColor::LIME => Ids::LIME_WOOL,
DyeColor::LIME => Ids::LIME_WOOL, DyeColor::MAGENTA => Ids::MAGENTA_WOOL,
DyeColor::MAGENTA => Ids::MAGENTA_WOOL, DyeColor::ORANGE => Ids::ORANGE_WOOL,
DyeColor::ORANGE => Ids::ORANGE_WOOL, DyeColor::PINK => Ids::PINK_WOOL,
DyeColor::PINK => Ids::PINK_WOOL, DyeColor::PURPLE => Ids::PURPLE_WOOL,
DyeColor::PURPLE => Ids::PURPLE_WOOL, DyeColor::RED => Ids::RED_WOOL,
DyeColor::RED => Ids::RED_WOOL, DyeColor::WHITE => Ids::WHITE_WOOL,
DyeColor::WHITE => Ids::WHITE_WOOL, DyeColor::YELLOW => Ids::YELLOW_WOOL,
DyeColor::YELLOW => Ids::YELLOW_WOOL, }, []));
}, []));
$this->map(Blocks::CARPET(), fn(Carpet $block) => $this->map(Blocks::CARPET(), fn(Carpet $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_CARPET,
DyeColor::BLACK => Ids::BLACK_CARPET, DyeColor::BLUE => Ids::BLUE_CARPET,
DyeColor::BLUE => Ids::BLUE_CARPET, DyeColor::BROWN => Ids::BROWN_CARPET,
DyeColor::BROWN => Ids::BROWN_CARPET, DyeColor::CYAN => Ids::CYAN_CARPET,
DyeColor::CYAN => Ids::CYAN_CARPET, DyeColor::GRAY => Ids::GRAY_CARPET,
DyeColor::GRAY => Ids::GRAY_CARPET, DyeColor::GREEN => Ids::GREEN_CARPET,
DyeColor::GREEN => Ids::GREEN_CARPET, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CARPET,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CARPET, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CARPET,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CARPET, DyeColor::LIME => Ids::LIME_CARPET,
DyeColor::LIME => Ids::LIME_CARPET, DyeColor::MAGENTA => Ids::MAGENTA_CARPET,
DyeColor::MAGENTA => Ids::MAGENTA_CARPET, DyeColor::ORANGE => Ids::ORANGE_CARPET,
DyeColor::ORANGE => Ids::ORANGE_CARPET, DyeColor::PINK => Ids::PINK_CARPET,
DyeColor::PINK => Ids::PINK_CARPET, DyeColor::PURPLE => Ids::PURPLE_CARPET,
DyeColor::PURPLE => Ids::PURPLE_CARPET, DyeColor::RED => Ids::RED_CARPET,
DyeColor::RED => Ids::RED_CARPET, DyeColor::WHITE => Ids::WHITE_CARPET,
DyeColor::WHITE => Ids::WHITE_CARPET, DyeColor::YELLOW => Ids::YELLOW_CARPET,
DyeColor::YELLOW => Ids::YELLOW_CARPET, }, []));
}, []));
$this->map(Blocks::DYED_SHULKER_BOX(), fn(DyedShulkerBox $block) => $this->map(Blocks::DYED_SHULKER_BOX(), fn(DyedShulkerBox $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_SHULKER_BOX,
DyeColor::BLACK => Ids::BLACK_SHULKER_BOX, DyeColor::BLUE => Ids::BLUE_SHULKER_BOX,
DyeColor::BLUE => Ids::BLUE_SHULKER_BOX, DyeColor::BROWN => Ids::BROWN_SHULKER_BOX,
DyeColor::BROWN => Ids::BROWN_SHULKER_BOX, DyeColor::CYAN => Ids::CYAN_SHULKER_BOX,
DyeColor::CYAN => Ids::CYAN_SHULKER_BOX, DyeColor::GRAY => Ids::GRAY_SHULKER_BOX,
DyeColor::GRAY => Ids::GRAY_SHULKER_BOX, DyeColor::GREEN => Ids::GREEN_SHULKER_BOX,
DyeColor::GREEN => Ids::GREEN_SHULKER_BOX, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_SHULKER_BOX,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_SHULKER_BOX, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_SHULKER_BOX,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_SHULKER_BOX, DyeColor::LIME => Ids::LIME_SHULKER_BOX,
DyeColor::LIME => Ids::LIME_SHULKER_BOX, DyeColor::MAGENTA => Ids::MAGENTA_SHULKER_BOX,
DyeColor::MAGENTA => Ids::MAGENTA_SHULKER_BOX, DyeColor::ORANGE => Ids::ORANGE_SHULKER_BOX,
DyeColor::ORANGE => Ids::ORANGE_SHULKER_BOX, DyeColor::PINK => Ids::PINK_SHULKER_BOX,
DyeColor::PINK => Ids::PINK_SHULKER_BOX, DyeColor::PURPLE => Ids::PURPLE_SHULKER_BOX,
DyeColor::PURPLE => Ids::PURPLE_SHULKER_BOX, DyeColor::RED => Ids::RED_SHULKER_BOX,
DyeColor::RED => Ids::RED_SHULKER_BOX, DyeColor::WHITE => Ids::WHITE_SHULKER_BOX,
DyeColor::WHITE => Ids::WHITE_SHULKER_BOX, DyeColor::YELLOW => Ids::YELLOW_SHULKER_BOX,
DyeColor::YELLOW => Ids::YELLOW_SHULKER_BOX, }, []));
}, []));
$this->map(Blocks::CONCRETE(), fn(Concrete $block) => $this->map(Blocks::CONCRETE(), fn(Concrete $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_CONCRETE,
DyeColor::BLACK => Ids::BLACK_CONCRETE, DyeColor::BLUE => Ids::BLUE_CONCRETE,
DyeColor::BLUE => Ids::BLUE_CONCRETE, DyeColor::BROWN => Ids::BROWN_CONCRETE,
DyeColor::BROWN => Ids::BROWN_CONCRETE, DyeColor::CYAN => Ids::CYAN_CONCRETE,
DyeColor::CYAN => Ids::CYAN_CONCRETE, DyeColor::GRAY => Ids::GRAY_CONCRETE,
DyeColor::GRAY => Ids::GRAY_CONCRETE, DyeColor::GREEN => Ids::GREEN_CONCRETE,
DyeColor::GREEN => Ids::GREEN_CONCRETE, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CONCRETE,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CONCRETE, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CONCRETE,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CONCRETE, DyeColor::LIME => Ids::LIME_CONCRETE,
DyeColor::LIME => Ids::LIME_CONCRETE, DyeColor::MAGENTA => Ids::MAGENTA_CONCRETE,
DyeColor::MAGENTA => Ids::MAGENTA_CONCRETE, DyeColor::ORANGE => Ids::ORANGE_CONCRETE,
DyeColor::ORANGE => Ids::ORANGE_CONCRETE, DyeColor::PINK => Ids::PINK_CONCRETE,
DyeColor::PINK => Ids::PINK_CONCRETE, DyeColor::PURPLE => Ids::PURPLE_CONCRETE,
DyeColor::PURPLE => Ids::PURPLE_CONCRETE, DyeColor::RED => Ids::RED_CONCRETE,
DyeColor::RED => Ids::RED_CONCRETE, DyeColor::WHITE => Ids::WHITE_CONCRETE,
DyeColor::WHITE => Ids::WHITE_CONCRETE, DyeColor::YELLOW => Ids::YELLOW_CONCRETE,
DyeColor::YELLOW => Ids::YELLOW_CONCRETE, }, []));
}, []));
$this->map(Blocks::CONCRETE_POWDER(), fn(ConcretePowder $block) => $this->map(Blocks::CONCRETE_POWDER(), fn(ConcretePowder $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_CONCRETE_POWDER,
DyeColor::BLACK => Ids::BLACK_CONCRETE_POWDER, DyeColor::BLUE => Ids::BLUE_CONCRETE_POWDER,
DyeColor::BLUE => Ids::BLUE_CONCRETE_POWDER, DyeColor::BROWN => Ids::BROWN_CONCRETE_POWDER,
DyeColor::BROWN => Ids::BROWN_CONCRETE_POWDER, DyeColor::CYAN => Ids::CYAN_CONCRETE_POWDER,
DyeColor::CYAN => Ids::CYAN_CONCRETE_POWDER, DyeColor::GRAY => Ids::GRAY_CONCRETE_POWDER,
DyeColor::GRAY => Ids::GRAY_CONCRETE_POWDER, DyeColor::GREEN => Ids::GREEN_CONCRETE_POWDER,
DyeColor::GREEN => Ids::GREEN_CONCRETE_POWDER, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CONCRETE_POWDER,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_CONCRETE_POWDER, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CONCRETE_POWDER,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_CONCRETE_POWDER, DyeColor::LIME => Ids::LIME_CONCRETE_POWDER,
DyeColor::LIME => Ids::LIME_CONCRETE_POWDER, DyeColor::MAGENTA => Ids::MAGENTA_CONCRETE_POWDER,
DyeColor::MAGENTA => Ids::MAGENTA_CONCRETE_POWDER, DyeColor::ORANGE => Ids::ORANGE_CONCRETE_POWDER,
DyeColor::ORANGE => Ids::ORANGE_CONCRETE_POWDER, DyeColor::PINK => Ids::PINK_CONCRETE_POWDER,
DyeColor::PINK => Ids::PINK_CONCRETE_POWDER, DyeColor::PURPLE => Ids::PURPLE_CONCRETE_POWDER,
DyeColor::PURPLE => Ids::PURPLE_CONCRETE_POWDER, DyeColor::RED => Ids::RED_CONCRETE_POWDER,
DyeColor::RED => Ids::RED_CONCRETE_POWDER, DyeColor::WHITE => Ids::WHITE_CONCRETE_POWDER,
DyeColor::WHITE => Ids::WHITE_CONCRETE_POWDER, DyeColor::YELLOW => Ids::YELLOW_CONCRETE_POWDER,
DyeColor::YELLOW => Ids::YELLOW_CONCRETE_POWDER, }, []));
}, []));
$this->map(Blocks::STAINED_CLAY(), fn(StainedHardenedClay $block) => $this->map(Blocks::STAINED_CLAY(), fn(StainedHardenedClay $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_TERRACOTTA,
DyeColor::BLACK => Ids::BLACK_TERRACOTTA, DyeColor::BLUE => Ids::BLUE_TERRACOTTA,
DyeColor::BLUE => Ids::BLUE_TERRACOTTA, DyeColor::BROWN => Ids::BROWN_TERRACOTTA,
DyeColor::BROWN => Ids::BROWN_TERRACOTTA, DyeColor::CYAN => Ids::CYAN_TERRACOTTA,
DyeColor::CYAN => Ids::CYAN_TERRACOTTA, DyeColor::GRAY => Ids::GRAY_TERRACOTTA,
DyeColor::GRAY => Ids::GRAY_TERRACOTTA, DyeColor::GREEN => Ids::GREEN_TERRACOTTA,
DyeColor::GREEN => Ids::GREEN_TERRACOTTA, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_TERRACOTTA,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_TERRACOTTA, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_TERRACOTTA,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_TERRACOTTA, DyeColor::LIME => Ids::LIME_TERRACOTTA,
DyeColor::LIME => Ids::LIME_TERRACOTTA, DyeColor::MAGENTA => Ids::MAGENTA_TERRACOTTA,
DyeColor::MAGENTA => Ids::MAGENTA_TERRACOTTA, DyeColor::ORANGE => Ids::ORANGE_TERRACOTTA,
DyeColor::ORANGE => Ids::ORANGE_TERRACOTTA, DyeColor::PINK => Ids::PINK_TERRACOTTA,
DyeColor::PINK => Ids::PINK_TERRACOTTA, DyeColor::PURPLE => Ids::PURPLE_TERRACOTTA,
DyeColor::PURPLE => Ids::PURPLE_TERRACOTTA, DyeColor::RED => Ids::RED_TERRACOTTA,
DyeColor::RED => Ids::RED_TERRACOTTA, DyeColor::WHITE => Ids::WHITE_TERRACOTTA,
DyeColor::WHITE => Ids::WHITE_TERRACOTTA, DyeColor::YELLOW => Ids::YELLOW_TERRACOTTA,
DyeColor::YELLOW => Ids::YELLOW_TERRACOTTA, }, []));
}, []));
$this->map(Blocks::STAINED_GLASS(), fn(StainedGlass $block) => $this->map(Blocks::STAINED_GLASS(), fn(StainedGlass $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_STAINED_GLASS,
DyeColor::BLACK => Ids::BLACK_STAINED_GLASS, DyeColor::BLUE => Ids::BLUE_STAINED_GLASS,
DyeColor::BLUE => Ids::BLUE_STAINED_GLASS, DyeColor::BROWN => Ids::BROWN_STAINED_GLASS,
DyeColor::BROWN => Ids::BROWN_STAINED_GLASS, DyeColor::CYAN => Ids::CYAN_STAINED_GLASS,
DyeColor::CYAN => Ids::CYAN_STAINED_GLASS, DyeColor::GRAY => Ids::GRAY_STAINED_GLASS,
DyeColor::GRAY => Ids::GRAY_STAINED_GLASS, DyeColor::GREEN => Ids::GREEN_STAINED_GLASS,
DyeColor::GREEN => Ids::GREEN_STAINED_GLASS, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_STAINED_GLASS,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_STAINED_GLASS, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_STAINED_GLASS,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_STAINED_GLASS, DyeColor::LIME => Ids::LIME_STAINED_GLASS,
DyeColor::LIME => Ids::LIME_STAINED_GLASS, DyeColor::MAGENTA => Ids::MAGENTA_STAINED_GLASS,
DyeColor::MAGENTA => Ids::MAGENTA_STAINED_GLASS, DyeColor::ORANGE => Ids::ORANGE_STAINED_GLASS,
DyeColor::ORANGE => Ids::ORANGE_STAINED_GLASS, DyeColor::PINK => Ids::PINK_STAINED_GLASS,
DyeColor::PINK => Ids::PINK_STAINED_GLASS, DyeColor::PURPLE => Ids::PURPLE_STAINED_GLASS,
DyeColor::PURPLE => Ids::PURPLE_STAINED_GLASS, DyeColor::RED => Ids::RED_STAINED_GLASS,
DyeColor::RED => Ids::RED_STAINED_GLASS, DyeColor::WHITE => Ids::WHITE_STAINED_GLASS,
DyeColor::WHITE => Ids::WHITE_STAINED_GLASS, DyeColor::YELLOW => Ids::YELLOW_STAINED_GLASS,
DyeColor::YELLOW => Ids::YELLOW_STAINED_GLASS, }, []));
}, []));
$this->map(Blocks::STAINED_GLASS_PANE(), fn(StainedGlassPane $block) => $this->map(Blocks::STAINED_GLASS_PANE(), fn(StainedGlassPane $block) => BlockStateData::current(match($block->getColor()){
BlockStateData::current(match($block->getColor()){ DyeColor::BLACK => Ids::BLACK_STAINED_GLASS_PANE,
DyeColor::BLACK => Ids::BLACK_STAINED_GLASS_PANE, DyeColor::BLUE => Ids::BLUE_STAINED_GLASS_PANE,
DyeColor::BLUE => Ids::BLUE_STAINED_GLASS_PANE, DyeColor::BROWN => Ids::BROWN_STAINED_GLASS_PANE,
DyeColor::BROWN => Ids::BROWN_STAINED_GLASS_PANE, DyeColor::CYAN => Ids::CYAN_STAINED_GLASS_PANE,
DyeColor::CYAN => Ids::CYAN_STAINED_GLASS_PANE, DyeColor::GRAY => Ids::GRAY_STAINED_GLASS_PANE,
DyeColor::GRAY => Ids::GRAY_STAINED_GLASS_PANE, DyeColor::GREEN => Ids::GREEN_STAINED_GLASS_PANE,
DyeColor::GREEN => Ids::GREEN_STAINED_GLASS_PANE, DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_STAINED_GLASS_PANE,
DyeColor::LIGHT_BLUE => Ids::LIGHT_BLUE_STAINED_GLASS_PANE, DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_STAINED_GLASS_PANE,
DyeColor::LIGHT_GRAY => Ids::LIGHT_GRAY_STAINED_GLASS_PANE, DyeColor::LIME => Ids::LIME_STAINED_GLASS_PANE,
DyeColor::LIME => Ids::LIME_STAINED_GLASS_PANE, DyeColor::MAGENTA => Ids::MAGENTA_STAINED_GLASS_PANE,
DyeColor::MAGENTA => Ids::MAGENTA_STAINED_GLASS_PANE, DyeColor::ORANGE => Ids::ORANGE_STAINED_GLASS_PANE,
DyeColor::ORANGE => Ids::ORANGE_STAINED_GLASS_PANE, DyeColor::PINK => Ids::PINK_STAINED_GLASS_PANE,
DyeColor::PINK => Ids::PINK_STAINED_GLASS_PANE, DyeColor::PURPLE => Ids::PURPLE_STAINED_GLASS_PANE,
DyeColor::PURPLE => Ids::PURPLE_STAINED_GLASS_PANE, DyeColor::RED => Ids::RED_STAINED_GLASS_PANE,
DyeColor::RED => Ids::RED_STAINED_GLASS_PANE, DyeColor::WHITE => Ids::WHITE_STAINED_GLASS_PANE,
DyeColor::WHITE => Ids::WHITE_STAINED_GLASS_PANE, DyeColor::YELLOW => Ids::YELLOW_STAINED_GLASS_PANE,
DyeColor::YELLOW => Ids::YELLOW_STAINED_GLASS_PANE, }, []));
}, []));
} }
private function registerFlatCoralSerializers() : void{ private function registerFlatCoralSerializers() : void{
$this->map(Blocks::CORAL(), fn(Coral $block) => $this->map(Blocks::CORAL(), fn(Coral $block) => BlockStateData::current(match($block->getCoralType()){
BlockStateData::current(match($block->getCoralType()){ CoralType::BRAIN => $block->isDead() ? Ids::DEAD_BRAIN_CORAL : Ids::BRAIN_CORAL,
CoralType::BRAIN => $block->isDead() ? Ids::DEAD_BRAIN_CORAL : Ids::BRAIN_CORAL, CoralType::BUBBLE => $block->isDead() ? Ids::DEAD_BUBBLE_CORAL : Ids::BUBBLE_CORAL,
CoralType::BUBBLE => $block->isDead() ? Ids::DEAD_BUBBLE_CORAL : Ids::BUBBLE_CORAL, CoralType::FIRE => $block->isDead() ? Ids::DEAD_FIRE_CORAL : Ids::FIRE_CORAL,
CoralType::FIRE => $block->isDead() ? Ids::DEAD_FIRE_CORAL : Ids::FIRE_CORAL, CoralType::HORN => $block->isDead() ? Ids::DEAD_HORN_CORAL : Ids::HORN_CORAL,
CoralType::HORN => $block->isDead() ? Ids::DEAD_HORN_CORAL : Ids::HORN_CORAL, CoralType::TUBE => $block->isDead() ? Ids::DEAD_TUBE_CORAL : Ids::TUBE_CORAL,
CoralType::TUBE => $block->isDead() ? Ids::DEAD_TUBE_CORAL : Ids::TUBE_CORAL, }, []));
}, [])
);
$this->map(Blocks::CORAL_FAN(), fn(FloorCoralFan $block) => Writer::create( $this->map(Blocks::CORAL_FAN(), fn(FloorCoralFan $block) => Writer::create(
match($block->getCoralType()){ match($block->getCoralType()){
@ -576,15 +568,13 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
default => throw new BlockStateSerializeException("Invalid axis {$axis}"), default => throw new BlockStateSerializeException("Invalid axis {$axis}"),
})); }));
$this->map(Blocks::CORAL_BLOCK(), fn(CoralBlock $block) => $this->map(Blocks::CORAL_BLOCK(), fn(CoralBlock $block) => BlockStateData::current(match($block->getCoralType()){
BlockStateData::current(match($block->getCoralType()){ CoralType::BRAIN => $block->isDead() ? Ids::DEAD_BRAIN_CORAL_BLOCK : Ids::BRAIN_CORAL_BLOCK,
CoralType::BRAIN => $block->isDead() ? Ids::DEAD_BRAIN_CORAL_BLOCK : Ids::BRAIN_CORAL_BLOCK, CoralType::BUBBLE => $block->isDead() ? Ids::DEAD_BUBBLE_CORAL_BLOCK : Ids::BUBBLE_CORAL_BLOCK,
CoralType::BUBBLE => $block->isDead() ? Ids::DEAD_BUBBLE_CORAL_BLOCK : Ids::BUBBLE_CORAL_BLOCK, CoralType::FIRE => $block->isDead() ? Ids::DEAD_FIRE_CORAL_BLOCK : Ids::FIRE_CORAL_BLOCK,
CoralType::FIRE => $block->isDead() ? Ids::DEAD_FIRE_CORAL_BLOCK : Ids::FIRE_CORAL_BLOCK, CoralType::HORN => $block->isDead() ? Ids::DEAD_HORN_CORAL_BLOCK : Ids::HORN_CORAL_BLOCK,
CoralType::HORN => $block->isDead() ? Ids::DEAD_HORN_CORAL_BLOCK : Ids::HORN_CORAL_BLOCK, CoralType::TUBE => $block->isDead() ? Ids::DEAD_TUBE_CORAL_BLOCK : Ids::TUBE_CORAL_BLOCK,
CoralType::TUBE => $block->isDead() ? Ids::DEAD_TUBE_CORAL_BLOCK : Ids::TUBE_CORAL_BLOCK, }, []));
}, [])
);
$this->map(Blocks::WALL_CORAL_FAN(), fn(WallCoralFan $block) => Writer::create( $this->map(Blocks::WALL_CORAL_FAN(), fn(WallCoralFan $block) => Writer::create(
match($block->getCoralType()){ match($block->getCoralType()){