Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 359 lines 11 kB view raw
1package net.minecraft.server; 2 3import java.util.ArrayList; 4import java.util.List; 5 6class MinecartTrackLogic { 7 8 private World b; 9 private int c; 10 private int d; 11 private int e; 12 private final boolean f; 13 private List g; 14 15 final BlockMinecartTrack a; 16 17 public MinecartTrackLogic(BlockMinecartTrack blockminecarttrack, World world, int i, int j, int k) { 18 this.a = blockminecarttrack; 19 this.g = new ArrayList(); 20 this.b = world; 21 this.c = i; 22 this.d = j; 23 this.e = k; 24 int l = world.getTypeId(i, j, k); 25 int i1 = world.getData(i, j, k); 26 27 if (BlockMinecartTrack.a((BlockMinecartTrack) Block.byId[l])) { 28 this.f = true; 29 i1 &= -9; 30 } else { 31 this.f = false; 32 } 33 34 this.a(i1); 35 } 36 37 private void a(int i) { 38 this.g.clear(); 39 if (i == 0) { 40 this.g.add(new ChunkPosition(this.c, this.d, this.e - 1)); 41 this.g.add(new ChunkPosition(this.c, this.d, this.e + 1)); 42 } else if (i == 1) { 43 this.g.add(new ChunkPosition(this.c - 1, this.d, this.e)); 44 this.g.add(new ChunkPosition(this.c + 1, this.d, this.e)); 45 } else if (i == 2) { 46 this.g.add(new ChunkPosition(this.c - 1, this.d, this.e)); 47 this.g.add(new ChunkPosition(this.c + 1, this.d + 1, this.e)); 48 } else if (i == 3) { 49 this.g.add(new ChunkPosition(this.c - 1, this.d + 1, this.e)); 50 this.g.add(new ChunkPosition(this.c + 1, this.d, this.e)); 51 } else if (i == 4) { 52 this.g.add(new ChunkPosition(this.c, this.d + 1, this.e - 1)); 53 this.g.add(new ChunkPosition(this.c, this.d, this.e + 1)); 54 } else if (i == 5) { 55 this.g.add(new ChunkPosition(this.c, this.d, this.e - 1)); 56 this.g.add(new ChunkPosition(this.c, this.d + 1, this.e + 1)); 57 } else if (i == 6) { 58 this.g.add(new ChunkPosition(this.c + 1, this.d, this.e)); 59 this.g.add(new ChunkPosition(this.c, this.d, this.e + 1)); 60 } else if (i == 7) { 61 this.g.add(new ChunkPosition(this.c - 1, this.d, this.e)); 62 this.g.add(new ChunkPosition(this.c, this.d, this.e + 1)); 63 } else if (i == 8) { 64 this.g.add(new ChunkPosition(this.c - 1, this.d, this.e)); 65 this.g.add(new ChunkPosition(this.c, this.d, this.e - 1)); 66 } else if (i == 9) { 67 this.g.add(new ChunkPosition(this.c + 1, this.d, this.e)); 68 this.g.add(new ChunkPosition(this.c, this.d, this.e - 1)); 69 } 70 } 71 72 private void a() { 73 for (int i = 0; i < this.g.size(); ++i) { 74 MinecartTrackLogic minecarttracklogic = this.a((ChunkPosition) this.g.get(i)); 75 76 if (minecarttracklogic != null && minecarttracklogic.b(this)) { 77 this.g.set(i, new ChunkPosition(minecarttracklogic.c, minecarttracklogic.d, minecarttracklogic.e)); 78 } else { 79 this.g.remove(i--); 80 } 81 } 82 } 83 84 private boolean a(int i, int j, int k) { 85 return BlockMinecartTrack.g(this.b, i, j, k) ? true : (BlockMinecartTrack.g(this.b, i, j + 1, k) ? true : BlockMinecartTrack.g(this.b, i, j - 1, k)); 86 } 87 88 private MinecartTrackLogic a(ChunkPosition chunkposition) { 89 return BlockMinecartTrack.g(this.b, chunkposition.x, chunkposition.y, chunkposition.z) ? new MinecartTrackLogic(this.a, this.b, chunkposition.x, chunkposition.y, chunkposition.z) : (BlockMinecartTrack.g(this.b, chunkposition.x, chunkposition.y + 1, chunkposition.z) ? new MinecartTrackLogic(this.a, this.b, chunkposition.x, chunkposition.y + 1, chunkposition.z) : (BlockMinecartTrack.g(this.b, chunkposition.x, chunkposition.y - 1, chunkposition.z) ? new MinecartTrackLogic(this.a, this.b, chunkposition.x, chunkposition.y - 1, chunkposition.z) : null)); 90 } 91 92 private boolean b(MinecartTrackLogic minecarttracklogic) { 93 for (int i = 0; i < this.g.size(); ++i) { 94 ChunkPosition chunkposition = (ChunkPosition) this.g.get(i); 95 96 if (chunkposition.x == minecarttracklogic.c && chunkposition.z == minecarttracklogic.e) { 97 return true; 98 } 99 } 100 101 return false; 102 } 103 104 private boolean b(int i, int j, int k) { 105 for (int l = 0; l < this.g.size(); ++l) { 106 ChunkPosition chunkposition = (ChunkPosition) this.g.get(l); 107 108 if (chunkposition.x == i && chunkposition.z == k) { 109 return true; 110 } 111 } 112 113 return false; 114 } 115 116 private int b() { 117 int i = 0; 118 119 if (this.a(this.c, this.d, this.e - 1)) { 120 ++i; 121 } 122 123 if (this.a(this.c, this.d, this.e + 1)) { 124 ++i; 125 } 126 127 if (this.a(this.c - 1, this.d, this.e)) { 128 ++i; 129 } 130 131 if (this.a(this.c + 1, this.d, this.e)) { 132 ++i; 133 } 134 135 return i; 136 } 137 138 private boolean c(MinecartTrackLogic minecarttracklogic) { 139 if (this.b(minecarttracklogic)) { 140 return true; 141 } else if (this.g.size() == 2) { 142 return false; 143 } else if (this.g.size() == 0) { 144 return true; 145 } else { 146 ChunkPosition chunkposition = (ChunkPosition) this.g.get(0); 147 148 return minecarttracklogic.d == this.d && chunkposition.y == this.d ? true : true; 149 } 150 } 151 152 private void d(MinecartTrackLogic minecarttracklogic) { 153 this.g.add(new ChunkPosition(minecarttracklogic.c, minecarttracklogic.d, minecarttracklogic.e)); 154 boolean flag = this.b(this.c, this.d, this.e - 1); 155 boolean flag1 = this.b(this.c, this.d, this.e + 1); 156 boolean flag2 = this.b(this.c - 1, this.d, this.e); 157 boolean flag3 = this.b(this.c + 1, this.d, this.e); 158 byte b0 = -1; 159 160 if (flag || flag1) { 161 b0 = 0; 162 } 163 164 if (flag2 || flag3) { 165 b0 = 1; 166 } 167 168 if (!this.f) { 169 if (flag1 && flag3 && !flag && !flag2) { 170 b0 = 6; 171 } 172 173 if (flag1 && flag2 && !flag && !flag3) { 174 b0 = 7; 175 } 176 177 if (flag && flag2 && !flag1 && !flag3) { 178 b0 = 8; 179 } 180 181 if (flag && flag3 && !flag1 && !flag2) { 182 b0 = 9; 183 } 184 } 185 186 if (b0 == 0) { 187 if (BlockMinecartTrack.g(this.b, this.c, this.d + 1, this.e - 1)) { 188 b0 = 4; 189 } 190 191 if (BlockMinecartTrack.g(this.b, this.c, this.d + 1, this.e + 1)) { 192 b0 = 5; 193 } 194 } 195 196 if (b0 == 1) { 197 if (BlockMinecartTrack.g(this.b, this.c + 1, this.d + 1, this.e)) { 198 b0 = 2; 199 } 200 201 if (BlockMinecartTrack.g(this.b, this.c - 1, this.d + 1, this.e)) { 202 b0 = 3; 203 } 204 } 205 206 if (b0 < 0) { 207 b0 = 0; 208 } 209 210 int i = b0; 211 212 if (this.f) { 213 i = this.b.getData(this.c, this.d, this.e) & 8 | b0; 214 } 215 216 this.b.setData(this.c, this.d, this.e, i); 217 } 218 219 private boolean c(int i, int j, int k) { 220 MinecartTrackLogic minecarttracklogic = this.a(new ChunkPosition(i, j, k)); 221 222 if (minecarttracklogic == null) { 223 return false; 224 } else { 225 minecarttracklogic.a(); 226 return minecarttracklogic.c(this); 227 } 228 } 229 230 public void a(boolean flag, boolean flag1) { 231 boolean flag2 = this.c(this.c, this.d, this.e - 1); 232 boolean flag3 = this.c(this.c, this.d, this.e + 1); 233 boolean flag4 = this.c(this.c - 1, this.d, this.e); 234 boolean flag5 = this.c(this.c + 1, this.d, this.e); 235 byte b0 = -1; 236 237 if ((flag2 || flag3) && !flag4 && !flag5) { 238 b0 = 0; 239 } 240 241 if ((flag4 || flag5) && !flag2 && !flag3) { 242 b0 = 1; 243 } 244 245 if (!this.f) { 246 if (flag3 && flag5 && !flag2 && !flag4) { 247 b0 = 6; 248 } 249 250 if (flag3 && flag4 && !flag2 && !flag5) { 251 b0 = 7; 252 } 253 254 if (flag2 && flag4 && !flag3 && !flag5) { 255 b0 = 8; 256 } 257 258 if (flag2 && flag5 && !flag3 && !flag4) { 259 b0 = 9; 260 } 261 } 262 263 if (b0 == -1) { 264 if (flag2 || flag3) { 265 b0 = 0; 266 } 267 268 if (flag4 || flag5) { 269 b0 = 1; 270 } 271 272 if (!this.f) { 273 if (flag) { 274 if (flag3 && flag5) { 275 b0 = 6; 276 } 277 278 if (flag4 && flag3) { 279 b0 = 7; 280 } 281 282 if (flag5 && flag2) { 283 b0 = 9; 284 } 285 286 if (flag2 && flag4) { 287 b0 = 8; 288 } 289 } else { 290 if (flag2 && flag4) { 291 b0 = 8; 292 } 293 294 if (flag5 && flag2) { 295 b0 = 9; 296 } 297 298 if (flag4 && flag3) { 299 b0 = 7; 300 } 301 302 if (flag3 && flag5) { 303 b0 = 6; 304 } 305 } 306 } 307 } 308 309 if (b0 == 0) { 310 if (BlockMinecartTrack.g(this.b, this.c, this.d + 1, this.e - 1)) { 311 b0 = 4; 312 } 313 314 if (BlockMinecartTrack.g(this.b, this.c, this.d + 1, this.e + 1)) { 315 b0 = 5; 316 } 317 } 318 319 if (b0 == 1) { 320 if (BlockMinecartTrack.g(this.b, this.c + 1, this.d + 1, this.e)) { 321 b0 = 2; 322 } 323 324 if (BlockMinecartTrack.g(this.b, this.c - 1, this.d + 1, this.e)) { 325 b0 = 3; 326 } 327 } 328 329 if (b0 < 0) { 330 b0 = 0; 331 } 332 333 this.a(b0); 334 int i = b0; 335 336 if (this.f) { 337 i = this.b.getData(this.c, this.d, this.e) & 8 | b0; 338 } 339 340 if (flag1 || this.b.getData(this.c, this.d, this.e) != i) { 341 this.b.setData(this.c, this.d, this.e, i); 342 343 for (int j = 0; j < this.g.size(); ++j) { 344 MinecartTrackLogic minecarttracklogic = this.a((ChunkPosition) this.g.get(j)); 345 346 if (minecarttracklogic != null) { 347 minecarttracklogic.a(); 348 if (minecarttracklogic.c(this)) { 349 minecarttracklogic.d(this); 350 } 351 } 352 } 353 } 354 } 355 356 static int a(MinecartTrackLogic minecarttracklogic) { 357 return minecarttracklogic.b(); 358 } 359}