import java.util.Random; public class OBlockFlowing extends OBlockFluids { int a = 0; boolean[] b = new boolean[4]; int[] c = new int[4]; protected OBlockFlowing(int paramInt, OMaterial paramOMaterial) { super(paramInt, paramOMaterial); } private void i(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) { int i = paramOWorld.b(paramInt1, paramInt2, paramInt3); paramOWorld.a(paramInt1, paramInt2, paramInt3, bl + 1, i); paramOWorld.b(paramInt1, paramInt2, paramInt3, paramInt1, paramInt2, paramInt3); paramOWorld.g(paramInt1, paramInt2, paramInt3); } @Override public void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, Random paramRandom) { // hMod: Store originating block Block blockFrom = new Block(bl, paramInt1, paramInt2, paramInt3); int i = g(paramOWorld, paramInt1, paramInt2, paramInt3); int j = 1; if ((bw == OMaterial.g) && (!paramOWorld.m.d)) j = 2; int k = 1; int n; if (i > 0) { int m = -100; a = 0; m = e(paramOWorld, paramInt1 - 1, paramInt2, paramInt3, m); m = e(paramOWorld, paramInt1 + 1, paramInt2, paramInt3, m); m = e(paramOWorld, paramInt1, paramInt2, paramInt3 - 1, m); m = e(paramOWorld, paramInt1, paramInt2, paramInt3 + 1, m); n = m + j; if ((n >= 8) || (m < 0)) n = -1; if (g(paramOWorld, paramInt1, paramInt2 + 1, paramInt3) >= 0) { int i1 = g(paramOWorld, paramInt1, paramInt2 + 1, paramInt3); if (i1 >= 8) n = i1; else n = i1 + 8; } if ((a >= 2) && (bw == OMaterial.f)) if (paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3)) n = 0; else if ((paramOWorld.c(paramInt1, paramInt2 - 1, paramInt3) == bw) && (paramOWorld.b(paramInt1, paramInt2, paramInt3) == 0)) n = 0; if ((bw == OMaterial.g) && (i < 8) && (n < 8) && (n > i) && (paramRandom.nextInt(4) != 0)) { n = i; k = 0; } if (n != i) { i = n; if (i < 0) paramOWorld.e(paramInt1, paramInt2, paramInt3, 0); else { paramOWorld.c(paramInt1, paramInt2, paramInt3, i); paramOWorld.c(paramInt1, paramInt2, paramInt3, bl, b()); paramOWorld.h(paramInt1, paramInt2, paramInt3, bl); } } else if (k != 0) i(paramOWorld, paramInt1, paramInt2, paramInt3); } else i(paramOWorld, paramInt1, paramInt2, paramInt3); if (l(paramOWorld, paramInt1, paramInt2 - 1, paramInt3)) { // hMod: downwards flow. Block blockTo = new Block(0, paramInt1, paramInt2 - 1, paramInt3); if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.FLOW, blockFrom, blockTo)) if (i >= 8) paramOWorld.b(paramInt1, paramInt2 - 1, paramInt3, bl, i); else paramOWorld.b(paramInt1, paramInt2 - 1, paramInt3, bl, i + 8); } else if ((i >= 0) && ((i == 0) || (k(paramOWorld, paramInt1, paramInt2 - 1, paramInt3)))) { boolean[] arrayOfBoolean = j(paramOWorld, paramInt1, paramInt2, paramInt3); n = i + j; if (i >= 8) n = 1; if (n >= 8) return; // hMod: sidewards flow. if (arrayOfBoolean[0]) { Block blockTo = new Block(0, paramInt1 - 1, paramInt2, paramInt3); if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.FLOW, blockFrom, blockTo)) f(paramOWorld, paramInt1 - 1, paramInt2, paramInt3, n); } if (arrayOfBoolean[1]) { Block blockTo = new Block(0, paramInt1 + 1, paramInt2, paramInt3); if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.FLOW, blockFrom, blockTo)) f(paramOWorld, paramInt1 + 1, paramInt2, paramInt3, n); } if (arrayOfBoolean[2]) { Block blockTo = new Block(0, paramInt1, paramInt2, paramInt3 - 1); if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.FLOW, blockFrom, blockTo)) f(paramOWorld, paramInt1, paramInt2, paramInt3 - 1, n); } if (arrayOfBoolean[3]) { Block blockTo = new Block(0, paramInt1, paramInt2, paramInt3 + 1); if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.FLOW, blockFrom, blockTo)) f(paramOWorld, paramInt1, paramInt2, paramInt3 + 1, n); } } } private void f(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) { if (l(paramOWorld, paramInt1, paramInt2, paramInt3)) { int i = paramOWorld.a(paramInt1, paramInt2, paramInt3); if (i > 0) if (bw == OMaterial.g) h(paramOWorld, paramInt1, paramInt2, paramInt3); else OBlock.m[i].a_(paramOWorld, paramInt1, paramInt2, paramInt3, paramOWorld.b(paramInt1, paramInt2, paramInt3)); paramOWorld.b(paramInt1, paramInt2, paramInt3, bl, paramInt4); } } private int b(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5) { int i = 1000; for (int j = 0; j < 4; j++) { if (((j == 0) && (paramInt5 == 1)) || ((j == 1) && (paramInt5 == 0)) || ((j == 2) && (paramInt5 == 3)) || ((j == 3) && (paramInt5 == 2))) continue; int k = paramInt1; int m = paramInt2; int n = paramInt3; if (j == 0) k--; if (j == 1) k++; if (j == 2) n--; if (j == 3) n++; if (k(paramOWorld, k, m, n)) continue; if ((paramOWorld.c(k, m, n) == bw) && (paramOWorld.b(k, m, n) == 0)) continue; if (!k(paramOWorld, k, m - 1, n)) return paramInt4; if (paramInt4 < 4) { int i1 = b(paramOWorld, k, m, n, paramInt4 + 1, j); if (i1 >= i) continue; i = i1; } } return i; } private boolean[] j(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) { for (int i = 0; i < 4; i++) { c[i] = 1000; int j = paramInt1; int k = paramInt2; int m = paramInt3; if (i == 0) j--; if (i == 1) j++; if (i == 2) m--; if (i == 3) m++; if (k(paramOWorld, j, k, m)) continue; if ((paramOWorld.c(j, k, m) == bw) && (paramOWorld.b(j, k, m) == 0)) continue; if (!k(paramOWorld, j, k - 1, m)) c[i] = 0; else c[i] = b(paramOWorld, j, k, m, 1, i); } int i = c[0]; for (int j = 1; j < 4; j++) { if (c[j] >= i) continue; i = c[j]; } for (int j = 0; j < 4; j++) b[j] = (c[j] == i ? true : false); return b; } private boolean k(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) { int i = paramOWorld.a(paramInt1, paramInt2, paramInt3); if ((i == OBlock.aE.bl) || (i == OBlock.aL.bl) || (i == OBlock.aD.bl) || (i == OBlock.aF.bl) || (i == OBlock.aX.bl)) return true; if (i == 0) return false; OMaterial localOMaterial = OBlock.m[i].bw; return localOMaterial.a(); } protected int e(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) { int i = g(paramOWorld, paramInt1, paramInt2, paramInt3); if (i < 0) return paramInt4; if (i == 0) a += 1; if (i >= 8) i = 0; return (paramInt4 < 0) || (i < paramInt4) ? i : paramInt4; } private boolean l(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) { // hMod: See if this liquid can destroy this block. Block block = new Block(paramOWorld.a(paramInt1, paramInt2, paramInt3), paramInt1, paramInt2, paramInt3); PluginLoader.HookResult ret = (PluginLoader.HookResult) etc.getLoader().callHook(PluginLoader.Hook.LIQUID_DESTROY, bl, block); if (ret == PluginLoader.HookResult.PREVENT_ACTION) return false; else if (ret == PluginLoader.HookResult.ALLOW_ACTION) return true; OMaterial localOMaterial = paramOWorld.c(paramInt1, paramInt2, paramInt3); if (localOMaterial == bw) return false; if (localOMaterial == OMaterial.g) return false; return !k(paramOWorld, paramInt1, paramInt2, paramInt3); } @Override public void e(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) { super.e(paramOWorld, paramInt1, paramInt2, paramInt3); if (paramOWorld.a(paramInt1, paramInt2, paramInt3) == bl) paramOWorld.c(paramInt1, paramInt2, paramInt3, bl, b()); } }