All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.Pathfinder Maven / Gradle / Ivy

package net.minecraft.server;

public class Pathfinder {
	
	private final Path a = new Path();
	private final PathPoint[] b = new PathPoint[32];
	private final PathfinderAbstract c;
	
	public Pathfinder(PathfinderAbstract pathfinderabstract) {
		this.c = pathfinderabstract;
	}
	
	public PathEntity a(IBlockAccess iblockaccess, Entity entity, Entity entity1, float f) {
		return this.a(iblockaccess, entity, entity1.locX, entity1.getBoundingBox().b, entity1.locZ, f);
	}
	
	public PathEntity a(IBlockAccess iblockaccess, Entity entity, BlockPosition blockposition, float f) {
		return this.a(iblockaccess, entity, (float) blockposition.getX() + 0.5F, (float) blockposition.getY() + 0.5F, (float) blockposition.getZ() + 0.5F, f);
	}
	
	private PathEntity a(IBlockAccess iblockaccess, Entity entity, double d0, double d1, double d2, float f) {
		this.a.a();
		this.c.a(iblockaccess, entity);
		PathPoint pathpoint = this.c.a(entity);
		PathPoint pathpoint1 = this.c.a(entity, d0, d1, d2);
		PathEntity pathentity = this.a(entity, pathpoint, pathpoint1, f);
		
		this.c.a();
		return pathentity;
	}
	
	private PathEntity a(Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f) {
		pathpoint.e = 0.0F;
		pathpoint.f = pathpoint.b(pathpoint1);
		pathpoint.g = pathpoint.f;
		this.a.a();
		this.a.a(pathpoint);
		PathPoint pathpoint2 = pathpoint;
		
		while (!this.a.e()) {
			PathPoint pathpoint3 = this.a.c();
			
			if (pathpoint3.equals(pathpoint1)) {
				return this.a(pathpoint, pathpoint1);
			}
			
			if (pathpoint3.b(pathpoint1) < pathpoint2.b(pathpoint1)) {
				pathpoint2 = pathpoint3;
			}
			
			pathpoint3.i = true;
			int i = this.c.a(this.b, entity, pathpoint3, pathpoint1, f);
			
			for (int j = 0; j < i; ++j) {
				PathPoint pathpoint4 = this.b[j];
				float f1 = pathpoint3.e + pathpoint3.b(pathpoint4);
				
				if (f1 < f * 2.0F && (!pathpoint4.a() || f1 < pathpoint4.e)) {
					pathpoint4.h = pathpoint3;
					pathpoint4.e = f1;
					pathpoint4.f = pathpoint4.b(pathpoint1);
					if (pathpoint4.a()) {
						this.a.a(pathpoint4, pathpoint4.e + pathpoint4.f);
					} else {
						pathpoint4.g = pathpoint4.e + pathpoint4.f;
						this.a.a(pathpoint4);
					}
				}
			}
		}
		
		if (pathpoint2 == pathpoint) {
			return null;
		} else {
			return this.a(pathpoint, pathpoint2);
		}
	}
	
	private PathEntity a(PathPoint pathpoint, PathPoint pathpoint1) {
		int i = 1;
		
		PathPoint pathpoint2;
		
		for (pathpoint2 = pathpoint1; pathpoint2.h != null; pathpoint2 = pathpoint2.h) {
			++i;
		}
		
		PathPoint[] apathpoint = new PathPoint[i];
		
		pathpoint2 = pathpoint1;
		--i;
		
		for (apathpoint[i] = pathpoint1; pathpoint2.h != null; apathpoint[i] = pathpoint2) {
			pathpoint2 = pathpoint2.h;
			--i;
		}
		
		return new PathEntity(apathpoint);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy