52 parent::readStateFromWorld();
54 $this->collisionBoxes =
null;
56 $clockwise = HorizontalFacingOption::fromFacing(Facing::rotateY($this->facing->toFacing(),
true));
57 if(($backFacing = $this->getPossibleCornerFacing(
false)) !==
null){
58 $this->shape = $backFacing === $clockwise ? StairShape::OUTER_RIGHT : StairShape::OUTER_LEFT;
59 }elseif(($frontFacing = $this->getPossibleCornerFacing(
true)) !==
null){
60 $this->shape = $frontFacing === $clockwise ? StairShape::INNER_RIGHT : StairShape::INNER_LEFT;
62 $this->shape = StairShape::STRAIGHT;
85 $topStepFace = $this->upsideDown ?
Facing::DOWN :
Facing::UP;
87 AxisAlignedBB::one()->trimmedCopy($topStepFace, 0.5)
90 $realFacing = $this->facing->toFacing();
91 $topStep = AxisAlignedBB::one()
92 ->trimmedCopy(Facing::opposite($topStepFace), 0.5)
93 ->trimmedCopy(Facing::opposite($realFacing), 0.5);
95 if($this->shape === StairShape::OUTER_LEFT || $this->shape === StairShape::OUTER_RIGHT){
96 $topStep = $topStep->trimmedCopy(Facing::rotateY($realFacing, $this->shape === StairShape::OUTER_LEFT), 0.5);
97 }elseif($this->shape === StairShape::INNER_LEFT || $this->shape === StairShape::INNER_RIGHT){
99 $bbs[] = AxisAlignedBB::one()
100 ->trimmedCopy(Facing::opposite($topStepFace), 0.5)
101 ->trimmedCopy($realFacing, 0.5)
102 ->trimmedCopy(Facing::rotateY($realFacing, $this->shape === StairShape::INNER_LEFT), 0.5);
111 $realFacing = $this->facing->toFacing();
113 $facing === Facing::UP && $this->upsideDown ||
114 $facing === Facing::DOWN && !$this->upsideDown ||
115 ($facing === $realFacing && $this->shape !== StairShape::OUTER_LEFT && $this->shape !== StairShape::OUTER_RIGHT) ||
116 ($facing === Facing::rotate($realFacing, Axis::Y,
false) && $this->shape === StairShape::INNER_LEFT) ||
117 ($facing === Facing::rotate($realFacing, Axis::Y,
true) && $this->shape === StairShape::INNER_RIGHT)
119 return SupportType::FULL;
121 return SupportType::NONE;
135 if($player !== null){
136 $this->facing = HorizontalFacingOption::fromFacing($player->getHorizontalFacing());
138 $this->upsideDown = (($clickVector->y > 0.5 && $face !== Facing::UP) || $face === Facing::DOWN);
140 return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);