top ? BlockLegacyMetadata::DOUBLE_PLANT_FLAG_TOP : 0); } public function readStateFromData(int $id, int $stateMeta) : void{ $this->top = ($stateMeta & BlockLegacyMetadata::DOUBLE_PLANT_FLAG_TOP) !== 0; } public function getStateBitmask() : int{ return 0b1000; } public function isTop() : bool{ return $this->top; } /** @return $this */ public function setTop(bool $top) : self{ $this->top = $top; return $this; } public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{ $id = $blockReplace->getSide(Facing::DOWN)->getId(); if(($id === BlockLegacyIds::GRASS or $id === BlockLegacyIds::DIRT) and $blockReplace->getSide(Facing::UP)->canBeReplaced()){ $top = clone $this; $top->top = true; $tx->addBlock($blockReplace->pos, $this)->addBlock($blockReplace->pos->getSide(Facing::UP), $top); return true; } return false; } /** * Returns whether this double-plant has a corresponding other half. */ public function isValidHalfPlant() : bool{ $other = $this->getSide($this->top ? Facing::DOWN : Facing::UP); return ( $other instanceof DoublePlant and $other->isSameType($this) and $other->top !== $this->top ); } public function onNearbyBlockChange() : void{ if(!$this->isValidHalfPlant() or (!$this->top and $this->getSide(Facing::DOWN)->isTransparent())){ $this->pos->getWorld()->useBreakOn($this->pos); } } public function getDrops(Item $item) : array{ return $this->top ? parent::getDrops($item) : []; } public function getAffectedBlocks() : array{ if($this->isValidHalfPlant()){ return [$this, $this->getSide($this->top ? Facing::DOWN : Facing::UP)]; } return parent::getAffectedBlocks(); } public function getFlameEncouragement() : int{ return 60; } public function getFlammability() : int{ return 100; } }