/** Adds a path from start to end and returns the whole path */ private PathEntity addToPath( Entity entityIn, PathPoint pathpointStart, PathPoint pathpointEnd, float maxDistance) { pathpointStart.totalPathDistance = 0.0F; pathpointStart.distanceToNext = pathpointStart.distanceToSquared(pathpointEnd); pathpointStart.distanceToTarget = pathpointStart.distanceToNext; this.path.clearPath(); this.path.addPoint(pathpointStart); PathPoint pathpoint = pathpointStart; while (!this.path.isPathEmpty()) { PathPoint pathpoint1 = this.path.dequeue(); if (pathpoint1.equals(pathpointEnd)) { return this.createEntityPath(pathpointStart, pathpointEnd); } if (pathpoint1.distanceToSquared(pathpointEnd) < pathpoint.distanceToSquared(pathpointEnd)) { pathpoint = pathpoint1; } pathpoint1.visited = true; int i = this.nodeProcessor.findPathOptions( this.pathOptions, entityIn, pathpoint1, pathpointEnd, maxDistance); for (int j = 0; j < i; ++j) { PathPoint pathpoint2 = this.pathOptions[j]; float f = pathpoint1.totalPathDistance + pathpoint1.distanceToSquared(pathpoint2); if (f < maxDistance * 2.0F && (!pathpoint2.isAssigned() || f < pathpoint2.totalPathDistance)) { pathpoint2.previous = pathpoint1; pathpoint2.totalPathDistance = f; pathpoint2.distanceToNext = pathpoint2.distanceToSquared(pathpointEnd); if (pathpoint2.isAssigned()) { this.path.changeDistance( pathpoint2, pathpoint2.totalPathDistance + pathpoint2.distanceToNext); } else { pathpoint2.distanceToTarget = pathpoint2.totalPathDistance + pathpoint2.distanceToNext; this.path.addPoint(pathpoint2); } } } } if (pathpoint == pathpointStart) { return null; } else { return this.createEntityPath(pathpointStart, pathpoint); } }