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
- Set a generator on the planet: planet.generator = new YourPlanetGenerator(); before loadSector is invoked.
- Or assign a preset to the sector (sector.preset = ...) that supplies its own generator and rules.
- Verify the planet is fully constructed (generator assigned) in the planet/content registration code.
- 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
- Always assign planet.generator when defining a new planet.
- Unit-test planet definitions asserting generator != null.
- When clearing/invalidating presets, ensure a generator remains as fallback.
- Log planet registration to confirm generator assignment at startup.
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
- Map has no cores!
- All maps must have a core.
- Planet '${value.getString("planet")}' not found.
- Meshes must be objects.
- Unknown mesh type: ${tname}
AI-assisted analysis of Anuken/Mindustry@f695ad7e60 (2026-08-14).
Data as JSON: /api/errors/fd6c982c7779d019.
Report an issue: GitHub.