import java.util.Random;
public class OBlockLeaves extends OBlockLeavesBase {
private int c;
int[] a;
protected OBlockLeaves(int paramInt1, int paramInt2) {
super(paramInt1, paramInt2, OMaterial.h, false);
c = paramInt2;
a(true);
}
@Override
public void b(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
int i = 1;
int j = i + 1;
if (paramOWorld.a(paramInt1 - j, paramInt2 - j, paramInt3 - j, paramInt1 + j, paramInt2 + j, paramInt3 + j))
for (int k = -i; k <= i; k++)
for (int m = -i; m <= i; m++)
for (int n = -i; n <= i; n++) {
int i1 = paramOWorld.a(paramInt1 + k, paramInt2 + m, paramInt3 + n);
if (i1 == OBlock.K.bl) {
int i2 = paramOWorld.b(paramInt1 + k, paramInt2 + m, paramInt3 + n);
paramOWorld.d(paramInt1 + k, paramInt2 + m, paramInt3 + n, i2 | 0x4);
}
}
}
@Override
public void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, Random paramRandom) {
if (paramOWorld.t)
return;
int i = paramOWorld.b(paramInt1, paramInt2, paramInt3);
if ((i & 0x4) != 0) {
int j = 4;
int k = j + 1;
int m = 32;
int n = m * m;
int i1 = m / 2;
if (a == null)
a = new int[m * m * m];
if (paramOWorld.a(paramInt1 - k, paramInt2 - k, paramInt3 - k, paramInt1 + k, paramInt2 + k, paramInt3 + k)) {
int i3;
int i4;
int i5;
for (int i2 = -j; i2 <= j; i2++)
for (i3 = -j; i3 <= j; i3++)
for (i4 = -j; i4 <= j; i4++) {
i5 = paramOWorld.a(paramInt1 + i2, paramInt2 + i3, paramInt3 + i4);
if (i5 == OBlock.J.bl)
a[((i2 + i1) * n + (i3 + i1) * m + (i4 + i1))] = 0;
else if (i5 == OBlock.K.bl)
a[((i2 + i1) * n + (i3 + i1) * m + (i4 + i1))] = -2;
else
a[((i2 + i1) * n + (i3 + i1) * m + (i4 + i1))] = -1;
}
for (int i2 = 1; i2 <= 4; i2++)
for (i3 = -j; i3 <= j; i3++)
for (i4 = -j; i4 <= j; i4++)
for (i5 = -j; i5 <= j; i5++)
if (a[((i3 + i1) * n + (i4 + i1) * m + (i5 + i1))] == i2 - 1) {
if (a[((i3 + i1 - 1) * n + (i4 + i1) * m + (i5 + i1))] == -2)
a[((i3 + i1 - 1) * n + (i4 + i1) * m + (i5 + i1))] = i2;
if (a[((i3 + i1 + 1) * n + (i4 + i1) * m + (i5 + i1))] == -2)
a[((i3 + i1 + 1) * n + (i4 + i1) * m + (i5 + i1))] = i2;
if (a[((i3 + i1) * n + (i4 + i1 - 1) * m + (i5 + i1))] == -2)
a[((i3 + i1) * n + (i4 + i1 - 1) * m + (i5 + i1))] = i2;
if (a[((i3 + i1) * n + (i4 + i1 + 1) * m + (i5 + i1))] == -2)
a[((i3 + i1) * n + (i4 + i1 + 1) * m + (i5 + i1))] = i2;
if (a[((i3 + i1) * n + (i4 + i1) * m + (i5 + i1 - 1))] == -2)
a[((i3 + i1) * n + (i4 + i1) * m + (i5 + i1 - 1))] = i2;
if (a[((i3 + i1) * n + (i4 + i1) * m + (i5 + i1 + 1))] == -2)
a[((i3 + i1) * n + (i4 + i1) * m + (i5 + i1 + 1))] = i2;
}
}
int i2 = a[(i1 * n + i1 * m + i1)];
if (i2 >= 0)
paramOWorld.c(paramInt1, paramInt2, paramInt3, i & 0xFFFFFFFB);
else
g(paramOWorld, paramInt1, paramInt2, paramInt3);
}
}
private void g(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
// hMod: stop leaves from decaying
Block block = new Block(etc.getServer().getBlockIdAt(paramInt1, paramInt2, paramInt3), paramInt1, paramInt2, paramInt3);
if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.LEAF_DECAY, block)) {
a_(paramOWorld, paramInt1, paramInt2, paramInt3, paramOWorld.b(paramInt1, paramInt2, paramInt3));
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
}
}
@Override
public int a(Random paramRandom) {
return paramRandom.nextInt(16) == 0 ? 1 : 0;
}
@Override
public int a(int paramInt, Random paramRandom) {
return OBlock.y.bl;
}
@Override
public boolean a() {
return !b;
}
@Override
public int a(int paramInt1, int paramInt2) {
if ((paramInt2 & 0x3) == 1)
return bk + 80;
return bk;
}
@Override
public void b(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, OEntity paramOEntity) {
super.b(paramOWorld, paramInt1, paramInt2, paramInt3, paramOEntity);
}
}