127 public readonly array $coralIdPrefixes;
132 public readonly array $copperIdPrefixes;
138 public readonly array $furnaceIdPrefixes;
144 public readonly array $liquidIdPrefixes;
150 public readonly array $woodIdPrefixes;
156 public readonly array $buttonProperties;
162 public readonly array $campfireProperties;
168 public readonly array $doorProperties;
174 public readonly array $fenceGateProperties;
180 public readonly array $itemFrameProperties;
186 public readonly array $simplePressurePlateProperties;
192 public readonly array $stairProperties;
198 public readonly array $stemProperties;
204 public readonly array $trapdoorProperties;
210 public readonly array $wallProperties;
212 private function __construct(){
213 $vm = ValueMappings::getInstance();
218 $this->horizontalFacingCardinal =
new ValueFromStringProperty(StateNames::MC_CARDINAL_DIRECTION, $vm->cardinalDirection, $hfGet, $hfSet);
221 StateNames::MC_BLOCK_FACE,
228 StateNames::PILLAR_AXIS,
235 StateNames::TORCH_FACING_DIRECTION,
237 fn(
Torch $b) => $b->getFacing()->value,
241 $this->horizontalFacingSWNE =
new ValueFromIntProperty(StateNames::DIRECTION, $vm->horizontalFacingSWNE, $hfGet, $hfSet);
242 $this->horizontalFacingSWNEInverted =
new ValueFromIntProperty(StateNames::DIRECTION, $vm->horizontalFacingSWNEInverted, $hfGet, $hfSet);
243 $this->horizontalFacingClassic =
new ValueFromIntProperty(StateNames::FACING_DIRECTION, $vm->horizontalFacingClassic, $hfGet, $hfSet);
246 StateNames::FACING_DIRECTION,
253 StateNames::MULTI_FACE_DIRECTION_BITS,
255 Facing::DOWN => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_DOWN,
256 Facing::UP => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_UP,
257 Facing::NORTH => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_NORTH,
258 Facing::SOUTH => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_SOUTH,
259 Facing::WEST => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_WEST,
260 Facing::EAST => BlockLegacyMetadata::MULTI_FACE_DIRECTION_FLAG_EAST
270 $this->cropAgeMax7 =
new IntProperty(StateNames::GROWTH, 0, 7, fn(
Ageable $b) => $b->getAge(), fn(
Ageable $b,
int $v) => $b->setAge($v));
274 StraightOnlyRailShape::FLAT_AXIS_Z => BlockLegacyMetadata::RAIL_STRAIGHT_NORTH_SOUTH,
275 StraightOnlyRailShape::FLAT_AXIS_X => BlockLegacyMetadata::RAIL_STRAIGHT_EAST_WEST,
276 StraightOnlyRailShape::ASCENDING_EAST => BlockLegacyMetadata::RAIL_ASCENDING_EAST,
277 StraightOnlyRailShape::ASCENDING_WEST => BlockLegacyMetadata::RAIL_ASCENDING_WEST,
278 StraightOnlyRailShape::ASCENDING_NORTH => BlockLegacyMetadata::RAIL_ASCENDING_NORTH,
279 StraightOnlyRailShape::ASCENDING_SOUTH => BlockLegacyMetadata::RAIL_ASCENDING_SOUTH
282 $fallingFlag = BlockLegacyMetadata::LIQUID_FALLING_FLAG;
284 StateNames::LIQUID_DEPTH,
287 fn(
Liquid $b) => $b->getDecay() | ($b->isFalling() ? $fallingFlag : 0),
288 fn(
Liquid $b,
int $v) => $b->setDecay($v & ~$fallingFlag)->setFalling(($v & $fallingFlag) !== 0)
293 $this->dummyCardinalDirection =
new DummyProperty(StateNames::MC_CARDINAL_DIRECTION, BlockStateStringValues::MC_CARDINAL_DIRECTION_SOUTH);
294 $this->dummyPillarAxis =
new DummyProperty(StateNames::PILLAR_AXIS, BlockStateStringValues::PILLAR_AXIS_Y);
303 fn(
Slab $b) => $b->getSlabType() === SlabType::DOUBLE,
309 fn(
Slab $b,
bool $v) => $b->setSlabType($v ? SlabType::DOUBLE : SlabType::BOTTOM)
312 StateNames::MC_VERTICAL_HALF,
313 BlockStateStringValues::MC_VERTICAL_HALF_BOTTOM,
314 BlockStateStringValues::MC_VERTICAL_HALF_TOP,
315 fn(
Slab $b) => $b->getSlabType() === SlabType::TOP,
318 fn(
Slab $b,
bool $v) => $b->getSlabType() !== SlabType::DOUBLE ? $b->setSlabType($v ? SlabType::TOP : SlabType::BOTTOM) :
null
321 $this->coralIdPrefixes = [
325 CoralType::BRAIN =>
"brain",
326 CoralType::BUBBLE =>
"bubble",
327 CoralType::FIRE =>
"fire",
328 CoralType::HORN =>
"horn",
329 CoralType::TUBE =>
"tube"
332 $this->copperIdPrefixes = [
336 CopperOxidation::NONE =>
"",
337 CopperOxidation::EXPOSED =>
"exposed_",
338 CopperOxidation::WEATHERED =>
"weathered_",
339 CopperOxidation::OXIDIZED =>
"oxidized_",
345 $this->liquidIdPrefixes = [
350 $this->woodIdPrefixes = [
355 $this->buttonProperties = [
357 new BoolProperty(StateNames::BUTTON_PRESSED_BIT, fn(
Button $b) => $b->isPressed(), fn(
Button $b,
bool $v) => $b->setPressed($v)),
360 $this->campfireProperties = [
366 $this->doorProperties = [
367 new BoolProperty(StateNames::UPPER_BLOCK_BIT, fn(
Door $b) => $b->isTop(), fn(
Door $b,
bool $v) => $b->setTop($v)),
368 new BoolProperty(StateNames::DOOR_HINGE_BIT, fn(
Door $b) => $b->isHingeRight(), fn(
Door $b,
bool $v) => $b->setHingeRight($v)),
369 new BoolProperty(StateNames::OPEN_BIT, fn(
Door $b) => $b->isOpen(), fn(
Door $b,
bool $v) => $b->setOpen($v)),
371 StateNames::MC_CARDINAL_DIRECTION,
374 HorizontalFacingOption::NORTH => BlockStateStringValues::MC_CARDINAL_DIRECTION_EAST,
375 HorizontalFacingOption::EAST => BlockStateStringValues::MC_CARDINAL_DIRECTION_SOUTH,
376 HorizontalFacingOption::SOUTH => BlockStateStringValues::MC_CARDINAL_DIRECTION_WEST,
377 HorizontalFacingOption::WEST => BlockStateStringValues::MC_CARDINAL_DIRECTION_NORTH
384 $this->fenceGateProperties = [
390 $this->itemFrameProperties = [
396 $this->simplePressurePlateProperties = [
400 StateNames::REDSTONE_SIGNAL,
408 $this->stairProperties = [
409 new BoolProperty(StateNames::UPSIDE_DOWN_BIT, fn(
Stair $b) => $b->isUpsideDown(), fn(
Stair $b,
bool $v) => $b->setUpsideDown($v)),
410 new ValueFromIntProperty(StateNames::WEIRDO_DIRECTION, $vm->horizontalFacing5Minus, $hfGet, $hfSet),
413 $this->stemProperties = [
418 $this->trapdoorProperties = [
427 new BoolProperty(StateNames::WALL_POST_BIT, fn(
Wall $b) => $b->isPost(), fn(
Wall $b,
bool $v) => $b->setPost($v)),
430 [Facing::NORTH, StateNames::WALL_CONNECTION_TYPE_NORTH],
431 [Facing::SOUTH, StateNames::WALL_CONNECTION_TYPE_SOUTH],
432 [Facing::WEST, StateNames::WALL_CONNECTION_TYPE_WEST],
433 [Facing::EAST, StateNames::WALL_CONNECTION_TYPE_EAST]
434 ] as [$facing, $stateName]){
438 fn(
Wall $b) => WallConnectionTypeShim::serialize($b->getConnection($facing)),
439 fn(
Wall $b, WallConnectionTypeShim $v) => $b->
setConnection($facing, $v->deserialize())
442 $this->wallProperties = $wallProperties;