40    use MultiAnySupportTrait;
 
   55        return SupportType::NONE;
 
 
   66        return $blockReplace instanceof 
GlowLichen ? $blockReplace->faces : [];
 
 
   69    private function getSpreadBlock(
Block $replace, 
int $spreadFace) : ?
Block{
 
   70        if($replace instanceof self && $replace->hasSameTypeId($this)){
 
   71            if($replace->hasFace($spreadFace)){
 
   75        }elseif($replace->getTypeId() === BlockTypeIds::AIR){
 
   76            $result = VanillaBlocks::GLOW_LICHEN();
 
   81        return $result->setFace($spreadFace, 
true);
 
   84    private function spread(World $world, Vector3 $replacePos, 
int $spreadFace) : bool{
 
   85        $supportBlock = $world->getBlock($replacePos->getSide($spreadFace));
 
   86        $supportFace = Facing::opposite($spreadFace);
 
   88        if($supportBlock->getSupportType($supportFace) !== SupportType::FULL){
 
   92        $replacedBlock = $supportBlock->getSide($supportFace);
 
   93        $replacementBlock = $this->getSpreadBlock($replacedBlock, Facing::opposite($supportFace));
 
   94        if($replacementBlock === 
null){
 
   98        return BlockEventHelper::spread($replacedBlock, $replacementBlock, $this);
 
  104    private static function getShuffledSpreadFaces(
int $sourceFace) : \Generator{
 
  105        $skipAxis = Facing::axis($sourceFace);
 
  107        $faces = Facing::ALL;
 
  109        foreach($faces as $spreadFace){
 
  110            if(Facing::axis($spreadFace) !== $skipAxis){
 
  116    private function spreadAroundSupport(
int $sourceFace) : bool{
 
  117        $world = $this->position->getWorld();
 
  119        $supportPos = $this->position->getSide($sourceFace);
 
  120        foreach(self::getShuffledSpreadFaces($sourceFace) as $spreadFace){
 
  121            $replacePos = $supportPos->getSide($spreadFace);
 
  122            if($this->spread($world, $replacePos, Facing::opposite($spreadFace))){
 
  130    private function spreadAdjacentToSupport(
int $sourceFace) : bool{
 
  131        $world = $this->position->getWorld();
 
  133        foreach(self::getShuffledSpreadFaces($sourceFace) as $spreadFace){
 
  134            $replacePos = $this->position->getSide($spreadFace);
 
  135            if($this->spread($world, $replacePos, $sourceFace)){
 
  142    private function spreadWithinSelf(
int $sourceFace) : bool{
 
  143        foreach(self::getShuffledSpreadFaces($sourceFace) as $spreadFace){
 
  144            if(!$this->hasFace($spreadFace) && $this->spread($this->position->getWorld(), $this->position, $spreadFace)){
 
  153        if($item instanceof 
Fertilizer && count($this->faces) > 0){
 
  154            $shuffledFaces = $this->faces;
 
  155            shuffle($shuffledFaces);
 
  158                $this->spreadAroundSupport(...),
 
  159                $this->spreadAdjacentToSupport(...),
 
  160                $this->spreadWithinSelf(...),
 
  162            shuffle($spreadMethods);
 
  164            foreach($shuffledFaces as $sourceFace){
 
  165                foreach($spreadMethods as $spreadMethod){
 
  166                    if($spreadMethod($sourceFace)){
 
 
  179        if(($item->getBlockToolType() & 
BlockToolType::SHEARS) !== 0){
 
  180            return $this->getDropsForCompatibleTool($item);