@@ -215,7 +215,8 @@ object ElytraFly : Module(
215215 if (! BaritoneHandler .isActive) passingToPos = null
216216
217217 val playerPos = player.pos
218- if (passObstacles && playerPos.let { Vec3d (it.x, startPos.y, it.z) } dist startPos > 0.1 ) run obstacleChecks@{
218+ val validDistanceFromStart = Vec3d (playerPos.x, startPos.y, playerPos.z) dist startPos > 0.1
219+ if (passObstacles && validDistanceFromStart) run obstacleChecks@{
219220 val snappedDir = getSnappedDir()
220221 val closestLinePoint = playerPos.findClosestPointOnLine(snappedDir)
221222 passingToPos?.let { passingTo ->
@@ -224,11 +225,23 @@ object ElytraFly : Module(
224225 }
225226 return
226227 }
227- if (playerPos dist closestLinePoint <= acceptableOffsetRange) {
228- if (playerPos.let { Vec3d (it.x, closestLinePoint.y, it.z) }.isObstructed(snappedDir))
229- pathToValidPoint(closestLinePoint, snappedDir)
230- else return @obstacleChecks
231- } else pathToValidPoint(closestLinePoint, snappedDir, true )
228+ // We only want to account for horizontal and below the line rather than total
229+ // distance as jumping from bounce might cause false positives
230+ val distanceToLine =
231+ Vec3d (
232+ playerPos.x,
233+ closestLinePoint.y,
234+ playerPos.z
235+ ).dist(closestLinePoint) + (playerPos.y - closestLinePoint.y).coerceAtMost(0.0 )
236+ if (distanceToLine > acceptableOffsetRange) {
237+ pathToValidPoint(closestLinePoint, snappedDir, true )
238+ return
239+ }
240+
241+ val isObstructed = Vec3d (playerPos.x, closestLinePoint.y, playerPos.z).isObstructed(snappedDir)
242+ if (isObstructed) {
243+ pathToValidPoint(closestLinePoint, snappedDir)
244+ } else return @obstacleChecks
232245
233246 return
234247 }
0 commit comments