summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2012-05-31 19:15:33 -0500
committerTravis Watkins <amaranth@ubuntu.com>2012-05-31 19:54:31 -0500
commit9e5d6699f50bb77a5c322975cbcfa79445499646 (patch)
tree4d6539ecdf11be3e296e4602f1a0157def5fefdf
parent266212f9f8c05862fc02ddd192d6f296473541d8 (diff)
downloadcraftbukkit-9e5d6699f50bb77a5c322975cbcfa79445499646.tar
craftbukkit-9e5d6699f50bb77a5c322975cbcfa79445499646.tar.gz
craftbukkit-9e5d6699f50bb77a5c322975cbcfa79445499646.tar.lz
craftbukkit-9e5d6699f50bb77a5c322975cbcfa79445499646.tar.xz
craftbukkit-9e5d6699f50bb77a5c322975cbcfa79445499646.zip
Add Path.java from mc-dev for diff visibility
-rw-r--r--src/main/java/net/minecraft/server/Path.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/Path.java b/src/main/java/net/minecraft/server/Path.java
new file mode 100644
index 00000000..9575e13d
--- /dev/null
+++ b/src/main/java/net/minecraft/server/Path.java
@@ -0,0 +1,128 @@
+package net.minecraft.server;
+
+public class Path {
+
+ private PathPoint[] a = new PathPoint[1024];
+ private int b = 0;
+
+ public Path() {}
+
+ public PathPoint a(PathPoint pathpoint) {
+ if (pathpoint.d >= 0) {
+ throw new IllegalStateException("OW KNOWS!");
+ } else {
+ if (this.b == this.a.length) {
+ PathPoint[] apathpoint = new PathPoint[this.b << 1];
+
+ System.arraycopy(this.a, 0, apathpoint, 0, this.b);
+ this.a = apathpoint;
+ }
+
+ this.a[this.b] = pathpoint;
+ pathpoint.d = this.b;
+ this.a(this.b++);
+ return pathpoint;
+ }
+ }
+
+ public void a() {
+ this.b = 0;
+ }
+
+ public PathPoint b() {
+ PathPoint pathpoint = this.a[0];
+
+ this.a[0] = this.a[--this.b];
+ this.a[this.b] = null;
+ if (this.b > 0) {
+ this.b(0);
+ }
+
+ pathpoint.d = -1;
+ return pathpoint;
+ }
+
+ public void a(PathPoint pathpoint, float f) {
+ float f1 = pathpoint.g;
+
+ pathpoint.g = f;
+ if (f < f1) {
+ this.a(pathpoint.d);
+ } else {
+ this.b(pathpoint.d);
+ }
+ }
+
+ private void a(int i) {
+ PathPoint pathpoint = this.a[i];
+
+ int j;
+
+ for (float f = pathpoint.g; i > 0; i = j) {
+ j = i - 1 >> 1;
+ PathPoint pathpoint1 = this.a[j];
+
+ if (f >= pathpoint1.g) {
+ break;
+ }
+
+ this.a[i] = pathpoint1;
+ pathpoint1.d = i;
+ }
+
+ this.a[i] = pathpoint;
+ pathpoint.d = i;
+ }
+
+ private void b(int i) {
+ PathPoint pathpoint = this.a[i];
+ float f = pathpoint.g;
+
+ while (true) {
+ int j = 1 + (i << 1);
+ int k = j + 1;
+
+ if (j >= this.b) {
+ break;
+ }
+
+ PathPoint pathpoint1 = this.a[j];
+ float f1 = pathpoint1.g;
+ PathPoint pathpoint2;
+ float f2;
+
+ if (k >= this.b) {
+ pathpoint2 = null;
+ f2 = Float.POSITIVE_INFINITY;
+ } else {
+ pathpoint2 = this.a[k];
+ f2 = pathpoint2.g;
+ }
+
+ if (f1 < f2) {
+ if (f1 >= f) {
+ break;
+ }
+
+ this.a[i] = pathpoint1;
+ pathpoint1.d = i;
+ i = j;
+ } else {
+ if (f2 >= f) {
+ break;
+ }
+
+ this.a[i] = pathpoint2;
+ pathpoint2.d = i;
+ i = k;
+ }
+ }
+
+ this.a[i] = pathpoint;
+ pathpoint.d = i;
+ }
+
+ public boolean c() {
+ return this.b == 0;
+ }
+}