Modding Design Catalogue
Design pages define object models, state transitions, and prohibited moves. They decide how the ruin system should be organized. They do not pretend a class or directory already exists.
Design Focus
| Page | Core question |
|---|---|
Survey | How do we separate early discovery from formal survey, and make sure only the latter creates a formal ruin instance |
Activation | How do we hand the pending reference to ActivationService and turn it into live runtime state |
SiteRuntime | How do we separate the world ledger, live state, and chunk-side cache |
Resonance | How do we collapse site input and player input into one shared result |
Recovery | How do we fold one site event into a long-lived snapshot |
Reading Order
Read this subtree in the following order:
SurveyActivationSiteRuntimeResonanceRecovery
This order follows object dependency, not sidebar layout. Earlier stages provide stable input for later ones. Reading backward makes it easy to mistake a result object for a prerequisite object.
Locked Design Decisions
This line already locks the following:
- Early discovery and formal survey must stay separate.
- Ruin type and ruin instance must stay separate.
- Activation is unified through a service layer instead of site-specific startup logic.
- The world ledger, live runtime state, chunk cache, and item snapshots belong to different authority layers.
- Resonance evaluates only. It does not directly advance the site and it does not generate tooltip text.
- Recovery must fold results into a snapshot. After that, view layers only read the snapshot.
These decisions are shared assumptions for the subtree. They are not reopened page by page.
Design Constraints
- Early discovery and formal survey must stay separate.
- Ruin type and ruin instance must stay separate.
- World truth cannot hang off a player short marker.
- An unloaded chunk does not mean the ruin no longer exists.
- Tooltip can only read saved results. It cannot query live runtime.
Non-Goals
This subtree does not answer:
- where KubeJS, datapacks, and config should live,
- whether a class already exists in the current instance,
- exact method signatures or event subscriber syntax.
Those questions belong under Modpacking or ModdingDeveloping/Implementation. Design pages only define object boundaries and state flow.