62 public static function encodeButton(
Button $block, Writer $out) : Writer{
64 ->writeFacingDirection($block->
getFacing())
65 ->writeBool(BlockStateNames::BUTTON_PRESSED_BIT, $block->isPressed());
68 public static function encodeCandle(
Candle $block, Writer $out) : Writer{
70 ->writeBool(StateNames::LIT, $block->isLit())
71 ->writeInt(StateNames::CANDLES, $block->getCount() - 1);
74 public static function encodeChemistryTable(
ChemistryTable $block, Writer $out) : Writer{
76 ->writeLegacyHorizontalFacing(Facing::opposite($block->
getFacing()));
79 public static function encodeCrops(
Crops $block, Writer $out) : Writer{
80 return $out->writeInt(BlockStateNames::GROWTH, $block->getAge());
88 ->writeTorchFacing($block->getFacing());
91 public static function encodeCauldron(
string $liquid,
int $fillLevel) : Writer{
92 return Writer::create(Ids::CAULDRON)
97 public static function selectCopperId(CopperOxidation $oxidation,
string $noneId,
string $exposedId,
string $weatheredId,
string $oxidizedId) : string{
98 return match($oxidation){
99 CopperOxidation::NONE => $noneId,
100 CopperOxidation::EXPOSED => $exposedId,
101 CopperOxidation::WEATHERED => $weatheredId,
102 CopperOxidation::OXIDIZED => $oxidizedId,
113 ->writeCardinalHorizontalFacing(
Facing::rotateY($block->getFacing(), clockwise: true))
118 public static function encodeDoublePlant(
DoublePlant $block, Writer $out) : Writer{
128 ->writeCardinalHorizontalFacing($block->getFacing())
138 ->writeInt(
BlockStateNames::GROUND_SIGN_DIRECTION, $block->getRotation());
141 public static function encodeFurnace(
Furnace $block,
string $unlitId,
string $litId) : Writer{
142 return Writer::create($block->isLit() ? $litId : $unlitId)
143 ->writeCardinalHorizontalFacing($block->getFacing());
146 public static function encodeItemFrame(ItemFrame $block,
string $id) : Writer{
147 return Writer::create($id)
148 ->writeBool(StateNames::ITEM_FRAME_MAP_BIT, $block->hasMap())
149 ->writeBool(StateNames::ITEM_FRAME_PHOTO_BIT, false)
150 ->writeFacingDirection($block->getFacing());
162 public static function encodeLiquid(
Liquid $block,
string $stillId,
string $flowingId) : Writer{
163 return Writer::create($block->isStill() ? $stillId : $flowingId)
164 ->writeInt(
BlockStateNames::LIQUID_DEPTH, $block->getDecay() | ($block->isFalling() ? 0x8 : 0));
167 public static function encodeLog(Wood $block,
string $unstrippedId,
string $strippedId) : Writer{
168 $out = $block->isStripped() ?
169 Writer::create($strippedId) :
170 Writer::create($unstrippedId);
172 ->writePillarAxis($block->getAxis());
175 public static function encodeMushroomBlock(RedMushroomBlock $block, Writer $out) : Writer{
177 ->writeInt(BlockStateNames::HUGE_MUSHROOM_BITS,
MushroomBlockTypeIdMap::getInstance()->toId($block->getMushroomBlockType()));
185 ->writePillarAxis($axis);
196 public static function encodeSimplePressurePlate(
SimplePressurePlate $block, Writer $out) : Writer{
200 ->writeInt(
BlockStateNames::REDSTONE_SIGNAL, $block->isPressed() ? 15 : 0);
203 private static function encodeSingleSlab(Slab $block,
string $id) : Writer{
204 return Writer::create($id)
205 ->writeSlabPosition($block->getSlabType());
208 private static function encodeDoubleSlab(Slab $block,
string $id) : Writer{
209 return Writer::create($id)
211 ->writeSlabPosition(SlabType::BOTTOM);
214 public static function encodeSlab(Slab $block,
string $singleId,
string $doubleId) : Writer{
215 return $block->getSlabType() === SlabType::DOUBLE ?
216 self::encodeDoubleSlab($block, $doubleId) :
217 self::encodeSingleSlab($block, $singleId);
226 ->writeWeirdoHorizontalFacing($block->getFacing());
229 public static function encodeStem(
Stem $block, Writer $out) : Writer{
233 $facing = $block->getFacing();
234 return self::encodeCrops($block, $out)
235 ->writeFacingWithoutUp($facing === Facing::UP ? Facing::DOWN : $facing);
243 ->write5MinusHorizontalFacing($block->getFacing())
248 public static function encodeWall(
Wall $block, Writer $out) : Writer{
251 ->writeWallConnectionType(
BlockStateNames::WALL_CONNECTION_TYPE_EAST, $block->getConnection(
Facing::EAST))
252 ->writeWallConnectionType(
BlockStateNames::WALL_CONNECTION_TYPE_NORTH, $block->getConnection(
Facing::NORTH))
253 ->writeWallConnectionType(
BlockStateNames::WALL_CONNECTION_TYPE_SOUTH, $block->getConnection(
Facing::SOUTH))
254 ->writeWallConnectionType(
BlockStateNames::WALL_CONNECTION_TYPE_WEST, $block->getConnection(
Facing::WEST));
262 ->writeHorizontalFacing($block->getFacing());