40 if($this->tryTransform()){
48 private function tryTransform() : bool{
49 $world = $this->position->getWorld();
50 $pos = $this->position;
52 if(!$world->getBlock($pos->up())->isTransparent()){
56 $hasWarpedNylium =
false;
57 $hasCrimsonNylium =
false;
59 for($x = -1; $x <= 1; $x++){
60 for($y = -1; $y <= 1; $y++){
61 for($z = -1; $z <= 1; $z++){
62 $blockTypeId = $world->getBlock($pos->add($x, $y, $z))->getTypeId();
64 if($blockTypeId === BlockTypeIds::WARPED_NYLIUM){
65 $hasWarpedNylium = true;
66 }elseif($blockTypeId === BlockTypeIds::CRIMSON_NYLIUM){
67 $hasCrimsonNylium = true;
70 if($hasWarpedNylium && $hasCrimsonNylium){
77 if(!$hasWarpedNylium && !$hasCrimsonNylium){
81 $world->setBlock($pos, match(
true){
82 $hasWarpedNylium && $hasCrimsonNylium => (mt_rand(0, 1) === 0 ? VanillaBlocks::WARPED_NYLIUM() : VanillaBlocks::CRIMSON_NYLIUM()),
83 $hasWarpedNylium => VanillaBlocks::WARPED_NYLIUM(),
84 $hasCrimsonNylium => VanillaBlocks::CRIMSON_NYLIUM(),