Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 161 lines 4.4 kB view raw
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}