Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3public class MetadataChunkBlock {
4
5 public final EnumSkyBlock a;
6 public int b;
7 public int c;
8 public int d;
9 public int e;
10 public int f;
11 public int g;
12
13 public MetadataChunkBlock(EnumSkyBlock enumskyblock, int i, int j, int k, int l, int i1, int j1) {
14 this.a = enumskyblock;
15 this.b = i;
16 this.c = j;
17 this.d = k;
18 this.e = l;
19 this.f = i1;
20 this.g = j1;
21 }
22
23 public void a(World world) {
24 int i = this.e - this.b + 1;
25 int j = this.f - this.c + 1;
26 int k = this.g - this.d + 1;
27 int l = i * j * k;
28
29 if (l > '\u8000') {
30 System.out.println("Light too large, skipping!");
31 } else {
32 int i1 = 0;
33 int j1 = 0;
34 boolean flag = false;
35 boolean flag1 = false;
36
37 for (int k1 = this.b; k1 <= this.e; ++k1) {
38 for (int l1 = this.d; l1 <= this.g; ++l1) {
39 int i2 = k1 >> 4;
40 int j2 = l1 >> 4;
41 boolean flag2 = false;
42
43 if (flag && i2 == i1 && j2 == j1) {
44 flag2 = flag1;
45 } else {
46 flag2 = world.areChunksLoaded(k1, 0, l1, 1);
47 if (flag2) {
48 Chunk chunk = world.getChunkAt(k1 >> 4, l1 >> 4);
49
50 if (chunk.isEmpty()) {
51 flag2 = false;
52 }
53 }
54
55 flag1 = flag2;
56 i1 = i2;
57 j1 = j2;
58 }
59
60 if (flag2) {
61 if (this.c < 0) {
62 this.c = 0;
63 }
64
65 if (this.f >= 128) {
66 this.f = 127;
67 }
68
69 for (int k2 = this.c; k2 <= this.f; ++k2) {
70 int l2 = world.a(this.a, k1, k2, l1);
71 boolean flag3 = false;
72 int i3 = world.getTypeId(k1, k2, l1);
73 int j3 = Block.q[i3];
74
75 if (j3 == 0) {
76 j3 = 1;
77 }
78
79 int k3 = 0;
80
81 if (this.a == EnumSkyBlock.SKY) {
82 if (world.m(k1, k2, l1)) {
83 k3 = 15;
84 }
85 } else if (this.a == EnumSkyBlock.BLOCK) {
86 k3 = Block.s[i3];
87 }
88
89 int l3;
90 int i4;
91
92 if (j3 >= 15 && k3 == 0) {
93 i4 = 0;
94 } else {
95 l3 = world.a(this.a, k1 - 1, k2, l1);
96 int j4 = world.a(this.a, k1 + 1, k2, l1);
97 int k4 = world.a(this.a, k1, k2 - 1, l1);
98 int l4 = world.a(this.a, k1, k2 + 1, l1);
99 int i5 = world.a(this.a, k1, k2, l1 - 1);
100 int j5 = world.a(this.a, k1, k2, l1 + 1);
101
102 i4 = l3;
103 if (j4 > l3) {
104 i4 = j4;
105 }
106
107 if (k4 > i4) {
108 i4 = k4;
109 }
110
111 if (l4 > i4) {
112 i4 = l4;
113 }
114
115 if (i5 > i4) {
116 i4 = i5;
117 }
118
119 if (j5 > i4) {
120 i4 = j5;
121 }
122
123 i4 -= j3;
124 if (i4 < 0) {
125 i4 = 0;
126 }
127
128 if (k3 > i4) {
129 i4 = k3;
130 }
131 }
132
133 if (l2 != i4) {
134 world.b(this.a, k1, k2, l1, i4);
135 l3 = i4 - 1;
136 if (l3 < 0) {
137 l3 = 0;
138 }
139
140 world.a(this.a, k1 - 1, k2, l1, l3);
141 world.a(this.a, k1, k2 - 1, l1, l3);
142 world.a(this.a, k1, k2, l1 - 1, l3);
143 if (k1 + 1 >= this.e) {
144 world.a(this.a, k1 + 1, k2, l1, l3);
145 }
146
147 if (k2 + 1 >= this.f) {
148 world.a(this.a, k1, k2 + 1, l1, l3);
149 }
150
151 if (l1 + 1 >= this.g) {
152 world.a(this.a, k1, k2, l1 + 1, l3);
153 }
154 }
155 }
156 }
157 }
158 }
159 }
160 }
161
162 public boolean a(int i, int j, int k, int l, int i1, int j1) {
163 if (i >= this.b && j >= this.c && k >= this.d && l <= this.e && i1 <= this.f && j1 <= this.g) {
164 return true;
165 } else {
166 byte b0 = 1;
167
168 if (i >= this.b - b0 && j >= this.c - b0 && k >= this.d - b0 && l <= this.e + b0 && i1 <= this.f + b0 && j1 <= this.g + b0) {
169 int k1 = this.e - this.b;
170 int l1 = this.f - this.c;
171 int i2 = this.g - this.d;
172
173 if (i > this.b) {
174 i = this.b;
175 }
176
177 if (j > this.c) {
178 j = this.c;
179 }
180
181 if (k > this.d) {
182 k = this.d;
183 }
184
185 if (l < this.e) {
186 l = this.e;
187 }
188
189 if (i1 < this.f) {
190 i1 = this.f;
191 }
192
193 if (j1 < this.g) {
194 j1 = this.g;
195 }
196
197 int j2 = l - i;
198 int k2 = i1 - j;
199 int l2 = j1 - k;
200 int i3 = k1 * l1 * i2;
201 int j3 = j2 * k2 * l2;
202
203 if (j3 - i3 <= 2) {
204 this.b = i;
205 this.c = j;
206 this.d = k;
207 this.e = l;
208 this.f = i1;
209 this.g = j1;
210 return true;
211 }
212 }
213
214 return false;
215 }
216 }
217}