public function getCollisionBlocks(AxisAlignedBB $bb, bool $targetFirst = false) : array
{
$minX = Math::floorFloat($bb->minX);
$minY = Math::floorFloat($bb->minY);
$minZ = Math::floorFloat($bb->minZ);
$maxX = Math::ceilFloat($bb->maxX);
$maxY = Math::ceilFloat($bb->maxY);
$maxZ = Math::ceilFloat($bb->maxZ);
$collides = [];
if ($targetFirst) {
for ($z = $minZ; $z <= $maxZ; ++$z) {
for ($x = $minX; $x <= $maxX; ++$x) {
for ($y = $minY; $y <= $maxY; ++$y) {
$block = $this->getBlock($this->temporalVector->setComponents($x, $y, $z));
if ($block->getId() !== 0 and $block->collidesWithBB($bb)) {
return [$block];
}
}
}
}
} else {
for ($z = $minZ; $z <= $maxZ; ++$z) {
for ($x = $minX; $x <= $maxX; ++$x) {
for ($y = $minY; $y <= $maxY; ++$y) {
$block = $this->getBlock($this->temporalVector->setComponents($x, $y, $z));
if ($block->getId() !== 0 and $block->collidesWithBB($bb)) {
$collides[] = $block;
}
}
}
}
}
return $collides;
}