From ccfe485c067a0dbcdf1d61d65ba77713d3565c3c Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 1 Feb 2022 13:56:05 +0000 Subject: [PATCH] Fixed end rod up/down state --- src/data/bedrock/blockstate/BlockStateDeserializer.php | 2 +- src/data/bedrock/blockstate/BlockStateReader.php | 6 ++++++ src/data/bedrock/blockstate/BlockStateSerializer.php | 3 +-- src/data/bedrock/blockstate/BlockStateWriter.php | 6 ++++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/data/bedrock/blockstate/BlockStateDeserializer.php b/src/data/bedrock/blockstate/BlockStateDeserializer.php index 47d95eabf..7a6d44463 100644 --- a/src/data/bedrock/blockstate/BlockStateDeserializer.php +++ b/src/data/bedrock/blockstate/BlockStateDeserializer.php @@ -430,7 +430,7 @@ final class BlockStateDeserializer{ }); $this->map(Ids::END_ROD, function(BlockStateReader $in) : Block{ return VanillaBlocks::END_ROD() - ->setFacing($in->readFacingDirection()); + ->setFacing($in->readEndRodFacingDirection()); }); $this->map(Ids::END_STONE, fn() => VanillaBlocks::END_STONE()); $this->map(Ids::ENDER_CHEST, function(BlockStateReader $in) : Block{ diff --git a/src/data/bedrock/blockstate/BlockStateReader.php b/src/data/bedrock/blockstate/BlockStateReader.php index 21537e452..4f4fdbcfa 100644 --- a/src/data/bedrock/blockstate/BlockStateReader.php +++ b/src/data/bedrock/blockstate/BlockStateReader.php @@ -125,6 +125,12 @@ final class BlockStateReader{ ]); } + /** @throws BlockStateDeserializeException */ + public function readEndRodFacingDirection() : int{ + $result = $this->readFacingDirection(); + return Facing::axis($result) === Axis::Y ? Facing::opposite($result) : $result; + } + /** @throws BlockStateDeserializeException */ public function readHorizontalFacing() : int{ return $this->parseFacingValue($this->readInt(BlockStateNames::FACING_DIRECTION), [ diff --git a/src/data/bedrock/blockstate/BlockStateSerializer.php b/src/data/bedrock/blockstate/BlockStateSerializer.php index 679c0435c..6385bc794 100644 --- a/src/data/bedrock/blockstate/BlockStateSerializer.php +++ b/src/data/bedrock/blockstate/BlockStateSerializer.php @@ -595,9 +595,8 @@ final class BlockStateSerializer{ ->writeLegacyHorizontalFacing($block->getFacing()); }); $this->map(VanillaBlocks::END_ROD(), function(EndRod $block) : Writer{ - //TODO: not sure if this needs down/up to be flipped like legacy metadata? return Writer::create(Ids::END_ROD) - ->writeFacingDirection($block->getFacing()); + ->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)); diff --git a/src/data/bedrock/blockstate/BlockStateWriter.php b/src/data/bedrock/blockstate/BlockStateWriter.php index 2657b90d1..249b31674 100644 --- a/src/data/bedrock/blockstate/BlockStateWriter.php +++ b/src/data/bedrock/blockstate/BlockStateWriter.php @@ -79,6 +79,12 @@ final class BlockStateWriter{ return $this; } + /** @return $this */ + public function writeEndRodFacingDirection(int $value) : self{ + //end rods are stupid in bedrock and have up/down the wrong way round + return $this->writeFacingDirection(Facing::axis($value) === Axis::Y ? Facing::opposite($value) : $value); + } + /** @return $this */ public function writeHorizontalFacing(int $value) : self{ if($value === Facing::UP || $value === Facing::DOWN){