diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/EntityTrackerEntry.java')
-rw-r--r-- | src/main/java/net/minecraft/server/EntityTrackerEntry.java | 252 |
1 files changed, 252 insertions, 0 deletions
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 00000000..6fdb67e9 --- /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)))); + } + } +} |