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

3.6 KiB

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

{
  "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.