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());