Minecraft city class This is a class representing a city in a mod I am creating for Minecraft. All the constructor parameters are mandatory and they are used to help the class that calculates and builds the Paths, Buildings etc. 

The City class has all the fields that are listed in the constructor including a 2D array that is a representation of the city in X and Z axes. There are also 2 methods to serialize and deserialize the data in order to save them using the Minecraft Forge API. 

public City(int id, BlockPos startingPos, int citySize, int edgeLenght, int pathExtends, Block groundBlock, Block pathBlock, boolean hasMainStreets, boolean hasPaths) {
    this.id = id;

    this.startingPos = startingPos;

    this.chunkLength = citySize;

    this.cityLength = citySize * 16;
    this.edgeLength = edgeLenght;
    this.mapLength = cityLength + edgeLenght + blockStart;

    this.pathExtends = pathExtends;

    this.hasMainStreets = hasMainStreets;
    this.hasPaths = hasPaths;

    this.groundBlock = groundBlock;
    this.pathBlock = pathBlock;

    this.blockStart = edgeLenght;

}


Initializing a city object looks like:

BlockPos startingPos = new BlockPos(1000,63,1000);
int citySize = 5; // Will be pseudorandom
int edgeLength = 4;// Will be pseudorandom
int pathExtends = 2;// Will be pseudorandom
City newCity = new City(++id, startingPos, citySize, edgeLength, pathExtends, Blocks.OBSIDIAN, Blocks.DIAMOND_BLOCK, true, true);


From an organizational point of view I can see the benefits of this approach but is this a good practice? Does it involve any pitfalls I have not thought about or is there a better way to do this?

This is not easy to read and understand and I was wondering if there was any better way to do it. My idea was to create CitySettings object hence making more readable the City object by moving all these fields to another class.

I am thinking of creating a class CitySettings to hold all of City's fields and an instance of CitySettings that will be stored as a field in the City class.
If it's readability you're mostly worried about, then you could change the style of your code:

public City(int id,          BlockPos startingPos,
            int citySize,    int edgeLenght, 
            int pathExtends, Block groundBlock,
            Block pathBlock, boolean hasMainStreets,
            boolean hasPaths) {
    this.id             = id;
    this.startingPos    = startingPos;
    this.chunkLength    = citySize;
    this.cityLength     = citySize * 16;
    this.edgeLength     = edgeLenght;
    this.mapLength      = cityLength + edgeLenght + blockStart;
    this.pathExtends    = pathExtends;
    this.hasMainStreets = hasMainStreets;
    this.hasPaths       = hasPaths;
    this.groundBlock    = groundBlock;
    this.pathBlock      = pathBlock;
    this.blockStart     = edgeLenght;

}


Columnising is a useful trick which can make things more readable.

Yes, there is still visibly a lot of parameters clogging up the screen, but it's not so much that you can't put it all in one constructor. It also helps to remember KISS (Keep It Simple, Stupid), don't overcomplicate unless you need to.