Anuken/Mindustry · error · RuntimeException

Sector {sector.id} on planet {sector.planet.name} has no gen

Error message

Sector {sector.id} on planet {sector.planet.name} has no generator or preset defined. Provide a planet generator or preset map.

What it means

Thrown by World.loadSector when a sector has neither a preset (sector.preset) nor a planet generator (sector.planet.generator). Generation needs one of them to populate tiles; with neither, the world cannot be built. The message includes the sector id and planet name to locate the misconfiguration. This is a RuntimeException during world generation.

Source

Thrown at core/src/mindustry/core/World.java:276

        endMapLoad();
    }

    public void loadSector(Sector sector){
        loadSector(sector, new WorldParams());
    }

    public void loadSector(Sector sector, WorldParams params){
        setSectorRules(sector, params.saveInfo);

        int size = sector.getSize();
        loadGenerator(size, size, tiles -> {
            if(sector.preset != null){
                sector.preset.generator.generate(tiles, params);
                sector.preset.rules.get(state.rules); //apply extra rules
            }else if(sector.planet.generator != null){
                sector.planet.generator.generate(tiles, sector, params);
            }else{
                throw new RuntimeException("Sector " + sector.id + " on planet " + sector.planet.name + " has no generator or preset defined. Provide a planet generator or preset map.");
            }
            //just in case
            state.rules.sector = sector;
        });

        if(params.saveInfo && state.rules.waves){
            sector.info.waves = state.rules.waves;
        }

        //postgenerate for bases
        if(sector.preset == null && sector.planet.generator != null){
            sector.planet.generator.postGenerate(tiles);
        }

        //reset rules
        setSectorRules(sector, params.saveInfo);

        if(state.rules.defaultTeam.core() != null){

View on GitHub (pinned to f695ad7e60)

Solutions

  1. Set a generator on the planet: planet.generator = new YourPlanetGenerator(); before loadSector is invoked.
  2. Or assign a preset to the sector (sector.preset = ...) that supplies its own generator and rules.
  3. Verify the planet is fully constructed (generator assigned) in the planet/content registration code.
  4. If loading a save tied to a removed generator, migrate or regenerate the sector.

Example fix

// before
planet.generator = null;
world.loadSector(sector, params);

// after
planet.generator = new MyPlanetGenerator();
world.loadSector(sector, params);
Defensive patterns

Strategy: validation

Validate before calling

// verify a generator or preset exists before loading the sector
if(sector.preset == null && (sector.planet.generator == null)){
    throw new IllegalStateException("Planet '" + sector.planet.name + "' needs a generator or preset");
}
world.loadSector(sector, params);

Prevention

When it happens

Trigger: Calling World.loadSector(sector, params) for a sector whose sector.preset is null AND sector.planet.generator is null. Happens when a planet is added without assigning its generator field, or a sector's preset was cleared/not set.

Common situations: A mod adds a new planet and forgets to set planet.generator; a custom sector references a preset that failed to load (preset became null); loading a campaign sector on a planet whose generator was removed in a refactor.

Related errors


AI-assisted analysis of Anuken/Mindustry@f695ad7e60 (2026-08-14). Data as JSON: /api/errors/fd6c982c7779d019. Report an issue: GitHub.