Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3public class EntityList {
4
5 private transient EntityListEntry[] a = new EntityListEntry[16];
6 private transient int b;
7 private int c = 12;
8 private final float d = 0.75F;
9 private transient volatile int e;
10
11 public EntityList() {
12 }
13
14 private static int g(int i) {
15 i ^= i >>> 20 ^ i >>> 12;
16 return i ^ i >>> 7 ^ i >>> 4;
17 }
18
19 private static int a(int i, int j) {
20 return i & j - 1;
21 }
22
23 public Object a(int i) {
24 int j = g(i);
25
26 for (EntityListEntry entitylistentry = this.a[a(j, this.a.length)]; entitylistentry != null; entitylistentry = entitylistentry.c) {
27 if (entitylistentry.a == i) {
28 return entitylistentry.b;
29 }
30 }
31
32 return null;
33 }
34
35 public boolean b(int i) {
36 return this.c(i) != null;
37 }
38
39 final EntityListEntry c(int i) {
40 int j = g(i);
41
42 for (EntityListEntry entitylistentry = this.a[a(j, this.a.length)]; entitylistentry != null; entitylistentry = entitylistentry.c) {
43 if (entitylistentry.a == i) {
44 return entitylistentry;
45 }
46 }
47
48 return null;
49 }
50
51 public void a(int i, Object object) {
52 int j = g(i);
53 int k = a(j, this.a.length);
54
55 for (EntityListEntry entitylistentry = this.a[k]; entitylistentry != null; entitylistentry = entitylistentry.c) {
56 if (entitylistentry.a == i) {
57 entitylistentry.b = object;
58 }
59 }
60
61 ++this.e;
62 this.a(j, i, object, k);
63 }
64
65 private void h(int i) {
66 EntityListEntry[] aentitylistentry = this.a;
67 int j = aentitylistentry.length;
68
69 if (j == 1073741824) {
70 this.c = Integer.MAX_VALUE;
71 } else {
72 EntityListEntry[] aentitylistentry1 = new EntityListEntry[i];
73
74 this.a(aentitylistentry1);
75 this.a = aentitylistentry1;
76 this.c = (int) ((float) i * this.d);
77 }
78 }
79
80 private void a(EntityListEntry[] aentitylistentry) {
81 EntityListEntry[] aentitylistentry1 = this.a;
82 int i = aentitylistentry.length;
83
84 for (int j = 0; j < aentitylistentry1.length; ++j) {
85 EntityListEntry entitylistentry = aentitylistentry1[j];
86
87 if (entitylistentry != null) {
88 aentitylistentry1[j] = null;
89
90 EntityListEntry entitylistentry1;
91
92 do {
93 entitylistentry1 = entitylistentry.c;
94 int k = a(entitylistentry.d, i);
95
96 entitylistentry.c = aentitylistentry[k];
97 aentitylistentry[k] = entitylistentry;
98 entitylistentry = entitylistentry1;
99 } while (entitylistentry1 != null);
100 }
101 }
102 }
103
104 public Object d(int i) {
105 EntityListEntry entitylistentry = this.e(i);
106
107 return entitylistentry == null ? null : entitylistentry.b;
108 }
109
110 final EntityListEntry e(int i) {
111 int j = g(i);
112 int k = a(j, this.a.length);
113 EntityListEntry entitylistentry = this.a[k];
114
115 EntityListEntry entitylistentry1;
116 EntityListEntry entitylistentry2;
117
118 for (entitylistentry1 = entitylistentry; entitylistentry1 != null; entitylistentry1 = entitylistentry2) {
119 entitylistentry2 = entitylistentry1.c;
120 if (entitylistentry1.a == i) {
121 ++this.e;
122 --this.b;
123 if (entitylistentry == entitylistentry1) {
124 this.a[k] = entitylistentry2;
125 } else {
126 entitylistentry.c = entitylistentry2;
127 }
128
129 return entitylistentry1;
130 }
131
132 entitylistentry = entitylistentry1;
133 }
134
135 return entitylistentry1;
136 }
137
138 public void a() {
139 ++this.e;
140 EntityListEntry[] aentitylistentry = this.a;
141
142 for (int i = 0; i < aentitylistentry.length; ++i) {
143 aentitylistentry[i] = null;
144 }
145
146 this.b = 0;
147 }
148
149 private void a(int i, int j, Object object, int k) {
150 EntityListEntry entitylistentry = this.a[k];
151
152 this.a[k] = new EntityListEntry(i, j, object, entitylistentry);
153 if (this.b++ >= this.c) {
154 this.h(2 * this.a.length);
155 }
156 }
157
158 static int f(int i) {
159 return g(i);
160 }
161}