I haven't debugged the runes Boolean. It works fine, the problem isn't weather the runes are found. It is to do with the client and server sides of spawning the entity.
Plus I had to add another check to that Boolean...
public boolean checkRunes(World world, int x, int y, int z)
{
int[][] pos = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 }, { 1, 1 }, { -1, 1 }, { 1, -1 }, { -1, -1 } };
ArrayList<Boolean> b = new ArrayList<Boolean>();
for (int i = 0; i < 8; ++i)
{
if (world.getBlock(x + pos[i][0], y, z + pos[i][1]) == BlockRegistry.BlockSpiritRune) b.add(true);
else b.add(false);
}
if (world.getBlock(x, y, z) == Blocks.air)
{
b.add(true);
}
else b.add(false);
return !b.contains(false);
}