public int[][] addTownAreas(int[][] newBlockArray, int[] wg, BlockManager bm, int numTownAreas, int townSize, int minX, int maxX){
        Game.loadingText = "Building a Cabin";
        EIError.debugMsg("addTownAreas Start", EIError.ErrorLevel.Notice);
        //build start town
        for(int x = 0; x < townSize; x++){
            if (wg[x] < wg[townSize]) {
                for (int z = wg[x]; z <= wg[townSize]; z++) {
                    if (z == wg[townSize]) {
                        newBlockArray[x][z] = bm.getRandomIdByGroup("Town");
                    } else {
                        newBlockArray[x][z] = bm.getRandomIdByGroup("Dirt");
                    }
                }
            } else {
                for (int z = wg[x]; z >= wg[townSize]; z--) {
                    if (z == wg[townSize]) {
                        newBlockArray[x][z] = bm.getRandomIdByGroup("Town");
                    } else {
                        newBlockArray[x][z] = bm.getRandomIdByGroup("None");
                    }
                }
            }
        }
        numTownAreas--;

        int size = (maxX - minX) / (numTownAreas + 2);
        for(int i = 0; i < numTownAreas; i++){
            makeTown(newBlockArray, wg, bm, townSize, (i+1)*size, (i+2)*size);
        }
        EIError.debugMsg("addTownAreas End", EIError.ErrorLevel.Notice);
        return newBlockArray;
    }