22declare(strict_types=1);
24namespace pocketmine\data\bedrock\block\convert;
26use pocketmine\block\utils\BellAttachmentType;
27use pocketmine\block\utils\SlabType;
28use pocketmine\block\utils\WallConnectionType;
51 private array $states = [];
53 public function __construct(
57 public static function create(
string $id) :
self{
62 public function writeBool(
string $name,
bool $value) : self{
63 $this->states[$name] = new
ByteTag($value ? 1 : 0);
68 public function writeInt(
string $name,
int $value) : self{
69 $this->states[$name] = new
IntTag($value);
74 public function writeString(
string $name,
string $value) : self{
75 $this->states[$name] = new
StringTag($value);
85 $raw = $map->valueToRaw($value);
86 $this->writeString($name, $raw);
96 $raw = $map->valueToRaw($value);
97 $this->writeInt($name, $raw);
126 foreach($faces as $face){
127 $result |= match($face){
128 Facing::DOWN => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_DOWN,
129 Facing::UP => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_UP,
130 Facing::NORTH => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_NORTH,
131 Facing::SOUTH => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_SOUTH,
132 Facing::WEST => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_WEST,
133 Facing::EAST => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_EAST,
138 return $this->writeInt(BlockStateNames::MULTI_FACE_DIRECTION_BITS, $result);
147 return $this->writeFacingDirection(
Facing::axis($value) !==
Axis::Y ?
Facing::opposite($value) : $value);
205 if($value ===
Facing::DOWN){
208 $this->writeFacingDirection($value);
217 if($value ===
Facing::UP){
220 $this->writeFacingDirection($value);
238 $this->writeString(
BlockStateNames::MC_VERTICAL_HALF, match($slabType){
239 SlabType::TOP => StringValues::MC_VERTICAL_HALF_TOP,
240 SlabType::BOTTOM => StringValues::MC_VERTICAL_HALF_BOTTOM,
268 $this->writeString($name, match($wallConnectionType){
269 null => StringValues::WALL_CONNECTION_TYPE_EAST_NONE,
270 WallConnectionType::SHORT => StringValues::WALL_CONNECTION_TYPE_EAST_SHORT,
271 WallConnectionType::TALL => StringValues::WALL_CONNECTION_TYPE_EAST_TALL,
285 $value = $map->valueToRaw($case);
286 $this->writeString($name, $value);
writeCoralFacing(int $value)
writeLegacyHorizontalFacing(int $value)
writeFacingDirection(int $value)
writeUnitEnum(string $name, EnumFromRawStateMap $map, \UnitEnum $case)
writeSlabPosition(SlabType $slabType)
writeFacingFlags(array $faces)
writeEndRodFacingDirection(int $value)
writeCardinalHorizontalFacing(int $value)
mapIntToInt(string $name, IntFromRawStateMap $map, int $value)
writeWeirdoHorizontalFacing(int $value)
writeBellAttachmentType(BellAttachmentType $attachmentType)
write5MinusHorizontalFacing(int $value)
writeTorchFacing(int $facing)
mapIntToString(string $name, IntFromRawStateMap $map, int $value)
writeWallConnectionType(string $name, ?WallConnectionType $wallConnectionType)
writeFacingWithoutDown(int $value)
writeFacingWithoutUp(int $value)
writeHorizontalFacing(int $value)
writeBlockFace(int $value)
writePillarAxis(int $axis)
writeString(string $name, string $value)
writeBool(string $name, bool $value)
writeInt(string $name, int $value)