import java.util.Random;
public class OBlockFire extends OBlock {
private int[] a = new int[256];
private int[] b = new int[256];
protected OBlockFire(int paramInt1, int paramInt2) {
super(paramInt1, paramInt2, OMaterial.l);
a(OBlock.x.bl, 5, 20);
a(OBlock.J.bl, 5, 5);
a(OBlock.K.bl, 30, 60);
a(OBlock.an.bl, 30, 20);
a(OBlock.am.bl, 15, 100);
a(OBlock.ab.bl, 30, 60);
a(true);
}
private void a(int paramInt1, int paramInt2, int paramInt3) {
a[paramInt1] = paramInt2;
b[paramInt1] = paramInt3;
}
@Override
public OAxisAlignedBB d(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
return null;
}
@Override
public boolean a() {
return false;
}
@Override
public int a(Random paramRandom) {
return 0;
}
@Override
public int b() {
return 10;
}
@Override
public void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, Random paramRandom) {
int i = paramOWorld.a(paramInt1, paramInt2 - 1, paramInt3) == OBlock.bb.bl ? 1 : 0;
int j = paramOWorld.b(paramInt1, paramInt2, paramInt3);
if (j < 15) {
paramOWorld.c(paramInt1, paramInt2, paramInt3, j + 1);
paramOWorld.c(paramInt1, paramInt2, paramInt3, bl, b());
}
if ((i == 0) && (!g(paramOWorld, paramInt1, paramInt2, paramInt3))) {
if ((!paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3)) || (j > 3))
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
return;
}
if ((i == 0) && (!b((OIBlockAccess)paramOWorld, paramInt1, paramInt2 - 1, paramInt3)) && (j == 15) && (paramRandom.nextInt(4) == 0)) {
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
return;
}
if ((j % 2 == 0) && (j > 2)) {
a(paramOWorld, paramInt1 + 1, paramInt2, paramInt3, 300, paramRandom);
a(paramOWorld, paramInt1 - 1, paramInt2, paramInt3, 300, paramRandom);
a(paramOWorld, paramInt1, paramInt2 - 1, paramInt3, 250, paramRandom);
a(paramOWorld, paramInt1, paramInt2 + 1, paramInt3, 250, paramRandom);
a(paramOWorld, paramInt1, paramInt2, paramInt3 - 1, 300, paramRandom);
a(paramOWorld, paramInt1, paramInt2, paramInt3 + 1, 300, paramRandom);
for (int k = paramInt1 - 1; k <= paramInt1 + 1; k++)
for (int m = paramInt3 - 1; m <= paramInt3 + 1; m++)
for (int n = paramInt2 - 1; n <= paramInt2 + 4; n++) {
if ((k == paramInt1) && (n == paramInt2) && (m == paramInt3))
continue;
int i1 = 100;
if (n > paramInt2 + 1)
i1 += (n - (paramInt2 + 1)) * 100;
int i2 = h(paramOWorld, k, n, m);
if ((i2 > 0) && (paramRandom.nextInt(i1) <= i2)) {
// hMod: dynamic spreading of fire.{
// avg call amount per placed block of fire ~ 4
Block block = new Block(paramOWorld.a(k, n, m), k, n, m);
block.setStatus(3);
if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.IGNITE, block, null))
paramOWorld.e(k, n, m, bl);
}
}
}
if (j == 15) {
a(paramOWorld, paramInt1 + 1, paramInt2, paramInt3, 1, paramRandom);
a(paramOWorld, paramInt1 - 1, paramInt2, paramInt3, 1, paramRandom);
a(paramOWorld, paramInt1, paramInt2 - 1, paramInt3, 1, paramRandom);
a(paramOWorld, paramInt1, paramInt2 + 1, paramInt3, 1, paramRandom);
a(paramOWorld, paramInt1, paramInt2, paramInt3 - 1, 1, paramRandom);
a(paramOWorld, paramInt1, paramInt2, paramInt3 + 1, 1, paramRandom);
}
}
private void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4, Random paramRandom) {
int i = b[paramOWorld.a(paramInt1, paramInt2, paramInt3)];
if (paramRandom.nextInt(paramInt4) < i) {
int j = paramOWorld.a(paramInt1, paramInt2, paramInt3) == OBlock.am.bl ? 1 : 0;
if (paramRandom.nextInt(2) == 0) {
// hMod: VERY SLOW dynamic spreading of fire.
Block block = new Block(paramOWorld.a(paramInt1, paramInt2, paramInt3), paramInt1, paramInt2, paramInt3);
block.setStatus(3);
if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.IGNITE, block, null))
paramOWorld.e(paramInt1, paramInt2, paramInt3, bl);
} else {
// hMod: fire destroying a block.
Block block = new Block(paramOWorld.a(paramInt1, paramInt2, paramInt3), paramInt1, paramInt2, paramInt3);
block.setStatus(4);
if (!(Boolean) etc.getLoader().callHook(PluginLoader.Hook.IGNITE, block, null))
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
}
if (j != 0)
OBlock.am.b(paramOWorld, paramInt1, paramInt2, paramInt3, 0);
}
}
private boolean g(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
if (b((OIBlockAccess)paramOWorld, paramInt1 + 1, paramInt2, paramInt3))
return true;
if (b((OIBlockAccess)paramOWorld, paramInt1 - 1, paramInt2, paramInt3))
return true;
if (b((OIBlockAccess)paramOWorld, paramInt1, paramInt2 - 1, paramInt3))
return true;
if (b((OIBlockAccess)paramOWorld, paramInt1, paramInt2 + 1, paramInt3))
return true;
if (b((OIBlockAccess)paramOWorld, paramInt1, paramInt2, paramInt3 - 1))
return true;
return b((OIBlockAccess)paramOWorld, paramInt1, paramInt2, paramInt3 + 1);
}
private int h(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
int i = 0;
if (!paramOWorld.e(paramInt1, paramInt2, paramInt3))
return 0;
i = f(paramOWorld, paramInt1 + 1, paramInt2, paramInt3, i);
i = f(paramOWorld, paramInt1 - 1, paramInt2, paramInt3, i);
i = f(paramOWorld, paramInt1, paramInt2 - 1, paramInt3, i);
i = f(paramOWorld, paramInt1, paramInt2 + 1, paramInt3, i);
i = f(paramOWorld, paramInt1, paramInt2, paramInt3 - 1, i);
i = f(paramOWorld, paramInt1, paramInt2, paramInt3 + 1, i);
return i;
}
@Override
public boolean d() {
return false;
}
public boolean b(OIBlockAccess paramOIBlockAccess, int paramInt1, int paramInt2, int paramInt3) {
return a[paramOIBlockAccess.a(paramInt1, paramInt2, paramInt3)] > 0;
}
public int f(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
int i = a[paramOWorld.a(paramInt1, paramInt2, paramInt3)];
if (i > paramInt4)
return i;
return paramInt4;
}
@Override
public boolean a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
return (paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3)) || (g(paramOWorld, paramInt1, paramInt2, paramInt3));
}
@Override
public void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
if ((!paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3)) && (!g(paramOWorld, paramInt1, paramInt2, paramInt3))) {
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
return;
}
}
@Override
public void e(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
if ((paramOWorld.a(paramInt1, paramInt2 - 1, paramInt3) == OBlock.ap.bl) && (OBlock.be.a_(paramOWorld, paramInt1, paramInt2, paramInt3)))
return;
if ((!paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3)) && (!g(paramOWorld, paramInt1, paramInt2, paramInt3))) {
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
return;
}
paramOWorld.c(paramInt1, paramInt2, paramInt3, bl, b());
}
}