import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class OBlockRedstoneWire extends OBlock {
private boolean a = true;
private Set b = new HashSet();
public OBlockRedstoneWire(int paramInt1, int paramInt2) {
super(paramInt1, paramInt2, OMaterial.n);
a(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);
}
@Override
public int a(int paramInt1, int paramInt2) {
return bk;
}
@Override
public OAxisAlignedBB d(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
return null;
}
@Override
public boolean a() {
return false;
}
@Override
public boolean a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
return paramOWorld.d(paramInt1, paramInt2 - 1, paramInt3);
}
private void g(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
a(paramOWorld, paramInt1, paramInt2, paramInt3, paramInt1, paramInt2, paramInt3);
ArrayList localArrayList = new ArrayList(b);
b.clear();
for (int i = 0; i < localArrayList.size(); i++) {
OChunkPosition localOChunkPosition = (OChunkPosition) localArrayList.get(i);
paramOWorld.h(localOChunkPosition.a, localOChunkPosition.b, localOChunkPosition.c, bl);
}
}
private void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6) {
int i = paramOWorld.b(paramInt1, paramInt2, paramInt3);
int j = 0;
a = false;
boolean bool = paramOWorld.p(paramInt1, paramInt2, paramInt3);
a = true;
int k;
int m;
int n;
if (bool)
j = 15;
else {
for (k = 0; k < 4; k++) {
m = paramInt1;
n = paramInt3;
if (k == 0)
m--;
if (k == 1)
m++;
if (k == 2)
n--;
if (k == 3)
n++;
if ((m != paramInt4) || (paramInt2 != paramInt5) || (n != paramInt6))
j = f(paramOWorld, m, paramInt2, n, j);
if ((paramOWorld.d(m, paramInt2, n)) && (!paramOWorld.d(paramInt1, paramInt2 + 1, paramInt3))) {
if ((m == paramInt4) && (paramInt2 + 1 == paramInt5) && (n == paramInt6))
continue;
j = f(paramOWorld, m, paramInt2 + 1, n, j);
} else if ((!paramOWorld.d(m, paramInt2, n)) && ((m != paramInt4) || (paramInt2 - 1 != paramInt5) || (n != paramInt6)))
j = f(paramOWorld, m, paramInt2 - 1, n, j);
}
if (j > 0)
j--;
else
j = 0;
}
// hMod: Allow redstone wire current changes
if (i != j)
j = (Integer) etc.getLoader().callHook(PluginLoader.Hook.REDSTONE_CHANGE, new Object[] { new Block(bl, paramInt1, paramInt2, paramInt3), i, j });
if (i != j) {
paramOWorld.h = true;
paramOWorld.c(paramInt1, paramInt2, paramInt3, j);
paramOWorld.b(paramInt1, paramInt2, paramInt3, paramInt1, paramInt2, paramInt3);
paramOWorld.h = false;
for (k = 0; k < 4; k++) {
m = paramInt1;
n = paramInt3;
int i1 = paramInt2 - 1;
if (k == 0)
m--;
if (k == 1)
m++;
if (k == 2)
n--;
if (k == 3)
n++;
if (paramOWorld.d(m, paramInt2, n))
i1 += 2;
int i2 = 0;
i2 = f(paramOWorld, m, paramInt2, n, -1);
j = paramOWorld.b(paramInt1, paramInt2, paramInt3);
if (j > 0)
j--;
if ((i2 >= 0) && (i2 != j))
a(paramOWorld, m, paramInt2, n, paramInt1, paramInt2, paramInt3);
i2 = f(paramOWorld, m, i1, n, -1);
j = paramOWorld.b(paramInt1, paramInt2, paramInt3);
if (j > 0)
j--;
if ((i2 >= 0) && (i2 != j))
a(paramOWorld, m, i1, n, paramInt1, paramInt2, paramInt3);
}
if ((i == 0) || (j == 0)) {
b.add(new OChunkPosition(paramInt1, paramInt2, paramInt3));
b.add(new OChunkPosition(paramInt1 - 1, paramInt2, paramInt3));
b.add(new OChunkPosition(paramInt1 + 1, paramInt2, paramInt3));
b.add(new OChunkPosition(paramInt1, paramInt2 - 1, paramInt3));
b.add(new OChunkPosition(paramInt1, paramInt2 + 1, paramInt3));
b.add(new OChunkPosition(paramInt1, paramInt2, paramInt3 - 1));
b.add(new OChunkPosition(paramInt1, paramInt2, paramInt3 + 1));
}
}
}
private void h(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
if (paramOWorld.a(paramInt1, paramInt2, paramInt3) != bl)
return;
paramOWorld.h(paramInt1, paramInt2, paramInt3, bl);
paramOWorld.h(paramInt1 - 1, paramInt2, paramInt3, bl);
paramOWorld.h(paramInt1 + 1, paramInt2, paramInt3, bl);
paramOWorld.h(paramInt1, paramInt2, paramInt3 - 1, bl);
paramOWorld.h(paramInt1, paramInt2, paramInt3 + 1, bl);
paramOWorld.h(paramInt1, paramInt2 - 1, paramInt3, bl);
paramOWorld.h(paramInt1, paramInt2 + 1, paramInt3, bl);
}
@Override
public void e(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
super.e(paramOWorld, paramInt1, paramInt2, paramInt3);
if (paramOWorld.t)
return;
g(paramOWorld, paramInt1, paramInt2, paramInt3);
paramOWorld.h(paramInt1, paramInt2 + 1, paramInt3, bl);
paramOWorld.h(paramInt1, paramInt2 - 1, paramInt3, bl);
h(paramOWorld, paramInt1 - 1, paramInt2, paramInt3);
h(paramOWorld, paramInt1 + 1, paramInt2, paramInt3);
h(paramOWorld, paramInt1, paramInt2, paramInt3 - 1);
h(paramOWorld, paramInt1, paramInt2, paramInt3 + 1);
if (paramOWorld.d(paramInt1 - 1, paramInt2, paramInt3))
h(paramOWorld, paramInt1 - 1, paramInt2 + 1, paramInt3);
else
h(paramOWorld, paramInt1 - 1, paramInt2 - 1, paramInt3);
if (paramOWorld.d(paramInt1 + 1, paramInt2, paramInt3))
h(paramOWorld, paramInt1 + 1, paramInt2 + 1, paramInt3);
else
h(paramOWorld, paramInt1 + 1, paramInt2 - 1, paramInt3);
if (paramOWorld.d(paramInt1, paramInt2, paramInt3 - 1))
h(paramOWorld, paramInt1, paramInt2 + 1, paramInt3 - 1);
else
h(paramOWorld, paramInt1, paramInt2 - 1, paramInt3 - 1);
if (paramOWorld.d(paramInt1, paramInt2, paramInt3 + 1))
h(paramOWorld, paramInt1, paramInt2 + 1, paramInt3 + 1);
else
h(paramOWorld, paramInt1, paramInt2 - 1, paramInt3 + 1);
}
@Override
public void b(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3) {
super.b(paramOWorld, paramInt1, paramInt2, paramInt3);
if (paramOWorld.t)
return;
paramOWorld.h(paramInt1, paramInt2 + 1, paramInt3, bl);
paramOWorld.h(paramInt1, paramInt2 - 1, paramInt3, bl);
g(paramOWorld, paramInt1, paramInt2, paramInt3);
h(paramOWorld, paramInt1 - 1, paramInt2, paramInt3);
h(paramOWorld, paramInt1 + 1, paramInt2, paramInt3);
h(paramOWorld, paramInt1, paramInt2, paramInt3 - 1);
h(paramOWorld, paramInt1, paramInt2, paramInt3 + 1);
if (paramOWorld.d(paramInt1 - 1, paramInt2, paramInt3))
h(paramOWorld, paramInt1 - 1, paramInt2 + 1, paramInt3);
else
h(paramOWorld, paramInt1 - 1, paramInt2 - 1, paramInt3);
if (paramOWorld.d(paramInt1 + 1, paramInt2, paramInt3))
h(paramOWorld, paramInt1 + 1, paramInt2 + 1, paramInt3);
else
h(paramOWorld, paramInt1 + 1, paramInt2 - 1, paramInt3);
if (paramOWorld.d(paramInt1, paramInt2, paramInt3 - 1))
h(paramOWorld, paramInt1, paramInt2 + 1, paramInt3 - 1);
else
h(paramOWorld, paramInt1, paramInt2 - 1, paramInt3 - 1);
if (paramOWorld.d(paramInt1, paramInt2, paramInt3 + 1))
h(paramOWorld, paramInt1, paramInt2 + 1, paramInt3 + 1);
else
h(paramOWorld, paramInt1, paramInt2 - 1, paramInt3 + 1);
}
private int f(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
if (paramOWorld.a(paramInt1, paramInt2, paramInt3) != bl)
return paramInt4;
int i = paramOWorld.b(paramInt1, paramInt2, paramInt3);
if (i > paramInt4)
return i;
return paramInt4;
}
@Override
public void a(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
if (paramOWorld.t)
return;
int i = paramOWorld.b(paramInt1, paramInt2, paramInt3);
boolean bool = a(paramOWorld, paramInt1, paramInt2, paramInt3);
if (!bool) {
a_(paramOWorld, paramInt1, paramInt2, paramInt3, i);
paramOWorld.e(paramInt1, paramInt2, paramInt3, 0);
} else
g(paramOWorld, paramInt1, paramInt2, paramInt3);
super.a(paramOWorld, paramInt1, paramInt2, paramInt3, paramInt4);
}
@Override
public int a(int paramInt, Random paramRandom) {
return OItem.aA.bd;
}
@Override
public boolean c(OWorld paramOWorld, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
if (!a)
return false;
return b((OIBlockAccess) paramOWorld, paramInt1, paramInt2, paramInt3, paramInt4);
}
@Override
public boolean b(OIBlockAccess paramOIBlockAccess, int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
if (!a)
return false;
if (paramOIBlockAccess.b(paramInt1, paramInt2, paramInt3) == 0)
return false;
if (paramInt4 == 1)
return true;
int i = (b(paramOIBlockAccess, paramInt1 - 1, paramInt2, paramInt3)) || ((!paramOIBlockAccess.d(paramInt1 - 1, paramInt2, paramInt3)) && (b(paramOIBlockAccess, paramInt1 - 1, paramInt2 - 1, paramInt3))) ? 1 : 0;
int j = (b(paramOIBlockAccess, paramInt1 + 1, paramInt2, paramInt3)) || ((!paramOIBlockAccess.d(paramInt1 + 1, paramInt2, paramInt3)) && (b(paramOIBlockAccess, paramInt1 + 1, paramInt2 - 1, paramInt3))) ? 1 : 0;
int k = (b(paramOIBlockAccess, paramInt1, paramInt2, paramInt3 - 1)) || ((!paramOIBlockAccess.d(paramInt1, paramInt2, paramInt3 - 1)) && (b(paramOIBlockAccess, paramInt1, paramInt2 - 1, paramInt3 - 1))) ? 1 : 0;
int m = (b(paramOIBlockAccess, paramInt1, paramInt2, paramInt3 + 1)) || ((!paramOIBlockAccess.d(paramInt1, paramInt2, paramInt3 + 1)) && (b(paramOIBlockAccess, paramInt1, paramInt2 - 1, paramInt3 + 1))) ? 1 : 0;
if (!paramOIBlockAccess.d(paramInt1, paramInt2 + 1, paramInt3)) {
if ((paramOIBlockAccess.d(paramInt1 - 1, paramInt2, paramInt3)) && (b(paramOIBlockAccess, paramInt1 - 1, paramInt2 + 1, paramInt3)))
i = 1;
if ((paramOIBlockAccess.d(paramInt1 + 1, paramInt2, paramInt3)) && (b(paramOIBlockAccess, paramInt1 + 1, paramInt2 + 1, paramInt3)))
j = 1;
if ((paramOIBlockAccess.d(paramInt1, paramInt2, paramInt3 - 1)) && (b(paramOIBlockAccess, paramInt1, paramInt2 + 1, paramInt3 - 1)))
k = 1;
if ((paramOIBlockAccess.d(paramInt1, paramInt2, paramInt3 + 1)) && (b(paramOIBlockAccess, paramInt1, paramInt2 + 1, paramInt3 + 1)))
m = 1;
}
if ((k == 0) && (j == 0) && (i == 0) && (m == 0) && (paramInt4 >= 2) && (paramInt4 <= 5))
return true;
if ((paramInt4 == 2) && (k != 0) && (i == 0) && (j == 0))
return true;
if ((paramInt4 == 3) && (m != 0) && (i == 0) && (j == 0))
return true;
if ((paramInt4 == 4) && (i != 0) && (k == 0) && (m == 0))
return true;
return (paramInt4 == 5) && (j != 0) && (k == 0) && (m == 0);
}
@Override
public boolean c() {
return a;
}
public static boolean b(OIBlockAccess paramOIBlockAccess, int paramInt1, int paramInt2, int paramInt3) {
int i = paramOIBlockAccess.a(paramInt1, paramInt2, paramInt3);
if (i == OBlock.av.bl)
return true;
if (i == 0)
return false;
return OBlock.m[i].c();
}
}