bool HasNeighbors( int x, int y, int z ) {
return map.GetBlock( x - 1, y - 1, z - 1 ) != Block.Air ||
map.GetBlock( x, y - 1, z - 1 ) != Block.Air ||
map.GetBlock( x + 1, y - 1, z - 1 ) != Block.Air ||
map.GetBlock( x - 1, y, z - 1 ) != Block.Air ||
map.GetBlock( x, y, z - 1 ) != Block.Air ||
map.GetBlock( x + 1, y, z - 1 ) != Block.Air ||
map.GetBlock( x - 1, y + 1, z - 1 ) != Block.Air ||
map.GetBlock( x, y + 1, z - 1 ) != Block.Air ||
map.GetBlock( x + 1, y + 1, z - 1 ) != Block.Air ||
map.GetBlock( x - 1, y - 1, z ) != Block.Air ||
map.GetBlock( x, y - 1, z ) != Block.Air ||
map.GetBlock( x + 1, y - 1, z ) != Block.Air ||
map.GetBlock( x - 1, y, z ) != Block.Air ||
map.GetBlock( x + 1, y, z ) != Block.Air ||
map.GetBlock( x - 1, y + 1, z ) != Block.Air ||
map.GetBlock( x, y + 1, z ) != Block.Air ||
map.GetBlock( x + 1, y + 1, z ) != Block.Air ||
map.GetBlock( x - 1, y - 1, z + 1 ) != Block.Air ||
map.GetBlock( x, y - 1, z + 1 ) != Block.Air ||
map.GetBlock( x + 1, y - 1, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y, z + 1 ) != Block.Air ||
map.GetBlock( x, y, z + 1 ) != Block.Air ||
map.GetBlock( x + 1, y, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y + 1, z + 1 ) != Block.Air ||
map.GetBlock( x, y + 1, z + 1 ) != Block.Air ||
map.GetBlock( x + 1, y + 1, z + 1 ) != Block.Air ||
map.GetBlock( x - 2, y - 1, z - 1 ) != Block.Air ||
map.GetBlock( x - 2, y - 1, z ) != Block.Air ||
map.GetBlock( x - 2, y - 1, z + 1 ) != Block.Air ||
map.GetBlock( x - 2, y, z - 1 ) != Block.Air ||
map.GetBlock( x - 2, y, z ) != Block.Air ||
map.GetBlock( x - 2, y, z + 1 ) != Block.Air ||
map.GetBlock( x - 2, y + 1, z - 1 ) != Block.Air ||
map.GetBlock( x - 2, y + 1, z ) != Block.Air ||
map.GetBlock( x - 2, y + 1, z + 1 ) != Block.Air ||
map.GetBlock( x + 2, y - 1, z - 1 ) != Block.Air ||
map.GetBlock( x + 2, y - 1, z ) != Block.Air ||
map.GetBlock( x + 2, y - 1, z + 1 ) != Block.Air ||
map.GetBlock( x + 2, y, z - 1 ) != Block.Air ||
map.GetBlock( x + 2, y, z ) != Block.Air ||
map.GetBlock( x + 2, y, z + 1 ) != Block.Air ||
map.GetBlock( x + 2, y + 1, z - 1 ) != Block.Air ||
map.GetBlock( x + 2, y + 1, z ) != Block.Air ||
map.GetBlock( x + 2, y + 1, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y - 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y - 2, z ) != Block.Air ||
map.GetBlock( x + 1, y - 2, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y - 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y - 2, z ) != Block.Air ||
map.GetBlock( x + 1, y - 2, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y - 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y - 2, z ) != Block.Air ||
map.GetBlock( x + 1, y - 2, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y + 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y + 2, z ) != Block.Air ||
map.GetBlock( x + 1, y + 2, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y + 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y + 2, z ) != Block.Air ||
map.GetBlock( x + 1, y + 2, z + 1 ) != Block.Air ||
map.GetBlock( x - 1, y + 2, z - 1 ) != Block.Air ||
map.GetBlock( x, y + 2, z ) != Block.Air ||
map.GetBlock( x + 1, y + 2, z + 1 ) != Block.Air ||
// bottom
map.GetBlock( x - 1, y - 1, z - 2 ) != Block.Air ||
map.GetBlock( x, y - 1, z - 2 ) != Block.Air ||
map.GetBlock( x + 1, y - 1, z - 2 ) != Block.Air ||
map.GetBlock( x - 1, y, z - 2 ) != Block.Air ||
map.GetBlock( x, y, z - 2 ) != Block.Air ||
map.GetBlock( x + 1, y, z - 2 ) != Block.Air ||
map.GetBlock( x - 1, y + 1, z - 2 ) != Block.Air ||
map.GetBlock( x, y + 1, z - 2 ) != Block.Air ||
map.GetBlock( x + 1, y + 1, z - 2 ) != Block.Air ||
// top
map.GetBlock( x - 1, y - 1, z + 2 ) != Block.Air ||
map.GetBlock( x, y - 1, z + 2 ) != Block.Air ||
map.GetBlock( x + 1, y - 1, z + 2 ) != Block.Air ||
map.GetBlock( x - 1, y, z + 2 ) != Block.Air ||
map.GetBlock( x, y, z + 2 ) != Block.Air ||
map.GetBlock( x + 1, y, z + 2 ) != Block.Air ||
map.GetBlock( x - 1, y + 1, z + 2 ) != Block.Air ||
map.GetBlock( x, y + 1, z + 2 ) != Block.Air ||
map.GetBlock( x + 1, y + 1, z + 2 ) != Block.Air;
}