package net.minecraft.server;
import java.util.List;
import javax.annotation.Nullable;
public class PathEntity {
private final List<PathPoint> a;
private PathPoint[] b = new PathPoint[0];
private PathPoint[] c = new PathPoint[0];
private int e;
private final BlockPosition f;
private final float g;
private final boolean h;
public PathEntity(List<PathPoint> list, BlockPosition blockposition, boolean flag) {
this.a = list;
this.f = blockposition;
this.g = list.isEmpty() ? Float.MAX_VALUE : ((PathPoint) this.a.get(this.a.size() - 1)).c(this.f);
this.h = flag;
}
public void a() {
++this.e;
}
public boolean b() {
return this.e >= this.a.size();
}
@Nullable
public PathPoint c() {
return !this.a.isEmpty() ? (PathPoint) this.a.get(this.a.size() - 1) : null;
}
public PathPoint a(int i) {
return (PathPoint) this.a.get(i);
}
public List<PathPoint> d() {
return this.a;
}
public void b(int i) {
if (this.a.size() > i) {
this.a.subList(i, this.a.size()).clear();
}
}
public void a(int i, PathPoint pathpoint) {
this.a.set(i, pathpoint);
}
public int e() {
return this.a.size();
}
public int f() {
return this.e;
}
public void c(int i) {
this.e = i;
}
public Vec3D a(Entity entity, int i) {
PathPoint pathpoint = (PathPoint) this.a.get(i);
double d0 = (double) pathpoint.a + (double) ((int) (entity.getWidth() + 1.0F)) * 0.5D;
double d1 = (double) pathpoint.b;
double d2 = (double) pathpoint.c + (double) ((int) (entity.getWidth() + 1.0F)) * 0.5D;
return new Vec3D(d0, d1, d2);
}
public Vec3D a(Entity entity) {
return this.a(entity, this.e);
}
public Vec3D g() {
PathPoint pathpoint = (PathPoint) this.a.get(this.e);
return new Vec3D((double) pathpoint.a, (double) pathpoint.b, (double) pathpoint.c);
}
public boolean a(@Nullable PathEntity pathentity) {
if (pathentity == null) {
return false;
} else if (pathentity.a.size() != this.a.size()) {
return false;
} else {
for (int i = 0; i < this.a.size(); ++i) {
PathPoint pathpoint = (PathPoint) this.a.get(i);
PathPoint pathpoint1 = (PathPoint) pathentity.a.get(i);
if (pathpoint.a != pathpoint1.a || pathpoint.b != pathpoint1.b || pathpoint.c != pathpoint1.c) {
return false;
}
}
return true;
}
}
public boolean h() {
return this.h;
}
public String toString() {
return "Path(length=" + this.a.size() + ")";
}
public BlockPosition k() {
return this.f;
}
public float l() {
return this.g;
}
}