Skip to content

Key Interactions

Most keys are independent. The ones on this page are not: setting one correctly still produces nothing, because a second key elsewhere overrides it, gates it, or is applied after it.

Every entry names the version it was checked against and how. These are the cases behind most reports of a setting that "does nothing".

One key silently defeats another

torch needs generateLighting

code review
Set A palette entry with torch: true
Defeated by lostcity.generateLighting, default false
Result The character resolves to air. The block value is discarded and nothing is logged.
Checked Run in a world, 7.4.12

The mod's own common palette marks T this way, which is why shipped buildings are unlit under a default profile. See Palette. game test

explosionChance: 0 does not stop explosions

code review
Set explosions.explosionChance: 0.0
Defeated by explosions.miniExplosionChance, default 0.03
Result Buildings are still damaged. The mini roll is 15 times more likely than the one that was turned off.
Checked Run in a world, 7.4.12

A profile that wants undamaged buildings has to zero both. code review

avoidWater does not stop buildings flooding

code review
Set lostcity.avoidWater: true
Actually controlled by lostcity.avoidFoliage
Result avoidWater only removes liquid a part places. Whether "hard air" floods below sea level is read from avoidFoliage, whose name does not suggest it.
Checked Read from the mod, 7.4.12

The per-part nowater meta does the same job for one part without losing foliage. See Profile. code review

buildingchance: 1.0 does not fill every chunk on 7.5.0 or later

code review
Set buildingchance: 1.0 on a city style
Defeated by streetGenerationMode, default HIERARCHICAL_GRID_V1 from 7.5.0
Result The road planner claims chunks before buildingchance is rolled, so a claimed chunk never reaches the roll.
Checked Read from the mod, 7.5.1

streetGenerationMode: LEGACY restores the 7.4.12 ordering. See What changed in 7.5. code review

railwaysEnabled: false leaves every railway station standing

game test
Set lostcity.railwaysEnabled: false
Defeated by lostcity.railwayStationsEnabled, default true
Result The switch is read only on chunks whose rail type is not a station, so the running rail goes and the stations remain. Measured: 13792 of 24320 railway blocks survived.
Checked Run in a world, 7.4.12

Both have to be off to clear the network. railwaySurfaceStationsEnabled narrows stations to underground ones rather than removing them. game test

buildingMaxCellars: 0 does not mean no cellars

game test
Set lostcity.buildingMaxCellars: 0
Defeated by The chunk's own city level, which is added to the maximum
Result The maximum is a base, not a cap. Measured: 2352 cellar blocks over sixteen chunks at a maximum of 0, and none once every chunk was pinned to level 0.
Checked Run in a world, 7.4.12

City level comes from terrain height through cityLevel0Height and its seven siblings, so a flat world is the only one where 0 means zero. game test

cityChance: 1.0 gives a world of streets, not buildings

game test
Set cities.cityChance: 1.0, to make everything a city
Defeated by lostcity.highwayDistanceMask, default 7
Result With the whole world a city, the highway network claims chunk after chunk, and a claimed chunk refuses a building unless its city level is at least two above the highway's. On flat ground that never happens, so every chunk comes back a street.
Checked Run in a world, 7.4.12

Nothing is logged. Setting highwayDistanceMask: 0 alongside it restores the buildings. This is separate from the 7.5 road planner above, and it applies on every version. game test

A character defined in one style resolves in half the world

game test
Set A palette layered into the Style a city style names in style
Not covered by it Every chunk that is not a city chunk, which resolves against the world style's outsidestyle instead
Result The character is defined where a building stands and undefined everywhere else. A city sphere's shell is drawn on non-city chunks, so a shell character defined only in the city style's style resolves to null and the server stops, uncaught, naming nothing.
Checked Run in a world, 7.4.12

Layer the same palette into both styles. See Style. game test

preventruins is on the pinned building, not the Building asset

code review
Looking for A key on a Building that protects it from ruins
Where it is preventruins on a pinned building inside a predefined city
Result A Building asset has no such key. Ruin protection is only reachable by pinning.
Checked Run in a world, 7.4.12

Order of application matters

minfloors is applied after maxfloors

The floor count is clamped to the maximum, then raised to the minimum. The minimum is a max(), so it wins. game test

Declared Result game test
maxfloors: 3, minfloors: 6 6 floors. The minimum overrides the maximum it was just clamped to.
maxfloors: 3 alone At most 3, subject to the profile and city style.

overrideFloors changes which sources are consulted, not the order. Checked in a world on 7.4.12. See Building. game test

A palette is merged in three layers

Style, then Building, then Part. Each layer overwrites the one before it for the same character, and a part palette merges into the building's rather than replacing it. game test

One exception inverts the rule: a concrete definition beats an alias whatever the order, so a frompalette entry cannot override a character that any palette in the set defines with a real block. game test

Checked in a world on 7.4.12. See Palette. game test

A chest is filled only if four things agree

Gate Default Effect when it fails code review
generateLoot true Every chest is empty.
buildingWithoutLootChance 0.2 One building in five gets neither loot nor spawners.
chestWithoutLootChance 0.2 One surviving chest in five is still empty.
The loot value names a Condition Throws, and leaves invisible chests.

At the defaults a chest in a randomly chosen building has roughly a 64% chance of being filled. Two empty chests in a row is not evidence of a broken palette. Checked in a world on 7.4.12. See Palette. code review

A profile reaches a datapack through four names

dimensionsWithProfiles names a profile, the profile names a worldStyle, the world style names city styles, and a city style names buildings. code review

A wrong name at the first three is not equal in consequence: game test

Wrong name in Result game test
dimensionsWithProfiles The dimension generates with a default profile.
The profile's worldStyle The server crashes. It is resolved before the generation try/catch.
A city style or building reference Failed chunks, logged per chunk.

Checked in a world on 7.4.12. See Error Messages. game test

A sphere landscape needs a second profile

landscapeType: spheres or cavernspheres requires cityspheres.outsideProfile. It is documented as optional with an empty default, and that default resolves to null, so the first chunk that asks about the world outside a sphere throws. game test

On those landscape types nothing catches it, because LostCitySphereFeature has no try. Checked in a world on 7.4.12. game test

Keys that override generation wholesale

A predefined city ignores the values that would otherwise choose

Normally decided by Inside a predefined city code review
cityChance Ignored. The centre chunk is a city centre even at 0.0.
The city radius roll Fixed to radius.
The world style's weighted city style pick Fixed to citystyle.
buildingchance, per chunk Ignored on any chunk holding a pinned building or street.

Checked in a world on 7.4.12. See Predefined City. game test

Two keys that cannot work at all

inpart and belowpart never match from a Building's parts list, whatever else is set, because the floor loop has no current part yet and passes the literal <none>. belowpart additionally tests the current part rather than the one below it in every version that declares the key. game test

Both work in a Condition reached from a palette's loot or mob, where the part is real. Checked in a world on 7.4.12. See Condition. game test

See also