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, and each is a way for a setting to "do 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 |
The fix is the same palette layered 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
Chains where every link must hold¶
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
In a Condition reached from a palette's loot or mob the part is real, so inpart
works there, and belowpart reads that same current part. Checked in a world on
7.4.12. See
Condition. game test
See also¶
- Known Issues for behaviour with no key at all
- Claim Tests for how each entry above was checked
- Profile Reference for the keys themselves