Files
rivencraft/docs/AGE_PROFILES.md
T
2026-09-30 16:44:22 -04:00

71 lines
3.6 KiB
Markdown

# Age runtime profiles
Rivencraft loads Age runtime profiles from server data packs at
`data/<namespace>/rivencraft/age_profiles/<name>.json`. The resulting profile ID
is `<namespace>:<name>`. Profiles select registered world-generation resources;
they do not contain an Age's seed, name, spawn, or rolled traits.
## Schema version 1
```json
{
"schema_version": 1,
"terrain": "noise",
"noise_settings": "minecraft:overworld",
"biome_preset": "minecraft:overworld",
"dimension_type": "minecraft:overworld"
}
```
`terrain` is `noise`, `flat`, or `void`. Noise profiles require
`noise_settings` and `biome_preset` references. Every profile requires a
`dimension_type` reference. Omitted resource references use the Overworld
entry. Rivencraft validates all referenced entries against the loaded dynamic
registries during data-pack reload. An invalid profile is rejected.
The built-in profile IDs are `rivencraft:standard`, `amplified`, `island`,
`cave`, `flat`, and `void`. Their JSON files are ordinary built-in data-pack
resources and can be overridden by a higher-priority pack. The example under
`docs/example-age-profile-pack` can be copied into a world's `datapacks`
directory. Valid custom profiles join the stable, sorted pool used when a new
Age rolls its base terrain; the selected ID is then persisted with that Age.
Each built-in profile now has a matching `terrain/<name>` Symbol Page. Put one
of those pages after the Link Panel in a Book Binder to select that terrain
instead of the seed-selected random profile. Standard, Amplified, and Cave use
their corresponding registered noise settings; Island uses Minecraft's
floating-islands noise settings; Flat and Void use flat-source generators.
The Cave and Island pages are Rivencraft terrain choices based on existing
profiles, not claims that Legacy had identically named terrain symbols.
Every family retains a safe cobblestone arrival platform. An omitted terrain
page still uses the deterministic seed-selected profile.
## Persistence and reload behavior
An Age permanently stores its selected profile ID, generation version, seed,
and rolled traits. For an **authored** Age, the generation plan also stores a
copy of the resolved runtime profile: terrain shape, noise settings, biome
preset, and dimension type. `/reload` cannot reinterpret that plan; an unloaded
authored Age uses the saved profile snapshot when it loads, even if the defining
symbol or profile JSON has since changed. An older, page-free Age has no plan
and continues to resolve its saved profile ID at load time.
Registered noise, biome-preset, and dimension-type IDs are validated when
profiles load. Before loading an authored Age, the saved references are checked
again. If a data pack supplying one has been removed, the dimension stays
unloaded and the log identifies the missing resource; the Age's plan is not
silently replaced. Restore the pack to load that Age. A custom dimension type
retains its own skylight capability: normal lighting cannot make a Nether-style
type skylit.
A profile removed after a page-free Age was created resolves to `rivencraft:standard`.
The legacy `rivencraft:random_vanilla` alias also resolves to `standard`.
Rivencraft logs this fallback. Invalid built-in overrides do not replace the
required built-in definitions; a reload fails if a required built-in profile
is absent after resource resolution.
Only schema version 1 is accepted. A future schema change must add an explicit
migration path before incrementing the version. The saved Age generation
version remains independent of this data-pack schema and is never silently
rewritten.