getSide(Facing::DOWN); if($down->getTypeId() !== BlockTypeIds::AIR){ return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player); } return false; } public function onNearbyBlockChange() : void{ if($this->getSide(Facing::DOWN)->getTypeId() === BlockTypeIds::AIR){ //Replace with common break method $this->position->getWorld()->useBreakOn($this->position); } } public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{ if($player !== null){ return $player->consumeObject($this); } return false; } public function getFoodRestore() : int{ return 2; } public function getSaturationRestore() : float{ return 0.4; } public function requiresHunger() : bool{ return true; } /** * @return EffectInstance[] */ public function getAdditionalEffects() : array{ return []; } abstract public function getResidue() : Block; public function onConsume(Living $consumer) : void{ $this->position->getWorld()->setBlock($this->position, $this->getResidue()); } }