Commits
durron597 authored ce271f8abca
1 1 | package net.minecraft.server; |
2 2 | |
3 + | |
3 4 | import java.util.Random; |
4 5 | |
5 6 | import org.bukkit.BlockFace; |
6 7 | import org.bukkit.craftbukkit.CraftBlock; |
7 8 | import org.bukkit.event.Event.Type; |
8 9 | import org.bukkit.event.block.BlockFromToEvent; |
9 10 | |
10 - | public class BlockFlowing extends BlockFluids |
11 - | { |
11 + | public class BlockFlowing extends BlockFluids { |
12 + | |
13 + | int a; |
14 + | boolean b[]; |
15 + | int c[]; |
12 16 | |
13 - | protected BlockFlowing(int i1, Material material) |
14 - | { |
17 + | protected BlockFlowing(int i1, Material material) { |
15 18 | super(i1, material); |
16 19 | a = 0; |
17 20 | b = new boolean[4]; |
18 21 | c = new int[4]; |
19 22 | } |
20 23 | |
21 - | private void i(World world, int i1, int j1, int k1) |
22 - | { |
24 + | private void i(World world, int i1, int j1, int k1) { |
23 25 | int l1 = world.b(i1, j1, k1); |
26 + | |
24 27 | world.a(i1, j1, k1, bh + 1, l1); |
25 28 | world.b(i1, j1, k1, i1, j1, k1); |
26 29 | world.g(i1, j1, k1); |
27 30 | } |
28 31 | |
29 - | public void a(World world, int i1, int j1, int k1, Random random) |
30 - | { |
32 + | public void a(World world, int i1, int j1, int k1, Random random) { |
31 33 | int l1 = g(world, i1, j1, k1); |
32 34 | byte byte0 = 1; |
33 - | if(bs == Material.g && !world.q.d) |
35 + | |
36 + | if (bs == Material.g && !world.q.d) { |
34 37 | byte0 = 2; |
38 + | } |
35 39 | boolean flag = true; |
36 - | if(l1 > 0) |
37 - | { |
40 + | |
41 + | if (l1 > 0) { |
38 42 | int i2 = -100; |
43 + | |
39 44 | a = 0; |
40 45 | i2 = e(world, i1 - 1, j1, k1, i2); |
41 46 | i2 = e(world, i1 + 1, j1, k1, i2); |
42 47 | i2 = e(world, i1, j1, k1 - 1, i2); |
43 48 | i2 = e(world, i1, j1, k1 + 1, i2); |
44 49 | int j2 = i2 + byte0; |
45 - | if(j2 >= 8 || i2 < 0) |
50 + | |
51 + | if (j2 >= 8 || i2 < 0) { |
46 52 | j2 = -1; |
47 - | if(g(world, i1, j1 + 1, k1) >= 0) |
48 - | { |
53 + | } |
54 + | if (g(world, i1, j1 + 1, k1) >= 0) { |
49 55 | int l2 = g(world, i1, j1 + 1, k1); |
50 - | if(l2 >= 8) |
56 + | |
57 + | if (l2 >= 8) { |
51 58 | j2 = l2; |
52 - | else |
59 + | } else { |
53 60 | j2 = l2 + 8; |
61 + | } |
54 62 | } |
55 - | if(a >= 2 && bs == Material.f) |
56 - | if(world.d(i1, j1 - 1, k1)) |
63 + | if (a >= 2 && bs == Material.f) { |
64 + | if (world.d(i1, j1 - 1, k1)) { |
65 + | j2 = 0; |
66 + | } else if (world.c(i1, j1 - 1, k1) == bs && world.b(i1, j1, k1) == 0) { |
57 67 | j2 = 0; |
58 - | else |
59 - | if(world.c(i1, j1 - 1, k1) == bs && world.b(i1, j1, k1) == 0) |
60 - | j2 = 0; |
61 - | if(bs == Material.g && l1 < 8 && j2 < 8 && j2 > l1 && random.nextInt(4) != 0) |
62 - | { |
68 + | } |
69 + | } |
70 + | if (bs == Material.g && l1 < 8 && j2 < 8 && j2 > l1 && random.nextInt(4) != 0) { |
63 71 | j2 = l1; |
64 72 | flag = false; |
65 73 | } |
66 - | if(j2 != l1) |
67 - | { |
74 + | if (j2 != l1) { |
68 75 | l1 = j2; |
69 - | if(l1 < 0) |
70 - | { |
76 + | if (l1 < 0) { |
71 77 | world.d(i1, j1, k1, 0); |
72 - | } else |
73 - | { |
78 + | } else { |
74 79 | world.b(i1, j1, k1, l1); |
75 80 | world.h(i1, j1, k1, bh); |
76 81 | world.g(i1, j1, k1, bh); |
77 82 | } |
78 - | } else |
79 - | if(flag) |
80 - | i(world, i1, j1, k1); |
81 - | } else |
82 - | { |
83 + | } else if (flag) { |
84 + | i(world, i1, j1, k1); |
85 + | } |
86 + | } else { |
83 87 | i(world, i1, j1, k1); |
84 88 | } |
85 - | |
89 + | |
86 90 | // Craftbukkit start |
87 91 | CraftBlock source = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i1, j1, k1); |
88 - | |
89 - | if(l(world, i1, j1 - 1, k1)) |
90 - | { |
92 + | if (l(world, i1, j1 - 1, k1)) { |
91 93 | // Craftbucket send "down" to the server |
92 94 | BlockFromToEvent blockFlow = new BlockFromToEvent(Type.BLOCK_FLOW, source, BlockFace.Down); |
93 95 | ((WorldServer) world).getServer().getPluginManager().callEvent(blockFlow); |
94 96 | |
95 97 | if (!blockFlow.isCancelled()) { |
96 - | if(l1 >= 8) |
98 + | if (l1 >= 8) { |
97 99 | world.b(i1, j1 - 1, k1, bh, l1); |
98 - | else |
100 + | } else { |
99 101 | world.b(i1, j1 - 1, k1, bh, l1 + 8); |
102 + | } |
100 103 | } |
101 - | } else |
102 - | if(l1 >= 0 && (l1 == 0 || k(world, i1, j1 - 1, k1))) |
103 - | { |
104 - | boolean aflag[] = j(world, i1, j1, k1); |
105 - | int k2 = l1 + byte0; |
106 - | if(l1 >= 8) |
107 - | k2 = 1; |
108 - | if(k2 >= 8) |
109 - | return; |
110 - | |
111 - | // Craftbukkit start |
112 - | BlockFace[] faces = new BlockFace[]{ BlockFace.North, BlockFace.South, BlockFace.East, BlockFace.West }; |
113 - | for (BlockFace currentFace : faces) { |
114 - | int index = 0; |
115 - | if (aflag[index]) { |
116 - | BlockFromToEvent event = new BlockFromToEvent(Type.BLOCK_FLOW, source, currentFace); |
117 - | ((WorldServer) world).getServer().getPluginManager().callEvent(event); |
118 - | if (!event.isCancelled()) |
119 - | f(world, i1 + currentFace.getModX(), j1, k1 + currentFace.getModZ(), k2); |
120 - | } |
121 - | index++; |
104 + | } else if (l1 >= 0 && (l1 == 0 || k(world, i1, j1 - 1, k1))) { |
105 + | boolean aflag[] = j(world, i1, j1, k1); |
106 + | int k2 = l1 + byte0; |
107 + | |
108 + | if (l1 >= 8) { |
109 + | k2 = 1; |
110 + | } |
111 + | if (k2 >= 8) { |
112 + | return; |
113 + | } |
114 + | // Craftbukkit all four cardinal directions. Do not change the order! |
115 + | BlockFace[] faces = new BlockFace[]{ BlockFace.North, BlockFace.South, BlockFace.East, BlockFace.West }; |
116 + | for (BlockFace currentFace : faces) { |
117 + | int index = 0; |
118 + | if (aflag[index]) { |
119 + | BlockFromToEvent event = new BlockFromToEvent(Type.BLOCK_FLOW, source, currentFace); |
120 + | ((WorldServer) world).getServer().getPluginManager().callEvent(event); |
121 + | if (!event.isCancelled()) |
122 + | f(world, i1 + currentFace.getModX(), j1, k1 + currentFace.getModZ(), k2); |
122 123 | } |
123 - | // Craftbukkit stop |
124 + | index++; |
124 125 | } |
126 + | } |
127 + | // Craftbukkit stop |
125 128 | } |
126 129 | |
127 - | private void f(World world, int i1, int j1, int k1, int l1) |
128 - | { |
129 - | if(l(world, i1, j1, k1)) |
130 - | { |
130 + | private void f(World world, int i1, int j1, int k1, int l1) { |
131 + | if (l(world, i1, j1, k1)) { |
131 132 | int i2 = world.a(i1, j1, k1); |
132 - | if(i2 > 0) |
133 - | if(bs == Material.g) |
133 + | |
134 + | if (i2 > 0) { |
135 + | if (bs == Material.g) { |
134 136 | h(world, i1, j1, k1); |
135 - | else |
137 + | } else { |
136 138 | Block.m[i2].a_(world, i1, j1, k1, world.b(i1, j1, k1)); |
139 + | } |
140 + | } |
137 141 | world.b(i1, j1, k1, bh, l1); |
138 142 | } |
139 143 | } |
140 144 | |
141 - | private int a(World world, int i1, int j1, int k1, int l1, int i2) |
142 - | { |
145 + | private int a(World world, int i1, int j1, int k1, int l1, int i2) { |
143 146 | int j2 = 1000; |
144 - | for(int k2 = 0; k2 < 4; k2++) |
145 - | { |
146 - | if(k2 == 0 && i2 == 1 || k2 == 1 && i2 == 0 || k2 == 2 && i2 == 3 || k2 == 3 && i2 == 2) |
147 + | |
148 + | for (int k2 = 0; k2 < 4; k2++) { |
149 + | if (k2 == 0 && i2 == 1 || k2 == 1 && i2 == 0 || k2 == 2 && i2 == 3 || k2 == 3 && i2 == 2) { |
147 150 | continue; |
151 + | } |
148 152 | int l2 = i1; |
149 153 | int i3 = j1; |
150 154 | int j3 = k1; |
151 - | if(k2 == 0) |
155 + | |
156 + | if (k2 == 0) { |
152 157 | l2--; |
153 - | if(k2 == 1) |
158 + | } |
159 + | if (k2 == 1) { |
154 160 | l2++; |
155 - | if(k2 == 2) |
161 + | } |
162 + | if (k2 == 2) { |
156 163 | j3--; |
157 - | if(k2 == 3) |
164 + | } |
165 + | if (k2 == 3) { |
158 166 | j3++; |
159 - | if(k(world, l2, i3, j3) || world.c(l2, i3, j3) == bs && world.b(l2, i3, j3) == 0) |
167 + | } |
168 + | if (k(world, l2, i3, j3) || world.c(l2, i3, j3) == bs && world.b(l2, i3, j3) == 0) { |
160 169 | continue; |
161 - | if(!k(world, l2, i3 - 1, j3)) |
170 + | } |
171 + | if (!k(world, l2, i3 - 1, j3)) { |
162 172 | return l1; |
163 - | if(l1 >= 4) |
173 + | } |
174 + | if (l1 >= 4) { |
164 175 | continue; |
176 + | } |
165 177 | int k3 = a(world, l2, i3, j3, l1 + 1, k2); |
166 - | if(k3 < j2) |
178 + | |
179 + | if (k3 < j2) { |
167 180 | j2 = k3; |
181 + | } |
168 182 | } |
169 183 | |
170 184 | return j2; |
171 185 | } |
172 186 | |
173 - | private boolean[] j(World world, int i1, int j1, int k1) |
174 - | { |
175 - | for(int l1 = 0; l1 < 4; l1++) |
176 - | { |
187 + | private boolean[] j(World world, int i1, int j1, int k1) { |
188 + | for (int l1 = 0; l1 < 4; l1++) { |
177 189 | c[l1] = 1000; |
178 190 | int j2 = i1; |
179 191 | int i3 = j1; |
180 192 | int j3 = k1; |
181 - | if(l1 == 0) |
193 + | |
194 + | if (l1 == 0) { |
182 195 | j2--; |
183 - | if(l1 == 1) |
196 + | } |
197 + | if (l1 == 1) { |
184 198 | j2++; |
185 - | if(l1 == 2) |
199 + | } |
200 + | if (l1 == 2) { |
186 201 | j3--; |
187 - | if(l1 == 3) |
202 + | } |
203 + | if (l1 == 3) { |
188 204 | j3++; |
189 - | if(k(world, j2, i3, j3) || world.c(j2, i3, j3) == bs && world.b(j2, i3, j3) == 0) |
205 + | } |
206 + | if (k(world, j2, i3, j3) || world.c(j2, i3, j3) == bs && world.b(j2, i3, j3) == 0) { |
190 207 | continue; |
191 - | if(!k(world, j2, i3 - 1, j3)) |
208 + | } |
209 + | if (!k(world, j2, i3 - 1, j3)) { |
192 210 | c[l1] = 0; |
193 - | else |
211 + | } else { |
194 212 | c[l1] = a(world, j2, i3, j3, 1, l1); |
213 + | } |
195 214 | } |
196 215 | |
197 216 | int i2 = c[0]; |
198 - | for(int k2 = 1; k2 < 4; k2++) |
199 - | if(c[k2] < i2) |
217 + | |
218 + | for (int k2 = 1; k2 < 4; k2++) { |
219 + | if (c[k2] < i2) { |
200 220 | i2 = c[k2]; |
221 + | } |
222 + | } |
201 223 | |
202 - | for(int l2 = 0; l2 < 4; l2++) |
224 + | for (int l2 = 0; l2 < 4; l2++) { |
203 225 | b[l2] = c[l2] == i2; |
226 + | } |
204 227 | |
205 228 | return b; |
206 229 | } |
207 230 | |
208 - | private boolean k(World world, int i1, int j1, int k1) |
209 - | { |
231 + | private boolean k(World world, int i1, int j1, int k1) { |
210 232 | int l1 = world.a(i1, j1, k1); |
211 - | if(l1 == Block.aE.bh || l1 == Block.aL.bh || l1 == Block.aD.bh || l1 == Block.aF.bh || l1 == Block.aX.bh) |
233 + | |
234 + | if (l1 == Block.aE.bh || l1 == Block.aL.bh || l1 == Block.aD.bh || l1 == Block.aF.bh || l1 == Block.aX.bh) { |
212 235 | return true; |
213 - | if(l1 == 0) |
236 + | } |
237 + | if (l1 == 0) { |
214 238 | return false; |
239 + | } |
215 240 | Material material = Block.m[l1].bs; |
241 + | |
216 242 | return material.a(); |
217 243 | } |
218 244 | |
219 - | protected int e(World world, int i1, int j1, int k1, int l1) |
220 - | { |
245 + | protected int e(World world, int i1, int j1, int k1, int l1) { |
221 246 | int i2 = g(world, i1, j1, k1); |
222 - | if(i2 < 0) |
247 + | |
248 + | if (i2 < 0) { |
223 249 | return l1; |
224 - | if(i2 == 0) |
250 + | } |
251 + | if (i2 == 0) { |
225 252 | a++; |
226 - | if(i2 >= 8) |
253 + | } |
254 + | if (i2 >= 8) { |
227 255 | i2 = 0; |
256 + | } |
228 257 | return l1 >= 0 && i2 >= l1 ? l1 : i2; |
229 258 | } |
230 259 | |
231 - | private boolean l(World world, int i1, int j1, int k1) |
232 - | { |
260 + | private boolean l(World world, int i1, int j1, int k1) { |
233 261 | Material material = world.c(i1, j1, k1); |
234 - | if(material == bs) |
262 + | |
263 + | if (material == bs) { |
235 264 | return false; |
236 - | if(material == Material.g) |
265 + | } |
266 + | if (material == Material.g) { |
237 267 | return false; |
238 - | else |
268 + | } else { |
239 269 | return !k(world, i1, j1, k1); |
270 + | } |
240 271 | } |
241 272 | |
242 - | public void e(World world, int i1, int j1, int k1) |
243 - | { |
273 + | public void e(World world, int i1, int j1, int k1) { |
244 274 | super.e(world, i1, j1, k1); |
245 - | if(world.a(i1, j1, k1) == bh) |
275 + | if (world.a(i1, j1, k1) == bh) { |
246 276 | world.h(i1, j1, k1, bh); |
277 + | } |
247 278 | } |
279 + | } |
248 280 | |
249 - | int a; |
250 - | boolean b[]; |
251 - | int c[]; |
252 - | } |