public boolean validLocation(World world, Cardinal dir, int x, int y, int z) {

    if (!(dir == Cardinal.NORTH || dir == Cardinal.SOUTH)) return false;

    List<Coord> box = WorldGenPrimitive.getRectHollow(x - 7, y - 2, z - 7, x + 7, y + 5, z + 7);

    for (Coord pos : box) {
      MetaBlock b = WorldGenPrimitive.getBlock(world, pos);
      if (!b.getBlock().getMaterial().isSolid()) return false;
    }

    return true;
  }
  @Override
  public boolean validLocation(World world, Cardinal dir, int x, int y, int z) {
    Coord start;
    Coord end;

    start = new Coord(x, y, z);
    end = new Coord(start);
    start.add(Cardinal.reverse(dir), 9);
    end.add(dir, 9);
    Cardinal[] orth = Cardinal.getOrthogonal(dir);
    start.add(orth[0], 5);
    end.add(orth[1], 5);
    start.add(Cardinal.DOWN);
    end.add(Cardinal.UP, 3);

    for (Coord c : WorldGenPrimitive.getRectHollow(start, end)) {
      if (world.isAirBlock(c.getBlockPos())) return false;
    }

    return true;
  }