Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3import uk.betacraft.uberbukkit.UberbukkitConfig;
4
5public class ChunkCache implements IBlockAccess {
6
7 private int a;
8 private int b;
9 private Chunk[][] c;
10 private World d;
11
12 public ChunkCache(World world, int i, int j, int k, int l, int i1, int j1) {
13 this.d = world;
14 this.a = i >> 4;
15 this.b = k >> 4;
16 int k1 = l >> 4;
17 int l1 = j1 >> 4;
18
19 this.c = new Chunk[k1 - this.a + 1][l1 - this.b + 1];
20
21 for (int i2 = this.a; i2 <= k1; ++i2) {
22 for (int j2 = this.b; j2 <= l1; ++j2) {
23 this.c[i2 - this.a][j2 - this.b] = world.getChunkAt(i2, j2);
24 }
25 }
26 }
27
28 public int getTypeId(int i, int j, int k) {
29 if (j < 0) {
30 return 0;
31 } else if (j >= 128) {
32 return 0;
33 } else {
34 int l = (i >> 4) - this.a;
35 int i1 = (k >> 4) - this.b;
36
37 if (l >= 0 && l < this.c.length && i1 >= 0 && i1 < this.c[l].length) {
38 Chunk chunk = this.c[l][i1];
39
40 return chunk == null ? 0 : chunk.getTypeId(i & 15, j, k & 15);
41 } else {
42 return 0;
43 }
44 }
45 }
46
47 public TileEntity getTileEntity(int i, int j, int k) {
48 int l = (i >> 4) - this.a;
49 int i1 = (k >> 4) - this.b;
50
51 return this.c[l][i1].d(i & 15, j, k & 15);
52 }
53
54 public int getData(int i, int j, int k) {
55 if (j < 0) {
56 return 0;
57 } else if (j >= 128) {
58 return 0;
59 } else {
60 int l = (i >> 4) - this.a;
61 int i1 = (k >> 4) - this.b;
62
63 return this.c[l][i1].getData(i & 15, j, k & 15);
64 }
65 }
66
67 public Material getMaterial(int i, int j, int k) {
68 int l = this.getTypeId(i, j, k);
69
70 return l == 0 ? Material.AIR : Block.byId[l].material;
71 }
72
73 public boolean p(int i, int j, int k) {
74 Block block = Block.byId[this.getTypeId(i, j, k)];
75
76 return block == null ? false : block.a();
77 }
78
79 public boolean e(int i, int j, int k) {
80 if (UberbukkitConfig.getInstance().getBoolean("mechanics.pre_b1_6_block_opacity", false)) {
81 return this.p(i, j, k);
82 }
83 Block block = Block.byId[this.getTypeId(i, j, k)];
84
85 return block == null ? false : block.material.isSolid() && block.b();
86 }
87}