From 2be5181b0c721baf520a372350693377c261dd37 Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Sat, 5 Feb 2011 18:15:04 +0000 Subject: Added internal MC support for multiple worlds --- .../java/net/minecraft/server/EntityTracker.java | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/main/java/net/minecraft/server/EntityTracker.java (limited to 'src/main/java/net/minecraft/server/EntityTracker.java') 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 00000000..8cfbf30c --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityTracker.java @@ -0,0 +1,152 @@ +package net.minecraft.server; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public class EntityTracker { + + private Set a = new HashSet(); + private EntityList b = new EntityList(); + private MinecraftServer c; + private int d; + + public EntityTracker(MinecraftServer minecraftserver) { + this.c = minecraftserver; + this.d = minecraftserver.f.a(); + } + + public void a(Entity entity) { + if (entity instanceof EntityPlayer) { + this.a(entity, 512, 2); + EntityPlayer entityplayer = (EntityPlayer) entity; + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + if (entitytrackerentry.a != entityplayer) { + entitytrackerentry.b(entityplayer); + } + } + } else if (entity instanceof EntityFish) { + this.a(entity, 64, 5, true); + } else if (entity instanceof EntityArrow) { + this.a(entity, 64, 5, true); + } else if (entity instanceof EntitySnowball) { + this.a(entity, 64, 5, true); + } else if (entity instanceof EntityEgg) { + this.a(entity, 64, 5, true); + } else if (entity instanceof EntityItem) { + this.a(entity, 64, 20, true); + } else if (entity instanceof EntityMinecart) { + this.a(entity, 160, 5, true); + } else if (entity instanceof EntityBoat) { + this.a(entity, 160, 5, true); + } else if (entity instanceof EntitySquid) { + this.a(entity, 160, 3, true); + } else if (entity instanceof IAnimal) { + this.a(entity, 160, 3); + } else if (entity instanceof EntityTNTPrimed) { + this.a(entity, 160, 10, true); + } else if (entity instanceof EntityFallingSand) { + this.a(entity, 160, 20, true); + } else if (entity instanceof EntityPainting) { + this.a(entity, 160, Integer.MAX_VALUE, false); + } + } + + public void a(Entity entity, int i, int j) { + this.a(entity, i, j, false); + } + + public void a(Entity entity, int i, int j, boolean flag) { + if (i > this.d) { + i = this.d; + } + + if (this.b.b(entity.id)) { + throw new IllegalStateException("Entity is already tracked!"); + } else { + EntityTrackerEntry entitytrackerentry = new EntityTrackerEntry(entity, i, j, flag); + + this.a.add(entitytrackerentry); + this.b.a(entity.id, entitytrackerentry); + entitytrackerentry.b(entity.world.d); // Craftbukkit + } + } + + public void b(Entity entity) { + if (entity instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer) entity; + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + entitytrackerentry.a(entityplayer); + } + } + + EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) this.b.d(entity.id); + + if (entitytrackerentry1 != null) { + this.a.remove(entitytrackerentry1); + entitytrackerentry1.a(); + } + } + + public void a() { + ArrayList arraylist = new ArrayList(); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + entitytrackerentry.a(entitytrackerentry.a.world.d); // Craftbukkit + if (entitytrackerentry.m && entitytrackerentry.a instanceof EntityPlayer) { + arraylist.add((EntityPlayer) entitytrackerentry.a); + } + } + + for (int i = 0; i < arraylist.size(); ++i) { + EntityPlayer entityplayer = (EntityPlayer) arraylist.get(i); + Iterator iterator1 = this.a.iterator(); + + while (iterator1.hasNext()) { + EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) iterator1.next(); + + if (entitytrackerentry1.a != entityplayer) { + entitytrackerentry1.b(entityplayer); + } + } + } + } + + public void a(Entity entity, Packet packet) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.b.a(entity.id); + + if (entitytrackerentry != null) { + entitytrackerentry.a(packet); + } + } + + public void b(Entity entity, Packet packet) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.b.a(entity.id); + + if (entitytrackerentry != null) { + entitytrackerentry.b(packet); + } + } + + public void a(EntityPlayer entityplayer) { + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); + + entitytrackerentry.c(entityplayer); + } + } +} -- cgit v1.2.3