meta = $meta; } public function getName(){ return "Wooden Trapdoor"; } public function getHardness(){ return 3; } public function canBeActivated(){ return true; } protected function recalculateBoundingBox(){ $damage = $this->getDamage(); $f = 0.1875; if(($damage & self::MASK_UPPER) > 0){ $bb = new AxisAlignedBB( $this->x, $this->y + 1 - $f, $this->z, $this->x + 1, $this->y + 1, $this->z + 1 ); }else{ $bb = new AxisAlignedBB( $this->x, $this->y, $this->z, $this->x + 1, $this->y + $f, $this->z + 1 ); } if(($damage & self::MASK_OPENED) > 0){ if(($damage & 0x03) === self::MASK_SIDE_NORTH){ $bb->setBounds( $this->x, $this->y, $this->z + 1 - $f, $this->x + 1, $this->y + 1, $this->z + 1 ); }elseif(($damage & 0x03) === self::MASK_SIDE_SOUTH){ $bb->setBounds( $this->x, $this->y, $this->z, $this->x + 1, $this->y + 1, $this->z + $f ); } if(($damage & 0x03) === self::MASK_SIDE_WEST){ $bb->setBounds( $this->x + 1 - $f, $this->y, $this->z, $this->x + 1, $this->y + 1, $this->z + 1 ); } if(($damage & 0x03) === self::MASK_SIDE_EAST){ $bb->setBounds( $this->x, $this->y, $this->z, $this->x + $f, $this->y + 1, $this->z + 1 ); } } return $bb; } public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){ if(($target->isTransparent() === false or $target->getId() === self::SLAB) and $face !== 0 and $face !== 1){ $faces = [ self::SIDE_SOUTH => self::MASK_SIDE_SOUTH, self::SIDE_NORTH => self::MASK_SIDE_NORTH, self::SIDE_EAST => self::MASK_SIDE_EAST, self::SIDE_WEST => self::MASK_SIDE_WEST, ]; echo $face, PHP_EOL, $faces[$face], PHP_EOL; $this->meta = $faces[$face] & self::MASK_SIDE; if($fy > 0.5){ $this->meta |= self::MASK_UPPER; } $this->getLevel()->setBlock($block, $this, true, true); return true; } return false; } public function getDrops(Item $item){ return [ [$this->id, 0, 1], ]; } public function onActivate(Item $item, Player $player = null){ $this->meta ^= self::MASK_OPENED; $this->getLevel()->setBlock($this, $this, true); $this->level->addSound(new DoorSound($this)); return true; } public function getToolType(){ return Tool::TYPE_AXE; } }