Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3import java.util.ArrayList;
4import java.util.HashSet;
5import java.util.Iterator;
6import java.util.Set;
7
8public class EntityTracker {
9
10 private Set a = new HashSet();
11 public EntityList b = new EntityList(); //Project Poseidon: private -> public
12 private MinecraftServer c;
13 private int d;
14 private int e;
15
16 public EntityTracker(MinecraftServer minecraftserver, int i) {
17 this.c = minecraftserver;
18 this.e = i;
19 this.d = minecraftserver.serverConfigurationManager.a();
20 }
21
22 // CraftBukkit - synchronized
23 public synchronized void track(Entity entity) {
24 if (entity instanceof EntityPlayer) {
25 this.a(entity, 512, 2);
26 EntityPlayer entityplayer = (EntityPlayer) entity;
27 Iterator iterator = this.a.iterator();
28
29 while (iterator.hasNext()) {
30 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
31
32 if (entitytrackerentry.tracker != entityplayer) {
33 entitytrackerentry.b(entityplayer);
34 }
35 }
36 } else if (entity instanceof EntityFish) {
37 this.a(entity, 64, 5, true);
38 } else if (entity instanceof EntityArrow) {
39 // uberbukkit start - default to early beta values for compatibility. doesn't really affect b1.7.3
40 this.a(entity, 64, 5, true);
41 } else if (entity instanceof EntitySnowball) {
42 this.a(entity, 64, 5, true);
43 } else if (entity instanceof EntityFireball) {
44 this.a(entity, 64, 5, true);
45 } else if (entity instanceof EntityEgg) {
46 this.a(entity, 64, 10, true);
47 // uberbukkit end
48 } else if (entity instanceof EntityItem) {
49 this.a(entity, 64, 20, true);
50 } else if (entity instanceof EntityMinecart) {
51 this.a(entity, 80, 3, true); // uberbukkit - backported frequency from 1.0.0
52 } else if (entity instanceof EntityBoat) {
53 this.a(entity, 80, 3, true); // uberbukkit - backported frequency from 1.0.0
54 } else if (entity instanceof EntitySquid) {
55 this.a(entity, 64, 3, true); // uberbukkit - backported frequency from 1.0.0
56 } else if (entity instanceof IAnimal) {
57 this.a(entity, 80, 3, true); // uberbukkit - backported from 1.0.0
58 } else if (entity instanceof EntityTNTPrimed) {
59 this.a(entity, 160, 10, true);
60 } else if (entity instanceof EntityFallingSand) {
61 this.a(entity, 160, 20, true);
62 } else if (entity instanceof EntityPainting) {
63 this.a(entity, 160, Integer.MAX_VALUE, false);
64 }
65 }
66
67 public void a(Entity entity, int i, int j) {
68 this.a(entity, i, j, false);
69 }
70
71 // CraftBukkit - synchronized
72 public synchronized void a(Entity entity, int i, int j, boolean flag) {
73 if (i > this.d) {
74 i = this.d;
75 }
76
77 if (this.b.b(entity.id)) {
78 // CraftBukkit - removed exception throw as tracking an already tracked entity theoretically shouldn't cause any issues.
79 // throw new IllegalStateException("Entity is already tracked!");
80 } else {
81 EntityTrackerEntry entitytrackerentry = new EntityTrackerEntry(entity, i, j, flag);
82
83 this.a.add(entitytrackerentry);
84 this.b.a(entity.id, entitytrackerentry);
85 entitytrackerentry.scanPlayers(this.c.getWorldServer(this.e).players);
86 }
87 }
88
89 // CraftBukkit - synchronized
90 public synchronized void untrackEntity(Entity entity) {
91 if (entity instanceof EntityPlayer) {
92 EntityPlayer entityplayer = (EntityPlayer) entity;
93 Iterator iterator = this.a.iterator();
94
95 while (iterator.hasNext()) {
96 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
97
98 entitytrackerentry.a(entityplayer);
99 }
100 }
101
102 EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) this.b.d(entity.id);
103
104 if (entitytrackerentry1 != null) {
105 this.a.remove(entitytrackerentry1);
106 entitytrackerentry1.a();
107 }
108 }
109
110 // CraftBukkit - synchronized
111 public synchronized void updatePlayers() {
112 ArrayList arraylist = new ArrayList();
113 Iterator iterator = this.a.iterator();
114
115 while (iterator.hasNext()) {
116 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
117
118 entitytrackerentry.track(this.c.getWorldServer(this.e).players);
119 if (entitytrackerentry.m && entitytrackerentry.tracker instanceof EntityPlayer) {
120 arraylist.add((EntityPlayer) entitytrackerentry.tracker);
121 }
122 }
123
124 for (int i = 0; i < arraylist.size(); ++i) {
125 EntityPlayer entityplayer = (EntityPlayer) arraylist.get(i);
126 Iterator iterator1 = this.a.iterator();
127
128 while (iterator1.hasNext()) {
129 EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) iterator1.next();
130
131 if (entitytrackerentry1.tracker != entityplayer) {
132 entitytrackerentry1.b(entityplayer);
133 }
134 }
135 }
136 }
137
138 // CraftBukkit - synchronized
139 public synchronized void a(Entity entity, Packet packet) {
140 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.b.a(entity.id);
141
142 if (entitytrackerentry != null) {
143 entitytrackerentry.a(packet);
144 }
145 }
146
147 // CraftBukkit - synchronized
148 public synchronized void sendPacketToEntity(Entity entity, Packet packet) {
149 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.b.a(entity.id);
150
151 if (entitytrackerentry != null) {
152 entitytrackerentry.b(packet);
153 }
154 }
155
156 // CraftBukkit - synchronized
157 public synchronized void untrackPlayer(EntityPlayer entityplayer) {
158 Iterator iterator = this.a.iterator();
159
160 while (iterator.hasNext()) {
161 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
162
163 entitytrackerentry.c(entityplayer);
164 }
165 }
166
167 // Poseidon
168 // CraftBukkit - synchronized
169 public synchronized void a(EntityPlayer entityplayer, Chunk chunk) {
170 Iterator iterator = this.a.iterator();
171
172 while (iterator.hasNext()) {
173 EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
174
175 if (entitytrackerentry.tracker != entityplayer && entitytrackerentry.tracker.bH == chunk.x && entitytrackerentry.tracker.bJ == chunk.z) {
176 entitytrackerentry.b(entityplayer);
177 }
178 }
179 }
180}