public static function getArrowCollisionBlock(Projectile $p) { if ($p->isCollidedVertically) { $block = $p->getLevel()->getBlock($p->floor()); if ($block->getId() === 0) { $block = $p->getLevel()->getBlock($p->floor()->add(0, 1)); } if ($block->getId() === 0) { $block = $p->getLevel()->getBlock($p->floor()->subtract(1)); } return $block->getId() === 0 ? null : $block; } if ($p->isCollidedHorizontally) { $floor = $p->floor(); $pos = new Vector3($p->x - $floor->x >= 0.5 ? $floor->x + 1 : $floor->x - 1, $floor->y, $p->z - $floor->z >= 0.5 ? $floor->z + 1 : $floor->z - 1); $block = $p->getLevel()->getBlock($pos); return $block->getId() === 0 ? null : $block; } return null; }