@@ -4,13 +4,14 @@ OreSpawn uses three JSON contracts:
44
55| File | Schema | Purpose |
66| ---| ---:| ---|
7- | ` config/orespawn-worldgen.json ` | 6 | Installed-pack defaults for new worlds |
8- | ` <world>/serverconfig/orespawn-worldgen.json ` | 5 | Self-contained snapshot for one world |
9- | ` config/<modid>-orespawn.json ` | 4 | Optional authoritative provider override |
7+ | ` config/orespawn-worldgen.json ` | 8 | Installed-pack defaults for new worlds |
8+ | ` <world>/serverconfig/orespawn-worldgen.json ` | 7 | Self-contained snapshot for one world |
9+ | ` config/<modid>-orespawn.json ` | 5 | Optional authoritative provider override |
1010
11- A provider may package schema 4 at ` data/<modid>/orespawn/provider.json ` .
12- Legacy provider schemas 1-3 remain accepted. Fluid deposits require schema 3;
13- biome palettes and dimension materials require schema 4.
11+ A provider may package schema 5 at ` data/<modid>/orespawn/provider.json ` .
12+ Legacy provider schemas 1-4 remain accepted. Fluid deposits require schema 3;
13+ biome palettes and dimension materials require schema 4. Explicit ore material
14+ and placement-channel IDs require schema 5.
1415
1516The profile for a new world is merged in this order: passive OreSpawn defaults,
1617packaged or API providers, provider override files, the global configuration,
@@ -29,7 +30,7 @@ report for the exact decision.
2930
3031| Field | Values | Meaning |
3132| ---| ---| ---|
32- | ` schema_version ` | Contract-specific integer | Global 6 , world 5 , provider 4 |
33+ | ` schema_version ` | Contract-specific integer | Global 8 , world 7 , provider 5 |
3334| ` geology_mode ` | ` geome ` , ` legacy ` | Sky/geome engine or Cyano legacy engine |
3435| ` place_fluid_deposits ` | boolean | Master switch for configured fluid-deposit rules |
3536| ` manage_vanilla_ores ` | boolean | Lets OreSpawn suppress and replace claimed vanilla ore features |
@@ -44,6 +45,8 @@ report for the exact decision.
4445| ` biome_palettes ` | object keyed by provider-owned rule ID | Optional native-biome overlays and surfaces |
4546| ` dimension_materials ` | object keyed by provider-owned rule ID | Aquifer fluid, snow, and ice substitutions |
4647| ` ores ` | object keyed by rule ID | Ore outputs and per-dimension placement |
48+ | ` ore_material_groups ` | object keyed by material ID | Friendly names and exact block-tag aliases; imported Ore Dictionary names stay dormant |
49+ | ` ore_source_policies ` | object keyed by material and dimension | Saved output mode, weights, and placement source per channel |
4750| ` fluid_deposits ` | object keyed by rule ID | Provider-owned fluids and per-dimension placement |
4851| ` retrogen ` | object | Bounded ore retrogen controls |
4952| ` flat_bedrock ` | object | Opt-in flat bedrock controls |
@@ -179,6 +182,7 @@ Each enabled ore dimension uses:
179182| ` node_size ` | 1-32 | Cluster node size |
180183| ` length ` | 1-64 | Pattern path length where supported |
181184| ` fluid ` | registry ID | Fluid used by ` underfluids ` |
185+ | ` placement_channel ` | registry ID | Independent placement budget shared by equivalent ores in consolidated modes |
182186
183187At least one of ` host_families ` , ` host_blocks ` , or ` host_tags ` must be present.
184188Hosts may be plain registry IDs or weighted objects such as
@@ -196,6 +200,30 @@ The selector `orespawn:all_except_nether_end` covers every dimension except
196200the vanilla Nether and End. Explicit rules in ` dimensions ` override selector
197201rules for the same ore and dimension, including explicit disabled rules.
198202
203+ ### Material groups and source policies
204+
205+ Provider schema 5 may add a ` material ` ID to an ore. Otherwise OreSpawn infers
206+ the material only from exact loaded block tags under ` */ores/* ` ; it does not
207+ guess from a block or mod name. ` ore_material_groups ` stores a friendly name
208+ and ` block_tag_entries ` for each group. Imported ` ore_dictionary_entries `
209+ remain dormant unless a user gives the group an exact tag mapping.
210+
211+ ` ore_source_policies ` stores one material-and-dimension decision: Keep Original
212+ (` keep_separate ` ) or consolidated Balanced, Single, or Custom output selection.
213+ The ` placement_sources ` object names one source rule for each placement
214+ channel. Consolidation uses that rule's frequency, shape, depth, and hosts,
215+ then picks the selected output for a whole deposit. It does not give every
216+ output its own placement budget. External generators are shown for context but
217+ cannot be suppressed by OreSpawn.
218+
219+ For a newly created world, two loaded ordinary MMD providers with the same
220+ exact ore tag start Balanced. A configured Sulfur or Lithium priority chooses
221+ the initial placement source; other conflicts use stable owner/rule-ID order.
222+ Missing providers create no phantom ores. Existing worlds retain their saved
223+ policy, defaulting to Keep Original on upgrade. Both global and world profile
224+ upgrades keep a backup; editing the global defaults in the UI is saved only
225+ when the main OreSpawn editor's Done is pressed.
226+
199227## Fluid Deposits, Retrogen, And Bedrock
200228
201229Each ` fluid_deposits ` entry has a stable provider-namespaced rule ID, an
0 commit comments