private int buildJump(int xo, int maxLength) {
        gaps++;
        //jl: jump length
        //js: the number of blocks that are available at either side for free
        int js = random.nextInt(4) + 2;
        int jl = random.nextInt(2) + 2;
        int length = js * 2 + jl;

        boolean hasStairs = random.nextInt(3) == 0;

        int floor = height - 1 - random.nextInt(4);
        //run for the from the start x position, for the whole length
        for (int x = xo; x < xo + length; x++) {
            if (x < xo + js || x > xo + length - js - 1) {
                //run for all y's since we need to paint blocks upward
                for (int y = 0; y < height; y++) { //paint ground up until the floor
                    if (y >= floor) {
                        setBlock(x, y, GROUND);
                    }
                    //if it is above ground, start making stairs of rocks
                    else if (hasStairs) { //LEFT SIDE
                        if (x < xo + js) { //we need to max it out and level because it wont
                            //paint ground correctly unless two bricks are side by side
                            if (y >= floor - (x - xo) + 1) {
                                setBlock(x, y, ROCK);
                            }
                        } else { //RIGHT SIDE
                            if (y >= floor - ((xo + length) - x) + 2) {
                                setBlock(x, y, ROCK);
                            }
                        }
                    }
                }
            }
        }

        return length;
    }