From 314277fff83b671163fd6cf935ce5fa817406503 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 15 Aug 2025 20:05:37 +0100 Subject: [PATCH] tidy --- .../convert/BlockObjectToStateSerializer.php | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/data/bedrock/block/convert/BlockObjectToStateSerializer.php b/src/data/bedrock/block/convert/BlockObjectToStateSerializer.php index c76d42ee0..448d38c3c 100644 --- a/src/data/bedrock/block/convert/BlockObjectToStateSerializer.php +++ b/src/data/bedrock/block/convert/BlockObjectToStateSerializer.php @@ -189,6 +189,7 @@ use pocketmine\data\bedrock\block\convert\BlockStateWriter as Writer; use pocketmine\math\Axis; use pocketmine\math\Facing; use function get_class; +use function is_string; final class BlockObjectToStateSerializer implements BlockStateSerializer{ /** @@ -196,7 +197,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{ * describe the bottom type of a type hierarchy only containing Block. * * @var (\Closure|BlockStateData)[] - * @phpstan-var array + * @phpstan-var array */ private array $serializers = []; @@ -233,12 +234,13 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{ /** * @phpstan-template TBlockType of Block * @phpstan-param TBlockType $block - * @phpstan-param \Closure(TBlockType) : (Writer|BlockStateData)|Writer|BlockStateData $serializer + * @phpstan-param \Closure(TBlockType) : (Writer|BlockStateData|string)|Writer|BlockStateData $serializer */ public function map(Block $block, \Closure|Writer|BlockStateData $serializer) : void{ if(isset($this->serializers[$block->getTypeId()])){ throw new \InvalidArgumentException("Block type ID " . $block->getTypeId() . " already has a serializer registered"); } + //writer accepted for convenience only $this->serializers[$block->getTypeId()] = $serializer instanceof Writer ? $serializer->getBlockStateData() : $serializer; } @@ -272,7 +274,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{ throw new BlockStateSerializeException("No serializer registered for " . get_class($blockState) . " with type ID $typeId"); } - if($locatedSerializer instanceof BlockStateData){ + if($locatedSerializer instanceof BlockStateData){ //static data, not dependent on state return $locatedSerializer; } @@ -282,11 +284,17 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{ * In the future we'll need some way to guarantee that type IDs are never reused (perhaps spl_object_id()?) * * @var \Closure $locatedSerializer - * @phpstan-var \Closure(TBlockType) : (Writer|BlockStateData) $locatedSerializer + * @phpstan-var \Closure(TBlockType) : (Writer|BlockStateData|string) $locatedSerializer */ - $writerOrState = $locatedSerializer($blockState); + $result = $locatedSerializer($blockState); - return $writerOrState instanceof Writer ? $writerOrState->getBlockStateData() : $writerOrState; + if($result instanceof Writer){ //builder + return $result->getBlockStateData(); + } + if(is_string($result)){ //ID only + return BlockStateData::current($result, []); + } + return $result; //data, no builder } private function registerCandleSerializers() : void{