contractedCopy($shrinkSize, 0, $shrinkSize)->trimmedCopy(Facing::UP, $shrinkSize)]; } public function getSupportType(Facing $facing) : SupportType{ return SupportType::NONE; } public function onEntityInside(Entity $entity) : bool{ $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_CONTACT, 1); $entity->attack($ev); return true; } private function canBeSupportedAt(Block $block) : bool{ $supportBlock = $block->getSide(Facing::DOWN); if(!$supportBlock->hasSameTypeId($this) && !$supportBlock->hasTypeTag(BlockTypeTags::SAND)){ return false; } foreach(Facing::HORIZONTAL as $side){ if($block->getSide($side)->isSolid()){ return false; } } return true; } public function ticksRandomly() : bool{ return true; } public function onRandomTick() : void{ if(!$this->getSide(Facing::DOWN)->hasSameTypeId($this)){ $world = $this->position->getWorld(); if($this->age === self::MAX_AGE){ for($y = 1; $y < 3; ++$y){ if(!$world->isInWorld($this->position->x, $this->position->y + $y, $this->position->z)){ break; } $b = $world->getBlockAt($this->position->x, $this->position->y + $y, $this->position->z); if($b->getTypeId() === BlockTypeIds::AIR){ BlockEventHelper::grow($b, VanillaBlocks::CACTUS(), null); }else{ break; } } $this->age = 0; $world->setBlock($this->position, $this, update: false); }else{ ++$this->age; $world->setBlock($this->position, $this, update: false); } } } }