37 use HorizontalFacingTrait;
39 protected function getSupportingFace() :
Facing{
44 if($face !==
Facing::DOWN){
48 $this->facing = HorizontalFacingOption::fromFacing(Facing::opposite($player->getHorizontalFacing()));
50 if(!$this->canBeSupportedAt($blockReplace)){
54 return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
58 if(!$this->canBeSupportedAt($this)){
59 $this->position->getWorld()->useBreakOn($this->position);
63 private function canBeSupportedAt(Block $block) : bool{
64 $supportBlock = $block->getSide(Facing::UP);
66 $supportBlock->getSupportType(Facing::DOWN) === SupportType::FULL ||
67 (($supportBlock instanceof WallHangingSign || $supportBlock instanceof CeilingEdgesHangingSign) && Facing::axis($supportBlock->getFacing()->toFacing()) === Facing::axis($this->facing->toFacing()));
70 protected function getFacingDegrees() : float{
71 return match($this->facing){
72 HorizontalFacingOption::SOUTH => 0,
73 HorizontalFacingOption::WEST => 90,
74 HorizontalFacingOption::NORTH => 180,
75 HorizontalFacingOption::EAST => 270,