public function getNearestRail()
{
$minX = Math::floorFloat($this->boundingBox->minX);
$minY = Math::floorFloat($this->boundingBox->minY);
$minZ = Math::floorFloat($this->boundingBox->minZ);
$maxX = Math::ceilFloat($this->boundingBox->maxX);
$maxY = Math::ceilFloat($this->boundingBox->maxY);
$maxZ = Math::ceilFloat($this->boundingBox->maxZ);
$rails = [];
for ($z = $minZ; $z <= $maxZ; ++$z) {
for ($x = $minX; $x <= $maxX; ++$x) {
for ($y = $minY; $y <= $maxY; ++$y) {
$block = $this->level->getBlock($this->temporalVector->setComponents($x, $y, $z));
if (in_array($block->getId(), [Block::RAIL, Block::ACTIVATOR_RAIL, Block::DETECTOR_RAIL, Block::POWERED_RAIL])) {
$rails[] = $block;
}
}
}
}
$minDistance = PHP_INT_MAX;
$nearestRail = null;
foreach ($rails as $rail) {
$dis = $this->distance($rail);
if ($dis < $minDistance) {
$nearestRail = $rail;
$minDistance = $dis;
}
}
return $nearestRail;
}