diff --git a/README.md b/README.md index b543272..0dac780 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ Rivencraft is a clean, incremental port of the ideas and gameplay of [Mystcraft Legacy](https://github.com/Mystcraft/Mystcraft-Legacy) to Minecraft 1.21.1 on NeoForge. -The bootstrap and books/linking milestones are complete. The project currently -provides functional Linking Books and randomly seeded, persistent vanilla-like -Ages created from page-free Descriptive Books. Symbols, instability, and the -full writing mechanics have not been ported yet. +The bootstrap, books/linking, and Ages milestones are complete. The project +currently provides functional Linking Books and randomly seeded, persistent +vanilla-like Ages created from page-free Descriptive Books. Symbols, +instability, and the full writing mechanics have not been ported yet. ## Linking Book @@ -60,6 +60,10 @@ according to the configured Return Link policy. Server owners can set `descriptive_books.return_link_mode` in Rivencraft's server config to `ON_CREATION` (default), `ALWAYS`, or `DISABLED`. +Age creation, persistence, lifecycle commands, configuration, backups, and +administrator recovery are documented in [docs/AGES.md](docs/AGES.md). +Data-pack runtime profiles are documented in +[docs/AGE_PROFILES.md](docs/AGE_PROFILES.md). ## Requirements diff --git a/docs/AGES.md b/docs/AGES.md index 3cb24bd..f04e75b 100644 --- a/docs/AGES.md +++ b/docs/AGES.md @@ -1,9 +1,35 @@ -# Age administration +# Age creation and administration + +## Creation + +A page-free Descriptive Book creates an Age when the player assigns a name and +presses **Create**. Rivencraft immediately assigns a UUID, derives a unique +Minecraft-safe dimension identifier from the requested name, rolls a seed and +traits, and persists that definition before asking Dynamic Dimensions to create +the runtime world. Names that normalize to the same identifier receive stable +suffixes such as `_2` and `_3`. + +The selected terrain profile, biome distribution, lighting, weather, celestial +period, celestial angle, and phase are deterministic and become part of the +saved definition. A five-by-five cobblestone platform with clear headroom is +prepared at a safe arrival point. The completed book and every copy carrying +the same UUID resolve to that definition. + +Creating an Age can take several ticks. The book cannot be reopened while its +creation request is active. If creation is interrupted after the definition is +saved, using the book again resumes from the same immutable definition instead +of rolling a replacement. + +## Persistence Rivencraft owns each Age definition for the lifetime of a world. A definition contains the Age UUID, canonical name, seed, generation version, runtime dimension identifier, spawn, and deterministic traits. Definitions are stored in the Overworld saved data and are never rerolled during ordinary loading. +Runtime terrain and entity data remain in the normal world dimension storage +managed by Minecraft and Dynamic Dimensions. Back up the complete world folder +while the server is stopped; copying only a dimension folder does not preserve +the authoritative Age registry. ## Lifecycle @@ -37,3 +63,47 @@ The commands require permission level 2. Opening a Descriptive Book for an unloaded Age loads it again from its saved definition. + +## Configuration + +Rivencraft writes gameplay settings to the world/server configuration managed +by NeoForge. `descriptive_books.return_link_mode` accepts: + +- `ON_CREATION` (default): create one Return Link the first time a player + enters each Age. +- `ALWAYS`: create a Return Link after every successful Descriptive Book trip. +- `DISABLED`: never create Return Links automatically. + +Each client has a separate `rivencraft-client.toml`. Its `book_preview.mode` +setting accepts `AUTO`, `IMMERSIVE_PORTALS`, `PONDER`, or `LEGACY`. This changes +only presentation and cannot change server-side Age generation or travel +validation. See [PREVIEW_COMPATIBILITY.md](PREVIEW_COMPATIBILITY.md) for the +selection matrix and integration limits. + +Runtime generation profiles are server data-pack resources. Their schema, +override rules, reload behavior, and deterministic fallback are documented in +[AGE_PROFILES.md](AGE_PROFILES.md). + +## Administrator recovery + +Use this sequence when a book cannot load an existing Age: + +1. Stop the server and make a copy of the complete world folder. +2. Start the server and run `/rivencraft age list`. Confirm that the expected + canonical name and dimension identifier remain registered. +3. If the Age is listed as unloaded, open its Descriptive Book to reload it. + This keeps the UUID, seed, profile, traits, and existing world folder. +4. If a data-pack profile is missing or invalid, restore or repair that pack, + run `/reload`, then unload and reopen the Age. A removed custom profile uses + the deterministic `rivencraft:standard` fallback and logs the substitution. +5. If the definition is missing, restore the complete world backup. Moving a + dimension folder into another world cannot reconstruct its UUID or books. +6. If the definition exists but its dimension data is damaged, restore the + matching dimension data and authoritative world saved data from the same + backup generation. Do not combine them from different backups. + +There is intentionally no delete command in Milestone 3. Do not manually +delete an Age definition or rename its dimension folder: books may exist in +inventories, containers, Book Stands, or unloaded chunks, and would be +orphaned. `/rivencraft age unload` is the supported reversible maintenance +operation. diff --git a/docs/PORTING.md b/docs/PORTING.md index 8ab9213..ecd8557 100644 --- a/docs/PORTING.md +++ b/docs/PORTING.md @@ -31,7 +31,7 @@ acceptance issue and all required implementation issues are complete. **Complete.** 3. **Ages** — persistent generated dimensions, deterministic traits, lifecycle management, data-pack integration, and optional destination - renderer compatibility. **Active.** See + renderer compatibility. **Complete.** See [Milestone 3](https://gitea.tail180fb1.ts.net/dnorberg/rivencraft/milestone/8). 4. **Writing system** — pages, symbols, notebooks, desks, and book assembly. 5. **Age grammar** — translate symbol combinations into modern biome, noise, diff --git a/gradle.properties b/gradle.properties index eea9edf..d5504ed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,7 +35,7 @@ mod_name=Rivencraft # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=LGPL-3.0-or-later # The mod version. Rivencraft uses the x.y.z.b policy documented in README.md. -mod_version=0.2.30.0 +mod_version=0.3.0.0 immersive_portals_version=6.0.7 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources.