From 5209e17e1bd0e0803035c697c1ec10c49831dfdb Mon Sep 17 00:00:00 2001 From: Andrew Ardill Date: Mon, 17 Jan 2011 11:03:19 +0800 Subject: [PATCH] Adding all Entities into CraftBukkit. These are needed to properly allow for determining class type, in accordance with current practice. --- .../net/minecraft/server/EntityAnimals.java | 36 + .../net/minecraft/server/EntityChicken.java | 78 ++ .../java/net/minecraft/server/EntityCow.java | 49 ++ .../net/minecraft/server/EntityCreature.java | 149 ++++ .../net/minecraft/server/EntityCreeper.java | 96 +++ .../minecraft/server/EntityFallingSand.java | 78 ++ .../net/minecraft/server/EntityFlying.java | 67 ++ .../net/minecraft/server/EntityGhast.java | 145 ++++ .../java/net/minecraft/server/EntityItem.java | 191 +++++ .../java/net/minecraft/server/EntityList.java | 100 +++ .../net/minecraft/server/EntityLiving.java | 723 ++++++++++++++++++ .../net/minecraft/server/EntityPainting.java | 209 +++++ .../java/net/minecraft/server/EntityPig.java | 61 ++ .../net/minecraft/server/EntityPigZombie.java | 100 +++ .../net/minecraft/server/EntitySheep.java | 129 ++++ .../net/minecraft/server/EntitySlime.java | 135 ++++ .../net/minecraft/server/EntitySpider.java | 79 ++ .../net/minecraft/server/EntitySquid.java | 159 ++++ .../net/minecraft/server/EntityTNTPrimed.java | 71 ++ .../net/minecraft/server/EntityTracker.java | 155 ++++ .../minecraft/server/EntityTrackerEntry.java | 252 ++++++ .../net/minecraft/server/EntityWaterMob.java | 28 + .../minecraft/server/EntityZombieSimple.java | 18 + 23 files changed, 3108 insertions(+) create mode 100644 src/main/java/net/minecraft/server/EntityAnimals.java create mode 100644 src/main/java/net/minecraft/server/EntityChicken.java create mode 100644 src/main/java/net/minecraft/server/EntityCow.java create mode 100644 src/main/java/net/minecraft/server/EntityCreature.java create mode 100644 src/main/java/net/minecraft/server/EntityCreeper.java create mode 100644 src/main/java/net/minecraft/server/EntityFallingSand.java create mode 100644 src/main/java/net/minecraft/server/EntityFlying.java create mode 100644 src/main/java/net/minecraft/server/EntityGhast.java create mode 100644 src/main/java/net/minecraft/server/EntityItem.java create mode 100644 src/main/java/net/minecraft/server/EntityList.java create mode 100644 src/main/java/net/minecraft/server/EntityLiving.java create mode 100644 src/main/java/net/minecraft/server/EntityPainting.java create mode 100644 src/main/java/net/minecraft/server/EntityPig.java create mode 100644 src/main/java/net/minecraft/server/EntityPigZombie.java create mode 100644 src/main/java/net/minecraft/server/EntitySheep.java create mode 100644 src/main/java/net/minecraft/server/EntitySlime.java create mode 100644 src/main/java/net/minecraft/server/EntitySpider.java create mode 100644 src/main/java/net/minecraft/server/EntitySquid.java create mode 100644 src/main/java/net/minecraft/server/EntityTNTPrimed.java create mode 100644 src/main/java/net/minecraft/server/EntityTracker.java create mode 100644 src/main/java/net/minecraft/server/EntityTrackerEntry.java create mode 100644 src/main/java/net/minecraft/server/EntityWaterMob.java create mode 100644 src/main/java/net/minecraft/server/EntityZombieSimple.java diff --git a/src/main/java/net/minecraft/server/EntityAnimals.java b/src/main/java/net/minecraft/server/EntityAnimals.java new file mode 100644 index 0000000000..0cb764f4e7 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityAnimals.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public abstract class EntityAnimals extends EntityCreature implements IAnimals { + + public EntityAnimals(World world) { + super(world); + } + + protected float a(int i, int j, int k) { + if (l.a(i, j - 1, k) == Block.u.bi) { + return 10F; + } else { + return l.l(i, j, k) - 0.5F; + } + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + public boolean b() { + int i = MathHelper.b(p); + int j = MathHelper.b(z.b); + int k = MathHelper.b(r); + + return l.a(i, j - 1, k) == Block.u.bi && l.j(i, j, k) > 8 && super.b(); + } + + public int c() { + return 120; + } +} diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java new file mode 100644 index 0000000000..6663ce9087 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -0,0 +1,78 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntityChicken extends EntityAnimals { + + public boolean a; + public float b; + public float c; + public float f; + public float ak; + public float al; + public int am; + + public EntityChicken(World world) { + super(world); + a = false; + b = 0.0F; + c = 0.0F; + al = 1.0F; + aP = "/mob/chicken.png"; + a(0.3F, 0.4F); + aZ = 4; + am = W.nextInt(6000) + 6000; + } + + public void o() { + super.o(); + ak = b; + f = c; + c += ((float) ((double) (A ? -1 : 4) * 0.29999999999999999D)); + if (c < 0.0F) { + c = 0.0F; + } + if (c > 1.0F) { + c = 1.0F; + } + if (!A && al < 1.0F) { + al = 1.0F; + } + al *= 0.90000000000000002D; + if (!A && t < 0.0D) { + t *= 0.59999999999999998D; + } + b += al * 2.0F; + if (!l.z && --am <= 0) { + l.a(((Entity) (this)), "mob.chickenplop", 1.0F, (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + a(Item.aN.ba, 1); + am = W.nextInt(6000) + 6000; + } + } + + protected void a(float f1) {} + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + protected String e() { + return "mob.chicken"; + } + + protected String f() { + return "mob.chickenhurt"; + } + + protected String g() { + return "mob.chickenhurt"; + } + + protected int h() { + return Item.J.ba; + } +} diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java new file mode 100644 index 0000000000..03b49c56f5 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityCow.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +public class EntityCow extends EntityAnimals { + + public EntityCow(World world) { + super(world); + aP = "/mob/cow.png"; + a(0.9F, 1.3F); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + protected String e() { + return "mob.cow"; + } + + protected String f() { + return "mob.cowhurt"; + } + + protected String g() { + return "mob.cowhurt"; + } + + protected float i() { + return 0.4F; + } + + protected int h() { + return Item.aD.ba; + } + + public boolean a(EntityPlayer entityplayer) { + ItemStack itemstack = entityplayer.an.e(); + + if (itemstack != null && itemstack.c == Item.au.ba) { + entityplayer.an.a(entityplayer.an.c, new ItemStack(Item.aE)); + return true; + } else { + return false; + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java new file mode 100644 index 0000000000..da584aa4d8 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityCreature.java @@ -0,0 +1,149 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntityCreature extends EntityLiving { + + private PathEntity a; + protected Entity d; + protected boolean e; + + public EntityCreature(World world) { + super(world); + e = false; + } + + protected void d() { + e = false; + float f = 16F; + + if (d == null) { + d = l(); + if (d != null) { + a = l.a(((Entity) (this)), d, f); + } + } else if (!d.B()) { + d = null; + } else { + float f1 = d.a(((Entity) (this))); + + if (i(d)) { + a(d, f1); + } + } + if (!e && d != null && (a == null || W.nextInt(20) == 0)) { + a = l.a(((Entity) (this)), d, f); + } else if (a == null && W.nextInt(80) == 0 || W.nextInt(80) == 0) { + boolean flag = false; + int j = -1; + int k = -1; + int i1 = -1; + float f2 = -99999F; + + for (int j1 = 0; j1 < 10; j1++) { + int k1 = MathHelper.b((p + (double) W.nextInt(13)) - 6D); + int l1 = MathHelper.b((q + (double) W.nextInt(7)) - 3D); + int i2 = MathHelper.b((r + (double) W.nextInt(13)) - 6D); + float f3 = a(k1, l1, i2); + + if (f3 > f2) { + f2 = f3; + j = k1; + k = l1; + i1 = i2; + flag = true; + } + } + + if (flag) { + a = l.a(((Entity) (this)), j, k, i1, 10F); + } + } + int i = MathHelper.b(z.b); + boolean flag1 = v(); + boolean flag2 = x(); + + w = 0.0F; + if (a == null || W.nextInt(100) == 0) { + super.d(); + a = null; + return; + } + Vec3D vec3d = a.a(((Entity) (this))); + + for (double d1 = I * 2.0F; vec3d != null && vec3d.d(p, vec3d.b, r) < d1 * d1;) { + a.a(); + if (a.b()) { + vec3d = null; + a = null; + } else { + vec3d = a.a(((Entity) (this))); + } + } + + bA = false; + if (vec3d != null) { + double d2 = vec3d.a - p; + double d3 = vec3d.c - r; + double d4 = vec3d.b - (double) i; + float f4 = (float) ((Math.atan2(d3, d2) * 180D) / 3.1415927410125732D) - 90F; + float f5 = f4 - v; + + by = bC; + for (; f5 < -180F; f5 += 360F) { + ; + } + for (; f5 >= 180F; f5 -= 360F) { + ; + } + if (f5 > 30F) { + f5 = 30F; + } + if (f5 < -30F) { + f5 = -30F; + } + v += f5; + if (e && d != null) { + double d5 = d.p - p; + double d6 = d.r - r; + float f7 = v; + + v = (float) ((Math.atan2(d6, d5) * 180D) / 3.1415927410125732D) - 90F; + float f6 = (((f7 - v) + 90F) * 3.141593F) / 180F; + + bx = -MathHelper.a(f6) * by * 1.0F; + by = MathHelper.b(f6) * by * 1.0F; + } + if (d4 > 0.0D) { + bA = true; + } + } + if (d != null) { + b(d, 30F); + } + if (B) { + bA = true; + } + if (W.nextFloat() < 0.8F && (flag1 || flag2)) { + bA = true; + } + } + + protected void a(Entity entity, float f) {} + + protected float a(int i, int j, int k) { + return 0.0F; + } + + protected Entity l() { + return null; + } + + public boolean b() { + int i = MathHelper.b(p); + int j = MathHelper.b(z.b); + int k = MathHelper.b(r); + + return super.b() && a(i, j, k) >= 0.0F; + } +} diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java new file mode 100644 index 0000000000..06dbdb8c4a --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -0,0 +1,96 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntityCreeper extends EntityMobs { + + int a; + int b; + + public EntityCreeper(World world) { + super(world); + aP = "/mob/creeper.png"; + } + + protected void a() { + super.a(); + af.a(16, ((Byte.valueOf((byte) -1)))); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + public void b_() { + b = a; + if (l.z) { + int i = K(); + + if (i > 0 && a == 0) { + l.a(((Entity) (this)), "random.fuse", 1.0F, 0.5F); + } + a += i; + if (a < 0) { + a = 0; + } + if (a >= 30) { + a = 30; + } + } + super.b_(); + } + + protected String f() { + return "mob.creeper"; + } + + protected String g() { + return "mob.creeperdeath"; + } + + public void f(Entity entity) { + super.f(entity); + if (entity instanceof EntitySkeleton) { + a(Item.aY.ba + W.nextInt(2), 1); + } + } + + protected void a(Entity entity, float f1) { + int i = K(); + + if (i <= 0 && f1 < 3F || i > 0 && f1 < 7F) { + if (a == 0) { + l.a(((Entity) (this)), "random.fuse", 1.0F, 0.5F); + } + a(1); + a++; + if (a >= 30) { + l.a(((Entity) (this)), p, q, r, 3F); + q(); + } + e = true; + } else { + a(-1); + a--; + if (a < 0) { + a = 0; + } + } + } + + protected int h() { + return Item.K.ba; + } + + private int K() { + return ((int) (af.a(16))); + } + + private void a(int i) { + af.b(16, ((Byte.valueOf((byte) i)))); + } +} diff --git a/src/main/java/net/minecraft/server/EntityFallingSand.java b/src/main/java/net/minecraft/server/EntityFallingSand.java new file mode 100644 index 0000000000..b384f01c8e --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityFallingSand.java @@ -0,0 +1,78 @@ +package net.minecraft.server; + +public class EntityFallingSand extends Entity { + + public int a; + public int b; + + public EntityFallingSand(World world) { + super(world); + b = 0; + } + + public EntityFallingSand(World world, double d, double d1, double d2, int i) { + super(world); + b = 0; + a = i; + this.i = true; + a(0.98F, 0.98F); + H = J / 2.0F; + a(d, d1, d2); + s = 0.0D; + t = 0.0D; + u = 0.0D; + M = false; + m = d; + n = d1; + o = d2; + } + + protected void a() {} + + public boolean c_() { + return !G; + } + + public void b_() { + if (a == 0) { + q(); + return; + } + m = p; + n = q; + o = r; + b++; + t -= 0.039999999105930328D; + c(s, t, u); + s *= 0.98000001907348633D; + t *= 0.98000001907348633D; + u *= 0.98000001907348633D; + int i = MathHelper.b(p); + int j = MathHelper.b(q); + int k = MathHelper.b(r); + + if (l.a(i, j, k) == a) { + l.e(i, j, k, 0); + } + if (A) { + s *= 0.69999998807907104D; + u *= 0.69999998807907104D; + t *= -0.5D; + q(); + if ((!l.a(a, i, j, k, true) || !l.e(i, j, k, a)) && !l.z) { + a(a, 1); + } + } else if (b > 100 && !l.z) { + a(a, 1); + q(); + } + } + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.a("Tile", (byte) a); + } + + protected void b(NBTTagCompound nbttagcompound) { + a = nbttagcompound.b("Tile") & 0xff; + } +} diff --git a/src/main/java/net/minecraft/server/EntityFlying.java b/src/main/java/net/minecraft/server/EntityFlying.java new file mode 100644 index 0000000000..165d24b7f4 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityFlying.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +public class EntityFlying extends EntityLiving { + + public EntityFlying(World world) { + super(world); + } + + protected void a(float f) {} + + public void c(float f, float f1) { + if (v()) { + a(f, f1, 0.02F); + c(s, t, u); + s *= 0.80000001192092896D; + t *= 0.80000001192092896D; + u *= 0.80000001192092896D; + } else if (x()) { + a(f, f1, 0.02F); + c(s, t, u); + s *= 0.5D; + t *= 0.5D; + u *= 0.5D; + } else { + float f2 = 0.91F; + + if (A) { + f2 = 0.5460001F; + int i = l.a(MathHelper.b(p), MathHelper.b(z.b) - 1, MathHelper.b(r)); + + if (i > 0) { + f2 = Block.m[i].bu * 0.91F; + } + } + float f3 = 0.1627714F / (f2 * f2 * f2); + + a(f, f1, A ? 0.1F * f3 : 0.02F); + f2 = 0.91F; + if (A) { + f2 = 0.5460001F; + int j = l.a(MathHelper.b(p), MathHelper.b(z.b) - 1, MathHelper.b(r)); + + if (j > 0) { + f2 = Block.m[j].bu * 0.91F; + } + } + c(s, t, u); + s *= f2; + t *= f2; + u *= f2; + } + bl = bm; + double d = p - m; + double d1 = r - o; + float f4 = MathHelper.a(d * d + d1 * d1) * 4F; + + if (f4 > 1.0F) { + f4 = 1.0F; + } + bm += (f4 - bm) * 0.4F; + bn += bm; + } + + public boolean m() { + return false; + } +} diff --git a/src/main/java/net/minecraft/server/EntityGhast.java b/src/main/java/net/minecraft/server/EntityGhast.java new file mode 100644 index 0000000000..768d581e1a --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityGhast.java @@ -0,0 +1,145 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class EntityGhast extends EntityFlying implements IMobs { + + public int a; + public double b; + public double c; + public double d; + private Entity ak; + private int al; + public int e; + public int f; + + public EntityGhast(World world) { + super(world); + a = 0; + ak = null; + al = 0; + e = 0; + f = 0; + aP = "/mob/ghast.png"; + a(4F, 4F); + ae = true; + } + + protected void d() { + if (l.k == 0) { + q(); + } + e = f; + double d1 = b - p; + double d2 = c - q; + double d3 = d - r; + double d4 = MathHelper.a(d1 * d1 + d2 * d2 + d3 * d3); + + if (d4 < 1.0D || d4 > 60D) { + b = p + (double) ((W.nextFloat() * 2.0F - 1.0F) * 16F); + c = q + (double) ((W.nextFloat() * 2.0F - 1.0F) * 16F); + d = r + (double) ((W.nextFloat() * 2.0F - 1.0F) * 16F); + } + if (a-- <= 0) { + a += W.nextInt(5) + 2; + if (a(b, c, d, d4)) { + s += (d1 / d4) * 0.10000000000000001D; + t += (d2 / d4) * 0.10000000000000001D; + u += (d3 / d4) * 0.10000000000000001D; + } else { + b = p; + c = q; + d = r; + } + } + if (ak != null && ak.G) { + ak = null; + } + if (ak == null || al-- <= 0) { + ak = ((Entity) (l.a(((Entity) (this)), 100D))); + if (ak != null) { + al = 20; + } + } + double d5 = 64D; + + if (ak != null && ak.b(((Entity) (this))) < d5 * d5) { + double d6 = ak.p - p; + double d7 = (ak.z.b + (double) (ak.J / 2.0F)) - (q + (double) (J / 2.0F)); + double d8 = ak.r - r; + + aI = v = (-(float) Math.atan2(d6, d8) * 180F) / 3.141593F; + if (i(ak)) { + if (f == 10) { + l.a(((Entity) (this)), "mob.ghast.charge", i(), (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + } + f++; + if (f == 20) { + l.a(((Entity) (this)), "mob.ghast.fireball", i(), (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + EntityFireball entityfireball = new EntityFireball(l, ((EntityLiving) (this)), d6, d7, d8); + double d9 = 4D; + Vec3D vec3d = c(1.0F); + + entityfireball.p = p + vec3d.a * d9; + entityfireball.q = q + (double) (J / 2.0F) + 0.5D; + entityfireball.r = r + vec3d.c * d9; + l.a(((Entity) (entityfireball))); + f = -40; + } + } else if (f > 0) { + f--; + } + } else { + aI = v = (-(float) Math.atan2(s, u) * 180F) / 3.141593F; + if (f > 0) { + f--; + } + } + aP = f <= 10 ? "/mob/ghast.png" : "/mob/ghast_fire.png"; + } + + private boolean a(double d1, double d2, double d3, double d4) { + double d5 = (b - p) / d4; + double d6 = (c - q) / d4; + double d7 = (d - r) / d4; + AxisAlignedBB axisalignedbb = z.b(); + + for (int k = 1; (double) k < d4; k++) { + axisalignedbb.d(d5, d6, d7); + if (l.a(((Entity) (this)), axisalignedbb).size() > 0) { + return false; + } + } + + return true; + } + + protected String e() { + return "mob.ghast.moan"; + } + + protected String f() { + return "mob.ghast.scream"; + } + + protected String g() { + return "mob.ghast.death"; + } + + protected int h() { + return Item.K.ba; + } + + protected float i() { + return 10F; + } + + public boolean b() { + return W.nextInt(20) == 0 && super.b() && l.k > 0; + } + + public int j() { + return 1; + } +} diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java new file mode 100644 index 0000000000..8104bd40c2 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -0,0 +1,191 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntityItem extends Entity { + + public ItemStack a; + private int e; + public int b; + public int c; + private int f; + public float d; + + public EntityItem(World world, double d1, double d2, double d3, ItemStack itemstack) { + super(world); + b = 0; + f = 5; + d = (float) (Math.random() * 3.1415926535897931D * 2D); + a(0.25F, 0.25F); + H = J / 2.0F; + a(d1, d2, d3); + a = itemstack; + v = (float) (Math.random() * 360D); + s = (float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D); + t = 0.20000000298023224D; + u = (float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D); + M = false; + } + + public EntityItem(World world) { + super(world); + b = 0; + f = 5; + d = (float) (Math.random() * 3.1415926535897931D * 2D); + a(0.25F, 0.25F); + H = J / 2.0F; + } + + protected void a() {} + + public void b_() { + super.b_(); + if (c > 0) { + c--; + } + m = p; + n = q; + o = r; + t -= 0.039999999105930328D; + if (l.c(MathHelper.b(p), MathHelper.b(q), MathHelper.b(r)) == Material.g) { + t = 0.20000000298023224D; + s = (W.nextFloat() - W.nextFloat()) * 0.2F; + u = (W.nextFloat() - W.nextFloat()) * 0.2F; + l.a(((Entity) (this)), "random.fizz", 0.4F, 2.0F + W.nextFloat() * 0.4F); + } + g(p, q, r); + c(s, t, u); + float f1 = 0.98F; + + if (A) { + f1 = 0.5880001F; + int i = l.a(MathHelper.b(p), MathHelper.b(z.b) - 1, MathHelper.b(r)); + + if (i > 0) { + f1 = Block.m[i].bu * 0.98F; + } + } + s *= f1; + t *= 0.98000001907348633D; + u *= f1; + if (A) { + t *= -0.5D; + } + e++; + b++; + if (b >= 6000) { + q(); + } + } + + public boolean v() { + return l.a(z, Material.f, ((Entity) (this))); + } + + private boolean g(double d1, double d2, double d3) { + int i = MathHelper.b(d1); + int j = MathHelper.b(d2); + int k = MathHelper.b(d3); + double d4 = d1 - (double) i; + double d5 = d2 - (double) j; + double d6 = d3 - (double) k; + + if (Block.o[l.a(i, j, k)]) { + boolean flag = !Block.o[l.a(i - 1, j, k)]; + boolean flag1 = !Block.o[l.a(i + 1, j, k)]; + boolean flag2 = !Block.o[l.a(i, j - 1, k)]; + boolean flag3 = !Block.o[l.a(i, j + 1, k)]; + boolean flag4 = !Block.o[l.a(i, j, k - 1)]; + boolean flag5 = !Block.o[l.a(i, j, k + 1)]; + byte byte0 = -1; + double d7 = 9999D; + + if (flag && d4 < d7) { + d7 = d4; + byte0 = 0; + } + if (flag1 && 1.0D - d4 < d7) { + d7 = 1.0D - d4; + byte0 = 1; + } + if (flag2 && d5 < d7) { + d7 = d5; + byte0 = 2; + } + if (flag3 && 1.0D - d5 < d7) { + d7 = 1.0D - d5; + byte0 = 3; + } + if (flag4 && d6 < d7) { + d7 = d6; + byte0 = 4; + } + if (flag5 && 1.0D - d6 < d7) { + double d8 = 1.0D - d6; + + byte0 = 5; + } + float f1 = W.nextFloat() * 0.2F + 0.1F; + + if (byte0 == 0) { + s = -f1; + } + if (byte0 == 1) { + s = f1; + } + if (byte0 == 2) { + t = -f1; + } + if (byte0 == 3) { + t = f1; + } + if (byte0 == 4) { + u = -f1; + } + if (byte0 == 5) { + u = f1; + } + } + return false; + } + + protected void b(int i) { + a(((Entity) (null)), i); + } + + public boolean a(Entity entity, int i) { + y(); + f -= i; + if (f <= 0) { + q(); + } + return false; + } + + public void a(NBTTagCompound nbttagcompound) { + nbttagcompound.a("Health", (byte) f); + nbttagcompound.a("Age", (short) b); + nbttagcompound.a("Item", a.a(new NBTTagCompound())); + } + + public void b(NBTTagCompound nbttagcompound) { + f = nbttagcompound.c("Health") & 0xff; + b = ((int) (nbttagcompound.c("Age"))); + NBTTagCompound nbttagcompound1 = nbttagcompound.j("Item"); + + a = new ItemStack(nbttagcompound1); + } + + public void b(EntityPlayer entityplayer) { + if (l.z) { + return; + } + int i = a.a; + + if (c == 0 && entityplayer.an.a(a)) { + l.a(((Entity) (this)), "random.pop", 0.2F, ((W.nextFloat() - W.nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityplayer.c(((Entity) (this)), i); + q(); + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityList.java b/src/main/java/net/minecraft/server/EntityList.java new file mode 100644 index 0000000000..1602769bf6 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityList.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +import java.io.PrintStream; +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.Map; + +public class EntityList { + + private static Map a = new HashMap(); + private static Map b = new HashMap(); + private static Map c = new HashMap(); + private static Map d = new HashMap(); + + public EntityList() {} + + private static void a(Class class1, String s, int i) { + a.put(((s)), ((class1))); + b.put(((class1)), ((s))); + c.put(((Integer.valueOf(i))), ((class1))); + d.put(((class1)), ((Integer.valueOf(i)))); + } + + public static Entity a(String s, World world) { + Entity entity = null; + + try { + Class class1 = (Class) a.get(((s))); + + if (class1 != null) { + entity = (Entity) class1.getConstructor(new Class[] { + net.minecraft.server.World.class + }).newInstance(new Object[] { + world + }); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + return entity; + } + + public static Entity a(NBTTagCompound nbttagcompound, World world) { + Entity entity = null; + + try { + Class class1 = (Class) a.get(((nbttagcompound.h("id")))); + + if (class1 != null) { + entity = (Entity) class1.getConstructor(new Class[] { + net.minecraft.server.World.class + }).newInstance(new Object[] { + world + }); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + if (entity != null) { + entity.e(nbttagcompound); + } else { + System.out.println((new StringBuilder()).append("Skipping Entity with id ").append(nbttagcompound.h("id")).toString()); + } + return entity; + } + + public static int a(Entity entity) { + return ((Integer) d.get(((((entity)).getClass())))).intValue(); + } + + public static String b(Entity entity) { + return (String) b.get(((((entity)).getClass()))); + } + + static { + a(net.minecraft.server.EntityArrow.class, "Arrow", 10); + a(net.minecraft.server.EntitySnowball.class, "Snowball", 11); + a(net.minecraft.server.EntityItem.class, "Item", 1); + a(net.minecraft.server.EntityPainting.class, "Painting", 9); + a(net.minecraft.server.EntityLiving.class, "Mob", 48); + a(net.minecraft.server.EntityMobs.class, "Monster", 49); + a(net.minecraft.server.EntityCreeper.class, "Creeper", 50); + a(net.minecraft.server.EntitySkeleton.class, "Skeleton", 51); + a(net.minecraft.server.EntitySpider.class, "Spider", 52); + a(net.minecraft.server.EntityZombieSimple.class, "Giant", 53); + a(net.minecraft.server.EntityZombie.class, "Zombie", 54); + a(net.minecraft.server.EntitySlime.class, "Slime", 55); + a(net.minecraft.server.EntityGhast.class, "Ghast", 56); + a(net.minecraft.server.EntityPigZombie.class, "PigZombie", 57); + a(net.minecraft.server.EntityPig.class, "Pig", 90); + a(net.minecraft.server.EntitySheep.class, "Sheep", 91); + a(net.minecraft.server.EntityCow.class, "Cow", 92); + a(net.minecraft.server.EntityChicken.class, "Chicken", 93); + a(net.minecraft.server.EntitySquid.class, "Squid", 94); + a(net.minecraft.server.EntityTNTPrimed.class, "PrimedTnt", 20); + a(net.minecraft.server.EntityFallingSand.class, "FallingSand", 21); + a(net.minecraft.server.EntityMinecart.class, "Minecart", 40); + a(net.minecraft.server.EntityBoat.class, "Boat", 41); + } +} diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java new file mode 100644 index 0000000000..76cc6b5c01 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -0,0 +1,723 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public abstract class EntityLiving extends Entity { + + public int aF; + public float aG; + public float aH; + public float aI; + public float aJ; + protected float aK; + protected float aL; + protected float aM; + protected float aN; + protected boolean aO; + protected String aP; + protected boolean aQ; + protected float aR; + protected String aS; + protected float aT; + protected int aU; + protected float aV; + public boolean aW; + public float aX; + public float aY; + public int aZ; + public int ba; + private int a; + public int bb; + public int bc; + public float bd; + public int be; + public int bf; + public float bg; + public float bh; + protected boolean bi; + public int bj; + public float bk; + public float bl; + public float bm; + public float bn; + protected int bo; + protected double bp; + protected double bq; + protected double br; + protected double bs; + protected double bt; + float bu; + protected int bv; + protected int bw; + protected float bx; + protected float by; + protected float bz; + protected boolean bA; + protected float bB; + protected float bC; + private Entity b; + private int c; + + public EntityLiving(World world) { + super(world); + aF = 20; + aI = 0.0F; + aJ = 0.0F; + aO = true; + aP = "/mob/char.png"; + aQ = true; + aR = 0.0F; + aS = null; + aT = 1.0F; + aU = 0; + aV = 0.0F; + aW = false; + bd = 0.0F; + be = 0; + bf = 0; + bi = false; + bj = -1; + bk = (float) (Math.random() * 0.89999997615814209D + 0.10000000149011612D); + bu = 0.0F; + bv = 0; + bw = 0; + bA = false; + bB = 0.0F; + bC = 0.7F; + c = 0; + aZ = 10; + i = true; + aH = (float) (Math.random() + 1.0D) * 0.01F; + a(p, q, r); + aG = (float) Math.random() * 12398F; + v = (float) (Math.random() * 3.1415927410125732D * 2D); + S = 0.5F; + } + + protected void a() {} + + public boolean i(Entity entity) { + return l.a(Vec3D.b(p, q + (double) w(), r), Vec3D.b(entity.p, entity.q + (double) entity.w(), entity.r)) == null; + } + + public boolean c_() { + return !G; + } + + public boolean z() { + return !G; + } + + public float w() { + return J * 0.85F; + } + + public int c() { + return 80; + } + + public void r() { + aX = aY; + super.r(); + if (W.nextInt(1000) < a++) { + a = -c(); + String s = e(); + + if (s != null) { + this.l.a(((Entity) (this)), s, i(), (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + } + } + if (B() && C()) { + a(((Entity) (null)), 1); + } + if (ae || this.l.z) { + Z = 0; + } + if (B() && a(Material.f) && !d_()) { + ad--; + if (ad == -20) { + ad = 0; + for (int k = 0; k < 8; k++) { + float f1 = W.nextFloat() - W.nextFloat(); + float f2 = W.nextFloat() - W.nextFloat(); + float f3 = W.nextFloat() - W.nextFloat(); + + this.l.a("bubble", p + (double) f1, q + (double) f2, r + (double) f3, this.s, t, u); + } + + a(((Entity) (null)), 2); + } + Z = 0; + } else { + ad = aa; + } + bg = bh; + if (bf > 0) { + bf--; + } + if (bb > 0) { + bb--; + } + if (ac > 0) { + ac--; + } + if (aZ <= 0) { + be++; + if (be > 20) { + T(); + q(); + for (int l = 0; l < 20; l++) { + double d1 = W.nextGaussian() * 0.02D; + double d2 = W.nextGaussian() * 0.02D; + double d3 = W.nextGaussian() * 0.02D; + + this.l.a("explode", (p + (double) (W.nextFloat() * I * 2.0F)) - (double) I, q + (double) (W.nextFloat() * J), (r + (double) (W.nextFloat() * I * 2.0F)) - (double) I, d1, d2, d3); + } + } + } + aN = aM; + aJ = aI; + x = v; + y = w; + } + + public void R() { + for (int k = 0; k < 20; k++) { + double d1 = W.nextGaussian() * 0.02D; + double d2 = W.nextGaussian() * 0.02D; + double d3 = W.nextGaussian() * 0.02D; + double d4 = 10D; + + l.a("explode", (p + (double) (W.nextFloat() * I * 2.0F)) - (double) I - d1 * d4, (q + (double) (W.nextFloat() * J)) - d2 * d4, (r + (double) (W.nextFloat() * I * 2.0F)) - (double) I - d3 * d4, d1, d2, d3); + } + } + + public void D() { + super.D(); + aK = aL; + aL = 0.0F; + } + + public void b_() { + super.b_(); + o(); + double d1 = p - m; + double d2 = r - o; + float f1 = MathHelper.a(d1 * d1 + d2 * d2); + float f2 = aI; + float f3 = 0.0F; + + aK = aL; + float f4 = 0.0F; + + if (f1 > 0.05F) { + f4 = 1.0F; + f3 = f1 * 3F; + f2 = ((float) Math.atan2(d2, d1) * 180F) / 3.141593F - 90F; + } + if (aY > 0.0F) { + f2 = v; + } + if (!A) { + f4 = 0.0F; + } + aL = aL + (f4 - aL) * 0.3F; + float f5; + + for (f5 = f2 - aI; f5 < -180F; f5 += 360F) { + ; + } + for (; f5 >= 180F; f5 -= 360F) { + ; + } + aI += f5 * 0.3F; + float f6; + + for (f6 = v - aI; f6 < -180F; f6 += 360F) { + ; + } + for (; f6 >= 180F; f6 -= 360F) { + ; + } + boolean flag = f6 < -90F || f6 >= 90F; + + if (f6 < -75F) { + f6 = -75F; + } + if (f6 >= 75F) { + f6 = 75F; + } + aI = v - f6; + if (f6 * f6 > 2500F) { + aI += f6 * 0.2F; + } + if (flag) { + f3 *= -1F; + } + for (; v - x < -180F; x -= 360F) { + ; + } + for (; v - x >= 180F; x += 360F) { + ; + } + for (; aI - aJ < -180F; aJ -= 360F) { + ; + } + for (; aI - aJ >= 180F; aJ += 360F) { + ; + } + for (; w - y < -180F; y -= 360F) { + ; + } + for (; w - y >= 180F; y += 360F) { + ; + } + aM += f3; + } + + protected void a(float f1, float f2) { + super.a(f1, f2); + } + + public void d(int k) { + if (aZ <= 0) { + return; + } + aZ += k; + if (aZ > 20) { + aZ = 20; + } + ac = aF / 2; + } + + public boolean a(Entity entity, int k) { + if (l.z) { + return false; + } + bw = 0; + if (aZ <= 0) { + return false; + } + bm = 1.5F; + boolean flag = true; + + if ((float) ac > (float) aF / 2.0F) { + if (k <= bv) { + return false; + } + e(k - bv); + bv = k; + flag = false; + } else { + bv = k; + ba = aZ; + ac = aF; + e(k); + bb = bc = 10; + } + bd = 0.0F; + if (flag) { + l.a(((Entity) (this)), (byte) 2); + y(); + if (entity != null) { + double d1 = entity.p - p; + double d2; + + for (d2 = entity.r - r; d1 * d1 + d2 * d2 < 0.0001D; d2 = (Math.random() - Math.random()) * 0.01D) { + d1 = (Math.random() - Math.random()) * 0.01D; + } + + bd = (float) ((Math.atan2(d2, d1) * 180D) / 3.1415927410125732D) - v; + a(entity, k, d1, d2); + } else { + bd = (int) (Math.random() * 2D) * 180; + } + } + if (aZ <= 0) { + if (flag) { + l.a(((Entity) (this)), g(), i(), (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + } + f(entity); + } else if (flag) { + l.a(((Entity) (this)), f(), i(), (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + } + return true; + } + + protected void e(int k) { + aZ -= k; + } + + protected float i() { + return 1.0F; + } + + protected String e() { + return null; + } + + protected String f() { + return "random.hurt"; + } + + protected String g() { + return "random.hurt"; + } + + public void a(Entity entity, int k, double d1, double d2) { + float f1 = MathHelper.a(d1 * d1 + d2 * d2); + float f2 = 0.4F; + + s /= 2D; + t /= 2D; + u /= 2D; + s -= (d1 / (double) f1) * (double) f2; + t += 0.40000000596046448D; + u -= (d2 / (double) f1) * (double) f2; + if (t > 0.40000000596046448D) { + t = 0.40000000596046448D; + } + } + + public void f(Entity entity) { + if (aU > 0 && entity != null) { + entity.b(((Entity) (this)), aU); + } + bi = true; + if (!l.z) { + g_(); + } + l.a(((Entity) (this)), (byte) 3); + } + + protected void g_() { + int k = h(); + + if (k > 0) { + int l = W.nextInt(3); + + for (int i1 = 0; i1 < l; i1++) { + a(k, 1); + } + } + } + + protected int h() { + return 0; + } + + protected void a(float f1) { + int k = (int) Math.ceil(f1 - 3F); + + if (k > 0) { + a(((Entity) (null)), k); + int l = this.l.a(MathHelper.b(p), MathHelper.b(q - 0.20000000298023224D - (double) H), MathHelper.b(r)); + + if (l > 0) { + StepSound stepsound = Block.m[l].br; + + this.l.a(((Entity) (this)), stepsound.c(), stepsound.a() * 0.5F, stepsound.b() * 0.75F); + } + } + } + + public void c(float f1, float f2) { + if (v()) { + double d1 = q; + + a(f1, f2, 0.02F); + c(s, t, u); + s *= 0.80000001192092896D; + t *= 0.80000001192092896D; + u *= 0.80000001192092896D; + t -= 0.02D; + if (B && b(s, ((t + 0.60000002384185791D) - q) + d1, u)) { + t = 0.30000001192092896D; + } + } else if (x()) { + double d2 = q; + + a(f1, f2, 0.02F); + c(s, t, u); + s *= 0.5D; + t *= 0.5D; + u *= 0.5D; + t -= 0.02D; + if (B && b(s, ((t + 0.60000002384185791D) - q) + d2, u)) { + t = 0.30000001192092896D; + } + } else { + float f3 = 0.91F; + + if (A) { + f3 = 0.5460001F; + int k = this.l.a(MathHelper.b(p), MathHelper.b(z.b) - 1, MathHelper.b(r)); + + if (k > 0) { + f3 = Block.m[k].bu * 0.91F; + } + } + float f4 = 0.1627714F / (f3 * f3 * f3); + + a(f1, f2, A ? 0.1F * f4 : 0.02F); + f3 = 0.91F; + if (A) { + f3 = 0.5460001F; + int l = this.l.a(MathHelper.b(p), MathHelper.b(z.b) - 1, MathHelper.b(r)); + + if (l > 0) { + f3 = Block.m[l].bu * 0.91F; + } + } + if (m()) { + N = 0.0F; + if (t < -0.14999999999999999D) { + t = -0.14999999999999999D; + } + } + c(s, t, u); + if (B && m()) { + t = 0.20000000000000001D; + } + t -= 0.080000000000000002D; + t *= 0.98000001907348633D; + s *= f3; + u *= f3; + } + bl = bm; + double d3 = p - m; + double d4 = r - o; + float f5 = MathHelper.a(d3 * d3 + d4 * d4) * 4F; + + if (f5 > 1.0F) { + f5 = 1.0F; + } + bm += (f5 - bm) * 0.4F; + bn += bm; + } + + public boolean m() { + int k = MathHelper.b(p); + int l = MathHelper.b(z.b); + int i1 = MathHelper.b(r); + + return this.l.a(k, l, i1) == Block.aF.bi || this.l.a(k, l + 1, i1) == Block.aF.bi; + } + + public void a(NBTTagCompound nbttagcompound) { + nbttagcompound.a("Health", (short) aZ); + nbttagcompound.a("HurtTime", (short) bb); + nbttagcompound.a("DeathTime", (short) be); + nbttagcompound.a("AttackTime", (short) bf); + } + + public void b(NBTTagCompound nbttagcompound) { + aZ = ((int) (nbttagcompound.c("Health"))); + if (!nbttagcompound.a("Health")) { + aZ = 10; + } + bb = ((int) (nbttagcompound.c("HurtTime"))); + be = ((int) (nbttagcompound.c("DeathTime"))); + bf = ((int) (nbttagcompound.c("AttackTime"))); + } + + public boolean B() { + return !G && aZ > 0; + } + + public boolean d_() { + return false; + } + + public void o() { + if (bo > 0) { + double d1 = p + (bp - p) / (double) bo; + double d2 = q + (bq - q) / (double) bo; + double d3 = r + (br - r) / (double) bo; + double d4; + + for (d4 = bs - (double) v; d4 < -180D; d4 += 360D) { + ; + } + for (; d4 >= 180D; d4 -= 360D) { + ; + } + v += ((float) (d4 / (double) bo)); + w += ((float) ((bt - (double) w) / (double) bo)); + bo--; + a(d1, d2, d3); + b(v, w); + } + if (aZ <= 0) { + bA = false; + bx = 0.0F; + by = 0.0F; + bz = 0.0F; + } else if (!aW) { + d(); + } + boolean flag = v(); + boolean flag1 = x(); + + if (bA) { + if (flag) { + t += 0.039999999105930328D; + } else if (flag1) { + t += 0.039999999105930328D; + } else if (A) { + S(); + } + } + bx *= 0.98F; + by *= 0.98F; + bz *= 0.9F; + c(bx, by); + List list = l.b(((Entity) (this)), z.b(0.20000000298023224D, 0.0D, 0.20000000298023224D)); + + if (list != null && list.size() > 0) { + for (int k = 0; k < list.size(); k++) { + Entity entity = (Entity) list.get(k); + + if (entity.z()) { + entity.c(((Entity) (this))); + } + } + } + } + + protected void S() { + t = 0.41999998688697815D; + } + + protected void d() { + bw++; + EntityPlayer entityplayer = l.a(((Entity) (this)), -1D); + + if (entityplayer != null) { + double d1 = ((Entity) (entityplayer)).p - p; + double d2 = ((Entity) (entityplayer)).q - q; + double d3 = ((Entity) (entityplayer)).r - r; + double d4 = d1 * d1 + d2 * d2 + d3 * d3; + + if (d4 > 16384D) { + q(); + } + if (bw > 600 && W.nextInt(800) == 0) { + if (d4 < 1024D) { + bw = 0; + } else { + q(); + } + } + } + bx = 0.0F; + by = 0.0F; + float f1 = 8F; + + if (W.nextFloat() < 0.02F) { + EntityPlayer entityplayer1 = l.a(((Entity) (this)), f1); + + if (entityplayer1 != null) { + b = ((Entity) (entityplayer1)); + c = 10 + W.nextInt(20); + } else { + bz = (W.nextFloat() - 0.5F) * 20F; + } + } + if (b != null) { + b(b, 10F); + if (c-- <= 0 || b.G || b.b(((Entity) (this))) > (double) (f1 * f1)) { + b = null; + } + } else { + if (W.nextFloat() < 0.05F) { + bz = (W.nextFloat() - 0.5F) * 20F; + } + v += bz; + w = bB; + } + boolean flag = v(); + boolean flag1 = x(); + + if (flag || flag1) { + bA = W.nextFloat() < 0.8F; + } + } + + public void b(Entity entity, float f1) { + double d1 = entity.p - p; + double d2 = entity.r - r; + double d3; + + if (entity instanceof EntityLiving) { + EntityLiving entityliving = (EntityLiving) entity; + + d3 = (entityliving.q + (double) entityliving.w()) - (q + (double) w()); + } else { + d3 = (entity.z.b + entity.z.e) / 2D - (q + (double) w()); + } + double d4 = MathHelper.a(d1 * d1 + d2 * d2); + float f2 = (float) ((Math.atan2(d2, d1) * 180D) / 3.1415927410125732D) - 90F; + float f3 = (float) ((Math.atan2(d3, d4) * 180D) / 3.1415927410125732D); + + w = -b(w, f3, f1); + v = b(v, f2, f1); + } + + private float b(float f1, float f2, float f3) { + float f4; + + for (f4 = f2 - f1; f4 < -180F; f4 += 360F) { + ; + } + for (; f4 >= 180F; f4 -= 360F) { + ; + } + if (f4 > f3) { + f4 = f3; + } + if (f4 < -f3) { + f4 = -f3; + } + return f1 + f4; + } + + public void T() {} + + public boolean b() { + return l.a(z) && l.a(((Entity) (this)), z).size() == 0 && !l.b(z); + } + + protected void t() { + a(((Entity) (null)), 4); + } + + public Vec3D G() { + return c(1.0F); + } + + public Vec3D c(float f1) { + if (f1 == 1.0F) { + float f2 = MathHelper.b(-v * 0.01745329F - 3.141593F); + float f4 = MathHelper.a(-v * 0.01745329F - 3.141593F); + float f6 = -MathHelper.b(-w * 0.01745329F); + float f8 = MathHelper.a(-w * 0.01745329F); + + return Vec3D.b(f4 * f6, f8, f2 * f6); + } else { + float f3 = y + (w - y) * f1; + float f5 = x + (v - x) * f1; + float f7 = MathHelper.b(-f5 * 0.01745329F - 3.141593F); + float f9 = MathHelper.a(-f5 * 0.01745329F - 3.141593F); + float f10 = -MathHelper.b(-f3 * 0.01745329F); + float f11 = MathHelper.a(-f3 * 0.01745329F); + + return Vec3D.b(f9 * f10, f11, f7 * f10); + } + } + + public int j() { + return 4; + } +} diff --git a/src/main/java/net/minecraft/server/EntityPainting.java b/src/main/java/net/minecraft/server/EntityPainting.java new file mode 100644 index 0000000000..3d59a8fcc7 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityPainting.java @@ -0,0 +1,209 @@ +package net.minecraft.server; + +import java.util.*; + +public class EntityPainting extends Entity { + + private int f; + public int a; + public int b; + public int c; + public int d; + public EnumArt e; + + public EntityPainting(World world) { + super(world); + f = 0; + a = 0; + H = 0.0F; + a(0.5F, 0.5F); + } + + public EntityPainting(World world, int i, int j, int k, int l) { + this(world); + b = i; + c = j; + d = k; + ArrayList arraylist = new ArrayList(); + EnumArt aenumart[] = EnumArt.values(); + int i1 = aenumart.length; + + for (int j1 = 0; j1 < i1; j1++) { + EnumArt enumart = aenumart[j1]; + + e = enumart; + a(l); + if (d()) { + ((List) (arraylist)).add(((enumart))); + } + } + + if (((List) (arraylist)).size() > 0) { + e = (EnumArt) ((List) (arraylist)).get(W.nextInt(((List) (arraylist)).size())); + } + a(l); + } + + protected void a() {} + + public void a(int i) { + a = i; + x = v = i * 90; + float f1 = e.A; + float f2 = e.B; + float f3 = e.A; + + if (i == 0 || i == 2) { + f3 = 0.5F; + } else { + f1 = 0.5F; + } + f1 /= 32F; + f2 /= 32F; + f3 /= 32F; + float f4 = (float) b + 0.5F; + float f5 = (float) c + 0.5F; + float f6 = (float) d + 0.5F; + float f7 = 0.5625F; + + if (i == 0) { + f6 -= f7; + } + if (i == 1) { + f4 -= f7; + } + if (i == 2) { + f6 += f7; + } + if (i == 3) { + f4 += f7; + } + if (i == 0) { + f4 -= d(e.A); + } + if (i == 1) { + f6 += d(e.A); + } + if (i == 2) { + f4 += d(e.A); + } + if (i == 3) { + f6 -= d(e.A); + } + f5 += d(e.B); + a(f4, f5, f6); + float f8 = -0.00625F; + + z.c(f4 - f1 - f8, f5 - f2 - f8, f6 - f3 - f8, f4 + f1 + f8, f5 + f2 + f8, f6 + f3 + f8); + } + + private float d(int i) { + if (i == 32) { + return 0.5F; + } + return i != 64 ? 0.0F : 0.5F; + } + + public void b_() { + if (f++ == 100 && !l.z) { + f = 0; + if (!d()) { + q(); + l.a(((Entity) (new EntityItem(l, p, q, r, new ItemStack(Item.aq))))); + } + } + } + + public boolean d() { + if (this.l.a(((Entity) (this)), z).size() > 0) { + return false; + } + int i = e.A / 16; + int j = e.B / 16; + int k = b; + int l = c; + int i1 = d; + + if (a == 0) { + k = MathHelper.b(p - (double) ((float) e.A / 32F)); + } + if (a == 1) { + i1 = MathHelper.b(r - (double) ((float) e.A / 32F)); + } + if (a == 2) { + k = MathHelper.b(p - (double) ((float) e.A / 32F)); + } + if (a == 3) { + i1 = MathHelper.b(r - (double) ((float) e.A / 32F)); + } + l = MathHelper.b(q - (double) ((float) e.B / 32F)); + for (int j1 = 0; j1 < i; j1++) { + for (int k1 = 0; k1 < j; k1++) { + Material material; + + if (a == 0 || a == 2) { + material = this.l.c(k + j1, l + k1, d); + } else { + material = this.l.c(b, l + k1, i1 + j1); + } + if (!material.a()) { + return false; + } + } + } + + List list = this.l.b(((Entity) (this)), z); + + for (int l1 = 0; l1 < list.size(); l1++) { + if (list.get(l1) instanceof EntityPainting) { + return false; + } + } + + return true; + } + + public boolean c_() { + return true; + } + + public boolean a(Entity entity, int i) { + if (!G && !l.z) { + q(); + y(); + l.a(((Entity) (new EntityItem(l, p, q, r, new ItemStack(Item.aq))))); + } + return true; + } + + public void a(NBTTagCompound nbttagcompound) { + nbttagcompound.a("Dir", (byte) a); + nbttagcompound.a("Motive", e.z); + nbttagcompound.a("TileX", b); + nbttagcompound.a("TileY", c); + nbttagcompound.a("TileZ", d); + } + + public void b(NBTTagCompound nbttagcompound) { + a = ((int) (nbttagcompound.b("Dir"))); + b = nbttagcompound.d("TileX"); + c = nbttagcompound.d("TileY"); + d = nbttagcompound.d("TileZ"); + String s = nbttagcompound.h("Motive"); + EnumArt aenumart[] = EnumArt.values(); + int i = aenumart.length; + + for (int j = 0; j < i; j++) { + EnumArt enumart = aenumart[j]; + + if (enumart.z.equals(((s)))) { + e = enumart; + } + } + + if (e == null) { + e = EnumArt.a; + } + a(a); + } +} diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java new file mode 100644 index 0000000000..e44e7a6001 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -0,0 +1,61 @@ +package net.minecraft.server; + +public class EntityPig extends EntityAnimals { + + public EntityPig(World world) { + super(world); + aP = "/mob/pig.png"; + a(0.9F, 0.9F); + } + + protected void a() { + af.a(16, ((Byte.valueOf((byte) 0)))); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.a("Saddle", K()); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + a(nbttagcompound.l("Saddle")); + } + + protected String e() { + return "mob.pig"; + } + + protected String f() { + return "mob.pig"; + } + + protected String g() { + return "mob.pigdeath"; + } + + public boolean a(EntityPlayer entityplayer) { + if (K() && !l.z && (j == null || j == entityplayer)) { + entityplayer.e(((Entity) (this))); + return true; + } else { + return false; + } + } + + protected int h() { + return Item.ao.ba; + } + + public boolean K() { + return (af.a(16) & 1) != 0; + } + + public void a(boolean flag) { + if (flag) { + af.b(16, ((Byte.valueOf((byte) 1)))); + } else { + af.b(16, ((Byte.valueOf((byte) 0)))); + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java new file mode 100644 index 0000000000..d29de54a4a --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class EntityPigZombie extends EntityZombie { + + private int a; + private int b; + private static final ItemStack f; + + public EntityPigZombie(World world) { + super(world); + a = 0; + b = 0; + aP = "/mob/pigzombie.png"; + bC = 0.5F; + c = 5; + ae = true; + } + + public void b_() { + bC = d == null ? 0.5F : 0.95F; + if (b > 0 && --b == 0) { + l.a(((Entity) (this)), "mob.zombiepig.zpigangry", i() * 2.0F, ((W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + super.b_(); + } + + public boolean b() { + return l.k > 0 && l.a(z) && l.a(((Entity) (this)), z).size() == 0 && !l.b(z); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.a("Anger", (short) a); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + a = ((int) (nbttagcompound.c("Anger"))); + } + + protected Entity l() { + if (a == 0) { + return null; + } else { + return super.l(); + } + } + + public void o() { + super.o(); + } + + public boolean a(Entity entity, int i) { + if (entity instanceof EntityPlayer) { + List list = l.b(((Entity) (this)), z.b(32D, 32D, 32D)); + + for (int j = 0; j < list.size(); j++) { + Entity entity1 = (Entity) list.get(j); + + if (entity1 instanceof EntityPigZombie) { + EntityPigZombie entitypigzombie = (EntityPigZombie) entity1; + + entitypigzombie.g(entity); + } + } + + g(entity); + } + return super.a(entity, i); + } + + private void g(Entity entity) { + d = entity; + a = 400 + W.nextInt(400); + b = W.nextInt(40); + } + + protected String e() { + return "mob.zombiepig.zpig"; + } + + protected String f() { + return "mob.zombiepig.zpighurt"; + } + + protected String g() { + return "mob.zombiepig.zpigdeath"; + } + + protected int h() { + return Item.ap.ba; + } + + static { + f = new ItemStack(Item.E, 1); + } +} diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java new file mode 100644 index 0000000000..dcb02d905e --- /dev/null +++ b/src/main/java/net/minecraft/server/EntitySheep.java @@ -0,0 +1,129 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntitySheep extends EntityAnimals { + + public static final float a[][] = { + { + 1.0F, 1.0F, 1.0F + }, { + 0.95F, 0.7F, 0.2F + }, { + 0.9F, 0.5F, 0.85F + }, { + 0.6F, 0.7F, 0.95F + }, { + 0.9F, 0.9F, 0.2F + }, { + 0.5F, 0.8F, 0.1F + }, { + 0.95F, 0.7F, 0.8F + }, { + 0.3F, 0.3F, 0.3F + }, { + 0.6F, 0.6F, 0.6F + }, { + 0.3F, 0.6F, 0.7F + }, { + 0.7F, 0.4F, 0.9F + }, { + 0.2F, 0.4F, 0.8F + }, { + 0.5F, 0.4F, 0.3F + }, { + 0.4F, 0.5F, 0.2F + }, { + 0.8F, 0.3F, 0.3F + }, { + 0.1F, 0.1F, 0.1F + } + }; + + public EntitySheep(World world) { + super(world); + aP = "/mob/sheep.png"; + a(0.9F, 1.3F); + } + + protected void a() { + super.a(); + af.a(16, ((new Byte((byte) 0)))); + } + + public boolean a(Entity entity, int i) { + if (!l.z && !f_() && (entity instanceof EntityLiving)) { + a(true); + int j = 1 + W.nextInt(3); + + for (int k = 0; k < j; k++) { + EntityItem entityitem = a(new ItemStack(Block.ab.bi, 1, e_()), 1.0F); + + entityitem.t += W.nextFloat() * 0.05F; + entityitem.s += (W.nextFloat() - W.nextFloat()) * 0.1F; + entityitem.u += (W.nextFloat() - W.nextFloat()) * 0.1F; + } + } + return super.a(entity, i); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.a("Sheared", f_()); + nbttagcompound.a("Color", (byte) e_()); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + a(nbttagcompound.l("Sheared")); + a(((int) (nbttagcompound.b("Color")))); + } + + protected String e() { + return "mob.sheep"; + } + + protected String f() { + return "mob.sheep"; + } + + protected String g() { + return "mob.sheep"; + } + + public int e_() { + return af.a(16) & 0xf; + } + + public void a(int i) { + byte byte0 = af.a(16); + + af.b(16, ((Byte.valueOf((byte) (byte0 & 0xf0 | i & 0xf))))); + } + + public boolean f_() { + return (af.a(16) & 0x10) != 0; + } + + public void a(boolean flag) { + byte byte0 = af.a(16); + + if (flag) { + af.b(16, ((Byte.valueOf((byte) (byte0 | 0x10))))); + } else { + af.b(16, ((Byte.valueOf((byte) (byte0 & 0xffffffef))))); + } + } + + public static int a(Random random) { + int i = random.nextInt(100); + + if (i < 5) { + return 15; + } + if (i < 10) { + return 7; + } + return i >= 15 ? 0 : 8; + } +} diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java new file mode 100644 index 0000000000..d2aa403dfc --- /dev/null +++ b/src/main/java/net/minecraft/server/EntitySlime.java @@ -0,0 +1,135 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntitySlime extends EntityLiving implements IMobs { + + public float a; + public float b; + private int d; + public int c; + + public EntitySlime(World world) { + super(world); + d = 0; + c = 1; + aP = "/mob/slime.png"; + c = 1 << W.nextInt(3); + H = 0.0F; + d = W.nextInt(20) + 10; + a(c); + } + + public void a(int j) { + c = j; + a(0.6F * (float) j, 0.6F * (float) j); + aZ = j * j; + a(p, q, r); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.a("Size", c - 1); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + c = nbttagcompound.d("Size") + 1; + } + + public void b_() { + b = a; + boolean flag = A; + + super.b_(); + if (A && !flag) { + for (int j = 0; j < c * 8; j++) { + float f1 = W.nextFloat() * 3.141593F * 2.0F; + float f2 = W.nextFloat() * 0.5F + 0.5F; + float f3 = MathHelper.a(f1) * (float) c * 0.5F * f2; + float f4 = MathHelper.b(f1) * (float) c * 0.5F * f2; + + l.a("slime", p + (double) f3, z.b, r + (double) f4, 0.0D, 0.0D, 0.0D); + } + + if (c > 2) { + l.a(((Entity) (this)), "mob.slime", i(), ((W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F) / 0.8F); + } + a = -0.5F; + } + a = a * 0.6F; + } + + protected void d() { + EntityPlayer entityplayer = l.a(((Entity) (this)), 16D); + + if (entityplayer != null) { + b(((Entity) (entityplayer)), 10F); + } + if (A && d-- <= 0) { + d = W.nextInt(20) + 10; + if (entityplayer != null) { + d /= 3; + } + bA = true; + if (c > 1) { + l.a(((Entity) (this)), "mob.slime", i(), ((W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + a = 1.0F; + bx = 1.0F - W.nextFloat() * 2.0F; + by = 1 * c; + } else { + bA = false; + if (A) { + bx = by = 0.0F; + } + } + } + + public void q() { + if (c > 1 && aZ == 0) { + for (int j = 0; j < 4; j++) { + float f1 = (((float) (j % 2) - 0.5F) * (float) c) / 4F; + float f2 = (((float) (j / 2) - 0.5F) * (float) c) / 4F; + EntitySlime entityslime = new EntitySlime(l); + + entityslime.a(c / 2); + entityslime.c(p + (double) f1, q + 0.5D, r + (double) f2, W.nextFloat() * 360F, 0.0F); + l.a(((Entity) (entityslime))); + } + } + super.q(); + } + + public void b(EntityPlayer entityplayer) { + if (c > 1 && i(((Entity) (entityplayer))) && (double) a(((Entity) (entityplayer))) < 0.59999999999999998D * (double) c && entityplayer.a(((Entity) (this)), c)) { + l.a(((Entity) (this)), "mob.slimeattack", 1.0F, (W.nextFloat() - W.nextFloat()) * 0.2F + 1.0F); + } + } + + protected String f() { + return "mob.slime"; + } + + protected String g() { + return "mob.slime"; + } + + protected int h() { + if (c == 1) { + return Item.aK.ba; + } else { + return 0; + } + } + + public boolean b() { + Chunk chunk = l.b(MathHelper.b(p), MathHelper.b(r)); + + return (c == 1 || l.k > 0) && W.nextInt(10) == 0 && chunk.a(0x3ad8025fL).nextInt(10) == 0 && q < 16D; + } + + protected float i() { + return 0.6F; + } +} diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java new file mode 100644 index 0000000000..b1a060d4a7 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntitySpider.java @@ -0,0 +1,79 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntitySpider extends EntityMobs { + + public EntitySpider(World world) { + super(world); + aP = "/mob/spider.png"; + a(1.4F, 0.9F); + bC = 0.8F; + } + + public double k() { + return (double) J * 0.75D - 0.5D; + } + + protected Entity l() { + float f1 = b(1.0F); + + if (f1 < 0.5F) { + double d = 16D; + + return ((Entity) (l.a(((Entity) (this)), d))); + } else { + return null; + } + } + + protected String e() { + return "mob.spider"; + } + + protected String f() { + return "mob.spider"; + } + + protected String g() { + return "mob.spiderdeath"; + } + + protected void a(Entity entity, float f1) { + float f2 = b(1.0F); + + if (f2 > 0.5F && W.nextInt(100) == 0) { + this.d = null; + return; + } + if (f1 > 2.0F && f1 < 6F && W.nextInt(10) == 0) { + if (A) { + double d = entity.p - p; + double d1 = entity.r - r; + float f3 = MathHelper.a(d * d + d1 * d1); + + s = (d / (double) f3) * 0.5D * 0.80000001192092896D + s * 0.20000000298023224D; + u = (d1 / (double) f3) * 0.5D * 0.80000001192092896D + u * 0.20000000298023224D; + t = 0.40000000596046448D; + } + } else { + super.a(entity, f1); + } + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + protected int h() { + return Item.I.ba; + } + + public boolean m() { + return B; + } +} diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java new file mode 100644 index 0000000000..be75720562 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntitySquid.java @@ -0,0 +1,159 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EntitySquid extends EntityWaterMob { + + public float a; + public float b; + public float c; + public float f; + public float ak; + public float al; + public float am; + public float an; + private float ao; + private float ap; + private float aq; + private float ar; + private float as; + private float at; + + public EntitySquid(World world) { + super(world); + a = 0.0F; + b = 0.0F; + c = 0.0F; + f = 0.0F; + ak = 0.0F; + al = 0.0F; + am = 0.0F; + an = 0.0F; + ao = 0.0F; + ap = 0.0F; + aq = 0.0F; + ar = 0.0F; + as = 0.0F; + at = 0.0F; + aP = "/mob/squid.png"; + a(0.95F, 0.95F); + ap = (1.0F / (W.nextFloat() + 1.0F)) * 0.2F; + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + protected String e() { + return null; + } + + protected String f() { + return null; + } + + protected String g() { + return null; + } + + protected float i() { + return 0.4F; + } + + protected int h() { + return 0; + } + + protected void g_() { + int j = W.nextInt(3) + 1; + + for (int k = 0; k < j; k++) { + a(new ItemStack(Item.aU, 1, 0), 0.0F); + } + } + + public boolean a(EntityPlayer entityplayer) { + ItemStack itemstack = entityplayer.an.e(); + + if (itemstack != null && itemstack.c == Item.au.ba) { + entityplayer.an.a(entityplayer.an.c, new ItemStack(Item.aE)); + return true; + } else { + return false; + } + } + + public boolean v() { + return l.a(z.b(0.0D, -0.60000002384185791D, 0.0D), Material.f, ((Entity) (this))); + } + + public void o() { + super.o(); + b = a; + f = c; + al = ak; + an = am; + ak += ap; + if (ak > 6.283185F) { + ak -= 6.283185F; + if (W.nextInt(10) == 0) { + ap = (1.0F / (W.nextFloat() + 1.0F)) * 0.2F; + } + } + if (v()) { + if (ak < 3.141593F) { + float f1 = ak / 3.141593F; + + am = MathHelper.a(f1 * f1 * 3.141593F) * 3.141593F * 0.25F; + if ((double) f1 > 0.75D) { + ao = 1.0F; + aq = 1.0F; + } else { + aq = aq * 0.8F; + } + } else { + am = 0.0F; + ao = ao * 0.9F; + aq = aq * 0.99F; + } + if (!aW) { + s = ar * ao; + t = as * ao; + u = at * ao; + } + float f2 = MathHelper.a(s * s + u * u); + + aI += ((-(float) Math.atan2(s, u) * 180F) / 3.141593F - aI) * 0.1F; + v = aI; + c = c + 3.141593F * aq * 1.5F; + a += ((-(float) Math.atan2(f2, t) * 180F) / 3.141593F - a) * 0.1F; + } else { + am = MathHelper.e(MathHelper.a(ak)) * 3.141593F * 0.25F; + if (!aW) { + s = 0.0D; + t -= 0.080000000000000002D; + t *= 0.98000001907348633D; + u = 0.0D; + } + a += ((float) ((double) (-90F - a) * 0.02D)); + } + } + + public void c(float f1, float f2) { + c(s, t, u); + } + + protected void d() { + if (W.nextInt(50) == 0 || !ab || ar == 0.0F && as == 0.0F && at == 0.0F) { + float f1 = W.nextFloat() * 3.141593F * 2.0F; + + ar = MathHelper.b(f1) * 0.2F; + as = -0.1F + W.nextFloat() * 0.2F; + at = MathHelper.a(f1) * 0.2F; + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java new file mode 100644 index 0000000000..0633b96adb --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java @@ -0,0 +1,71 @@ +package net.minecraft.server; + +public class EntityTNTPrimed extends Entity { + + public int a; + + public EntityTNTPrimed(World world) { + super(world); + a = 0; + i = true; + a(0.98F, 0.98F); + H = J / 2.0F; + } + + public EntityTNTPrimed(World world, double d1, double d2, double d3) { + this(world); + a(d1, d2, d3); + float f = (float) (Math.random() * 3.1415927410125732D * 2D); + + s = -MathHelper.a((f * 3.141593F) / 180F) * 0.02F; + t = 0.20000000298023224D; + u = -MathHelper.b((f * 3.141593F) / 180F) * 0.02F; + M = false; + a = 80; + m = d1; + n = d2; + o = d3; + } + + protected void a() {} + + public boolean c_() { + return !G; + } + + public void b_() { + m = p; + n = q; + o = r; + t -= 0.039999999105930328D; + c(s, t, u); + s *= 0.98000001907348633D; + t *= 0.98000001907348633D; + u *= 0.98000001907348633D; + if (A) { + s *= 0.69999998807907104D; + u *= 0.69999998807907104D; + t *= -0.5D; + } + if (a-- <= 0) { + q(); + d(); + } else { + l.a("smoke", p, q + 0.5D, r, 0.0D, 0.0D, 0.0D); + } + } + + private void d() { + float f = 4F; + + l.a(((Entity) (null)), p, q, r, f); + } + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.a("Fuse", (byte) a); + } + + protected void b(NBTTagCompound nbttagcompound) { + a = ((int) (nbttagcompound.b("Fuse"))); + } +} diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java new file mode 100644 index 0000000000..cd6fe4be94 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityTracker.java @@ -0,0 +1,155 @@ +package net.minecraft.server; + +import java.util.*; + +public class EntityTracker { + + private Set a; + private MCHashTable b; + private MinecraftServer c; + private int d; + + public EntityTracker(MinecraftServer minecraftserver) { + a = ((Set) (new HashSet())); + b = new MCHashTable(); + c = minecraftserver; + d = minecraftserver.f.a(); + } + + public void a(Entity entity) { + if (entity instanceof EntityPlayerMP) { + a(entity, 512, 2); + EntityPlayerMP entityplayermp = (EntityPlayerMP) entity; + Iterator iterator = a.iterator(); + + do { + if (!iterator.hasNext()) { + break; + } + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + if (entitytrackerentry.a != entityplayermp) { + entitytrackerentry.b(entityplayermp); + } + } while (true); + } else if (entity instanceof EntityFish) { + a(entity, 64, 5, true); + } else if (entity instanceof EntityArrow) { + a(entity, 64, 5, true); + } else if (entity instanceof EntitySnowball) { + a(entity, 64, 5, true); + } else if (entity instanceof EntityEgg) { + a(entity, 64, 5, true); + } else if (entity instanceof EntityItem) { + a(entity, 64, 20, true); + } else if (entity instanceof EntityMinecart) { + a(entity, 160, 5, true); + } else if (entity instanceof EntityBoat) { + a(entity, 160, 5, true); + } else if (entity instanceof EntitySquid) { + a(entity, 160, 3, true); + } else if (entity instanceof IAnimals) { + a(entity, 160, 3); + } else if (entity instanceof EntityTNTPrimed) { + a(entity, 160, 10, true); + } else if (entity instanceof EntityFallingSand) { + a(entity, 160, 20, true); + } else if (entity instanceof EntityPainting) { + a(entity, 160, 0x7fffffff, false); + } + } + + public void a(Entity entity, int i, int j) { + a(entity, i, j, false); + } + + public void a(Entity entity, int i, int j, boolean flag) { + if (i > d) { + i = d; + } + if (b.b(entity.g)) { + throw new IllegalStateException("Entity is already tracked!"); + } else { + EntityTrackerEntry entitytrackerentry = new EntityTrackerEntry(entity, i, j, flag); + + a.add(((entitytrackerentry))); + b.a(entity.g, ((entitytrackerentry))); + entitytrackerentry.b(c.e.d); + return; + } + } + + public void b(Entity entity) { + if (entity instanceof EntityPlayerMP) { + EntityPlayerMP entityplayermp = (EntityPlayerMP) entity; + EntityTrackerEntry entitytrackerentry1; + + for (Iterator iterator = a.iterator(); iterator.hasNext(); entitytrackerentry1.a(entityplayermp)) { + entitytrackerentry1 = (EntityTrackerEntry) iterator.next(); + } + } + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) b.d(entity.g); + + if (entitytrackerentry != null) { + a.remove(((entitytrackerentry))); + entitytrackerentry.a(); + } + } + + public void a() { + ArrayList arraylist = new ArrayList(); + Iterator iterator = a.iterator(); + + do { + if (!iterator.hasNext()) { + break; + } + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + entitytrackerentry.a(c.e.d); + if (entitytrackerentry.m && (entitytrackerentry.a instanceof EntityPlayerMP)) { + ((List) (arraylist)).add((((EntityPlayerMP) entitytrackerentry.a))); + } + } while (true); + label0: + for (int i = 0; i < ((List) (arraylist)).size(); i++) { + EntityPlayerMP entityplayermp = (EntityPlayerMP) ((List) (arraylist)).get(i); + Iterator iterator1 = a.iterator(); + + do { + if (!iterator1.hasNext()) { + continue label0; + } + EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) iterator1.next(); + + if (entitytrackerentry1.a != entityplayermp) { + entitytrackerentry1.b(entityplayermp); + } + } while (true); + } + } + + public void a(Entity entity, Packet packet) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) b.a(entity.g); + + if (entitytrackerentry != null) { + entitytrackerentry.a(packet); + } + } + + public void b(Entity entity, Packet packet) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) b.a(entity.g); + + if (entitytrackerentry != null) { + entitytrackerentry.b(packet); + } + } + + public void a(EntityPlayerMP entityplayermp) { + EntityTrackerEntry entitytrackerentry; + + for (Iterator iterator = a.iterator(); iterator.hasNext(); entitytrackerentry.c(entityplayermp)) { + entitytrackerentry = (EntityTrackerEntry) iterator.next(); + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java new file mode 100644 index 0000000000..6fdb67e9f4 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -0,0 +1,252 @@ +package net.minecraft.server; + +import java.util.*; + +public class EntityTrackerEntry { + + public Entity a; + public int b; + public int c; + public int d; + public int e; + public int f; + public int g; + public int h; + public double i; + public double j; + public double k; + public int l; + private double o; + private double p; + private double q; + private boolean r; + private boolean s; + public boolean m; + public Set n; + + public EntityTrackerEntry(Entity entity, int i1, int j1, boolean flag) { + l = 0; + r = false; + m = false; + n = ((Set) (new HashSet())); + a = entity; + b = i1; + c = j1; + s = flag; + d = MathHelper.b(entity.p * 32D); + e = MathHelper.b(entity.q * 32D); + f = MathHelper.b(entity.r * 32D); + g = MathHelper.d((entity.v * 256F) / 360F); + h = MathHelper.d((entity.w * 256F) / 360F); + } + + public boolean equals(Object obj) { + if (obj instanceof EntityTrackerEntry) { + return ((EntityTrackerEntry) obj).a.g == a.g; + } else { + return false; + } + } + + public int hashCode() { + return a.g; + } + + public void a(List list) { + m = false; + if (!r || a.d(o, p, q) > 16D) { + o = a.p; + p = a.q; + q = a.r; + r = true; + m = true; + b(list); + } + if (++l % c == 0) { + int i1 = MathHelper.b(a.p * 32D); + int j1 = MathHelper.b(a.q * 32D); + int k1 = MathHelper.b(a.r * 32D); + int l1 = MathHelper.d((a.v * 256F) / 360F); + int i2 = MathHelper.d((a.w * 256F) / 360F); + boolean flag = i1 != d || j1 != e || k1 != f; + boolean flag1 = l1 != g || i2 != h; + int j2 = i1 - d; + int k2 = j1 - e; + int l2 = k1 - f; + Object obj = null; + + if (j2 < -128 || j2 >= 128 || k2 < -128 || k2 >= 128 || l2 < -128 || l2 >= 128) { + obj = ((new Packet34EntityTeleport(a.g, i1, j1, k1, (byte) l1, (byte) i2))); + } else if (flag && flag1) { + obj = ((new Packet33RelEntityMoveLook(a.g, (byte) j2, (byte) k2, (byte) l2, (byte) l1, (byte) i2))); + } else if (flag) { + obj = ((new Packet31RelEntityMove(a.g, (byte) j2, (byte) k2, (byte) l2))); + } else if (flag1) { + obj = ((new Packet32EntityLook(a.g, (byte) l1, (byte) i2))); + } else { + obj = ((new Packet30Entity(a.g))); + } + if (s) { + double d1 = a.s - i; + double d2 = a.t - j; + double d3 = a.u - k; + double d4 = 0.02D; + double d5 = d1 * d1 + d2 * d2 + d3 * d3; + + if (d5 > d4 * d4 || d5 > 0.0D && a.s == 0.0D && a.t == 0.0D && a.u == 0.0D) { + i = a.s; + j = a.t; + k = a.u; + a(((Packet) (new Packet28(a.g, i, j, k)))); + } + } + if (obj != null) { + a(((Packet) (obj))); + } + DataWatcher datawatcher = a.p(); + + if (datawatcher.a()) { + b(((Packet) (new Packet40(a.g, datawatcher)))); + } + d = i1; + e = j1; + f = k1; + g = l1; + h = i2; + } + if (a.E) { + b(((Packet) (new Packet28(a)))); + a.E = false; + } + } + + public void a(Packet packet) { + EntityPlayerMP entityplayermp; + + for (Iterator iterator = n.iterator(); iterator.hasNext(); entityplayermp.a.b(packet)) { + entityplayermp = (EntityPlayerMP) iterator.next(); + } + } + + public void b(Packet packet) { + a(packet); + if (a instanceof EntityPlayerMP) { + ((EntityPlayerMP) a).a.b(packet); + } + } + + public void a() { + a(((Packet) (new Packet29DestroyEntity(a.g)))); + } + + public void a(EntityPlayerMP entityplayermp) { + if (n.contains(((entityplayermp)))) { + n.remove(((entityplayermp))); + } + } + + public void b(EntityPlayerMP entityplayermp) { + if (entityplayermp == a) { + return; + } + double d1 = entityplayermp.p - (double) (d / 32); + double d2 = entityplayermp.r - (double) (f / 32); + + if (d1 >= (double) (-b) && d1 <= (double) b && d2 >= (double) (-b) && d2 <= (double) b) { + if (!n.contains(((entityplayermp)))) { + n.add(((entityplayermp))); + entityplayermp.a.b(b()); + if (s) { + entityplayermp.a.b(((Packet) (new Packet28(a.g, a.s, a.t, a.u)))); + } + ItemStack aitemstack[] = a.I(); + + if (aitemstack != null) { + for (int i1 = 0; i1 < aitemstack.length; i1++) { + entityplayermp.a.b(((Packet) (new Packet5PlayerInventory(a.g, i1, aitemstack[i1])))); + } + } + } + } else if (n.contains(((entityplayermp)))) { + n.remove(((entityplayermp))); + entityplayermp.a.b(((Packet) (new Packet29DestroyEntity(a.g)))); + } + } + + public void b(List list) { + for (int i1 = 0; i1 < list.size(); i1++) { + b((EntityPlayerMP) list.get(i1)); + } + } + + private Packet b() { + if (a instanceof EntityItem) { + EntityItem entityitem = (EntityItem) a; + Packet21PickupSpawn packet21pickupspawn = new Packet21PickupSpawn(entityitem); + + entityitem.p = (double) packet21pickupspawn.b / 32D; + entityitem.q = (double) packet21pickupspawn.c / 32D; + entityitem.r = (double) packet21pickupspawn.d / 32D; + return ((Packet) (packet21pickupspawn)); + } + if (a instanceof EntityPlayerMP) { + return ((Packet) (new Packet20NamedEntitySpawn((EntityPlayer) a))); + } + if (a instanceof EntityMinecart) { + EntityMinecart entityminecart = (EntityMinecart) a; + + if (entityminecart.d == 0) { + return ((Packet) (new Packet23VehicleSpawn(a, 10))); + } + if (entityminecart.d == 1) { + return ((Packet) (new Packet23VehicleSpawn(a, 11))); + } + if (entityminecart.d == 2) { + return ((Packet) (new Packet23VehicleSpawn(a, 12))); + } + } + if (a instanceof EntityBoat) { + return ((Packet) (new Packet23VehicleSpawn(a, 1))); + } + if (a instanceof IAnimals) { + return ((Packet) (new Packet24MobSpawn((EntityLiving) a))); + } + if (a instanceof EntityFish) { + return ((Packet) (new Packet23VehicleSpawn(a, 90))); + } + if (a instanceof EntityArrow) { + return ((Packet) (new Packet23VehicleSpawn(a, 60))); + } + if (a instanceof EntitySnowball) { + return ((Packet) (new Packet23VehicleSpawn(a, 61))); + } + if (a instanceof EntityEgg) { + return ((Packet) (new Packet23VehicleSpawn(a, 62))); + } + if (a instanceof EntityTNTPrimed) { + return ((Packet) (new Packet23VehicleSpawn(a, 50))); + } + if (a instanceof EntityFallingSand) { + EntityFallingSand entityfallingsand = (EntityFallingSand) a; + + if (entityfallingsand.a == Block.E.bi) { + return ((Packet) (new Packet23VehicleSpawn(a, 70))); + } + if (entityfallingsand.a == Block.F.bi) { + return ((Packet) (new Packet23VehicleSpawn(a, 71))); + } + } + if (a instanceof EntityPainting) { + return ((Packet) (new Packet25((EntityPainting) a))); + } else { + throw new IllegalArgumentException((new StringBuilder()).append("Don't know how to add ").append(((((a)).getClass()))).append("!").toString()); + } + } + + public void c(EntityPlayerMP entityplayermp) { + if (n.contains(((entityplayermp)))) { + n.remove(((entityplayermp))); + entityplayermp.a.b(((Packet) (new Packet29DestroyEntity(a.g)))); + } + } +} diff --git a/src/main/java/net/minecraft/server/EntityWaterMob.java b/src/main/java/net/minecraft/server/EntityWaterMob.java new file mode 100644 index 0000000000..64a9113de2 --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityWaterMob.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +public class EntityWaterMob extends EntityCreature implements IAnimals { + + public EntityWaterMob(World world) { + super(world); + } + + public boolean d_() { + return true; + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + public boolean b() { + return l.a(z); + } + + public int c() { + return 120; + } +} diff --git a/src/main/java/net/minecraft/server/EntityZombieSimple.java b/src/main/java/net/minecraft/server/EntityZombieSimple.java new file mode 100644 index 0000000000..b8a7c7b8ca --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityZombieSimple.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public class EntityZombieSimple extends EntityMobs { + + public EntityZombieSimple(World world) { + super(world); + aP = "/mob/zombie.png"; + bC = 0.5F; + c = 50; + aZ *= 10; + H *= 6F; + a(I * 6F, J * 6F); + } + + protected float a(int i, int j, int k) { + return l.l(i, j, k) - 0.5F; + } +}