Skip to content

Commit 57ca01e

Browse files
committed
Bring OreSpawn 4.1 to Minecraft 1.14.4
1 parent 9e43c19 commit 57ca01e

156 files changed

Lines changed: 12778 additions & 1757 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ jobs:
126126
if-no-files-found: error
127127
retention-days: 30
128128
path: |
129-
build/libs/OreSpawn-4.0.16.114041.jar
130-
build/libs/OreSpawn-4.0.16.114041-sources.jar
131-
build/libs/OreSpawn-4.0.16.114041-javadoc.jar
129+
build/libs/OreSpawn-4.1.0.114041.jar
130+
build/libs/OreSpawn-4.1.0.114041-sources.jar
131+
build/libs/OreSpawn-4.1.0.114041-javadoc.jar
132132
build/release/SHA256SUMS
133133
CHANGELOG.txt
134134

‎CHANGELOG.txt‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
Version 4.1.0.114041
2+
3+
* Reject invalid Geome IDs instead of silently renaming them.
4+
* Keep expanded mod metadata intact when Eclipse rebuilds resources.
5+
* Add an isolated shared-ore client profile and real Nether quartz checks.
6+
* Retry tag-only ore and fluid hosts after Forge loads the world's tags,
7+
before spawn generation. Keep working block/family rules unchanged so
8+
managed Nether quartz follows its saved rule without moving existing veins.
9+
10+
* Add a directory for loaded provider mods and optional add-on settings screens.
11+
* Group OreSpawn-managed ores by exact block tags. Balanced, Single, Custom,
12+
and Keep Original policies keep one placement budget per channel without
13+
changing existing worlds' saved behaviour.
14+
* Add a biome directory with exact new-terrain replacement, palette settings,
15+
and dimension-wide materials controls. Existing chunks are never rewritten.
16+
* Preserve missing-mod settings and dormant imported Ore Dictionary aliases.
17+
Provider, global, and world schemas are now 5, 8, and 7; API major remains 1.
18+
119
Version 4.0.16.114041
220

321
* Adopt the shared 4.0.16 release identity. Forge 1.14 has neither

‎README.md‎

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ End" policy used by mods such as Base Metals.
1717
This is not the unrelated mod that adds mobs and dimensions under the same
1818
name.
1919

20-
This branch builds target-qualified version `4.0.16.114041`: the OreSpawn 4.0.16
21-
feature set for Minecraft 1.14.4 and Forge. See the
20+
This branch builds target-qualified version `4.1.0.114041` for Minecraft 1.14.4
21+
and Forge. It adds material-group ore arbitration, exact biome replacements,
22+
and a directory for installed provider mods to the OreSpawn 4.0.16 base. See the
2223
[versioning policy](docs/VERSIONS.md) for the encoding and release convention.
2324

2425
## What Happens When It Is Installed?
@@ -54,6 +55,15 @@ Important files:
5455
Profile edits affect newly generated chunks. Ore and flat-bedrock retrogen are
5556
separate opt-in features; OreSpawn never retro-generates rock strata.
5657

58+
**Ore Sources** groups ores by exact block tags such as `forge:ores/sulfur`.
59+
When two loaded ordinary MMD providers share one tag, new worlds use a
60+
Balanced output policy and one placement budget per channel. Older worlds keep
61+
their saved Keep Original behaviour. Imported Ore Dictionary aliases remain
62+
visible but dormant until you assign a known exact block tag. The **Biomes**
63+
directory can replace one loaded biome with another in new terrain; its
64+
**Overworld Materials** control applies across the dimension, not just the
65+
selected biome.
66+
5767
When an already-generated world has saved Mineralogy 1.10, 1.12, or 5.x mod
5868
metadata but no OreSpawn world profile, OreSpawn reads the matching published
5969
configuration contract and records the exact engine, numeric settings, rock
@@ -122,7 +132,11 @@ launches exclude tests and fixtures. Published jars are deterministic,
122132
SRG-reobfuscated for the Forge 28 runtime, audited for their access transformer
123133
and contents, and accompanied by SHA-256 checksums.
124134

125-
Machine-specific `AGENTS.md` and `agent-notes/` files are intentionally ignored.
135+
For a shared-ore GUI test, use the separate **runOreSourcesClient** Eclipse
136+
profile. It loads two dummy providers and keeps its worlds in `run-ore-sources`.
137+
See [the build guide](gradle/README.md#trying-shared-ores-in-the-editor) for the
138+
test blocks and controls. These providers are never included in release jars.
139+
126140
Public developer and AI integration guidance lives in `docs/` and is included
127141
in the built jar.
128142

‎build.gradle‎

Lines changed: 31 additions & 1192 deletions
Large diffs are not rendered by default.

‎docs/AGENTS.md‎

Lines changed: 0 additions & 17 deletions
This file was deleted.

‎docs/API.md‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,22 @@ coverage with `OreDefinition.Builder.dimensionSelector(...)` and
5050
`OreDimensionSelector.ALL_EXCEPT_NETHER_AND_END`. Explicit dimensions
5151
override that selector and prevent duplicate placement.
5252

53-
The builder emits provider schema 4. Legacy provider schemas 1-3 remain
54-
readable. Schema 4 is required for biome palettes and dimension materials.
53+
The builder emits provider schema 5. Legacy provider schemas 1-4 remain
54+
readable. Schema 4 is required for biome palettes and dimension materials;
55+
schema 5 adds explicit material and placement-channel IDs. API major remains 1.
56+
57+
For custom ore patterns, `OreGenerationContext` extends the existing
58+
`OrePlacementContext` without changing its binary contract. It exposes the
59+
world seed, dimension, chunk coordinates, and an optional geology sampler.
60+
The `tryPlace(x, y, z, outputIdentity)` overload gives separated slices of one
61+
logical deposit the same output choice. Code built against the older context
62+
continues to work through the original `tryPlace` method.
63+
64+
Client add-ons may register one optional configuration screen per mod through
65+
`WorldSettingsExtensionRegistry.registerConfigScreen(modId, factory)` during
66+
client initialization. OreSpawn shows it in the loaded-mod directory and
67+
returns Escape to that directory. Do not load this client-only API on a
68+
dedicated server.
5569

5670
Provider-owned fluid deposits are declarative and may target several dimensions:
5771

‎docs/BIOMES.md‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,18 @@ then lexical template ID order.
171171

172172
## World-Creation Editor
173173

174-
**Biomes & World Materials** is visible even when rock strata are disabled.
175-
It lists palettes and materials by dimension, uses installed-registry pickers,
176-
and validates IDs before world creation. The editor is creation-only in 4.0.0;
177-
existing worlds remain editable through their self-contained server profile.
174+
**Biomes** is visible even when rock strata are disabled. Its directory shows
175+
loaded and referenced biomes once, with provider placement rules and effective
176+
palette order. It can replace one loaded source biome with another in newly
177+
generated terrain. The exact replacement layer runs after ordinary palettes;
178+
existing chunks are never rewritten. A missing target stays dormant until its
179+
mod returns. Palette settings expose mode, scope, region size, coverage,
180+
fallback weight, and namespace filters without reordering provider palettes.
181+
182+
The materials button belongs to the selected dimension, not the selected
183+
biome. Aquifer fluid, snow, and ice substitutions apply across every biome in
184+
that dimension. Forge 1.14.4 has no separate deep-aquifer generator fluid, so
185+
that stored field remains unavailable on this target.
178186

179187
## Performance Boundaries
180188

‎docs/CONFIGURATION.md‎

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1516
The profile for a new world is merged in this order: passive OreSpawn defaults,
1617
packaged 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

183187
At least one of `host_families`, `host_blocks`, or `host_tags` must be present.
184188
Hosts 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
196200
the vanilla Nether and End. Explicit rules in `dimensions` override selector
197201
rules 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

201229
Each `fluid_deposits` entry has a stable provider-namespaced rule ID, an

‎docs/DEVELOPER_GUIDE.md‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
| Add covered underground oil or another fluid | Provider schema 3 fluid deposit |
1313
| Add or place biomes without a framework dependency | Provider schema 4 biome palette |
1414
| Replace surfaces, aquifers, snow, or ice | Provider schema 4 dimension materials |
15+
| Share placement between equivalent ore blocks | Provider schema 5 material and placement channel, with one exact block tag |
16+
| Add an OreSpawn-linked settings screen | Client-only `WorldSettingsExtensionRegistry` |
1517
| Inspect active geology at runtime | `GeologyProfileView` and `GeologySampler` |
1618

1719
Strata are optional. If no enabled terrain dimension has eligible rocks,
@@ -21,7 +23,7 @@ blocks or tags.
2123

2224
## Provider JSON Quick Start
2325

24-
Put a schema-4 file in your mod jar at:
26+
Put a schema-5 file in your mod jar at:
2527

2628
```text
2729
src/main/resources/data/examplemod/orespawn/provider.json
@@ -33,7 +35,7 @@ stone without enabling strata:
3335

3436
```json
3537
{
36-
"schema_version": 4,
38+
"schema_version": 5,
3739
"provider_modid": "examplemod",
3840
"provider_revision": 1,
3941
"ores": {
@@ -215,3 +217,14 @@ pattern beside every built-in type.
215217
Run `gradlew check` (or `gradlew build`, which includes it)
216218
before publishing any change to biome registration, palettes, surfaces,
217219
feature ordering, height handling, or profile persistence.
220+
221+
For manual shared-ore testing, generate the Eclipse runs and select
222+
`runOreSourcesClient`. Two isolated dummy providers share a Sulfur tag and use
223+
coloured wool as test outputs. The profile keeps its saves in `run-ore-sources`
224+
and does not create worlds automatically. Normal launches and release jars
225+
exclude these providers.
226+
227+
The opt-in `nativeOreIntegrationTest` uses an official Forge server supplied
228+
through `packagedForgeServerRuntime`. It checks managed quartz with Forge 28's
229+
netherrack tag and explicit block hosts, exact-save reload, and a depth change
230+
that affects new terrain only. All test worlds stay under `build/`.

‎docs/PLAYER_GUIDE.md‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ adds them. You can remove the starter rocks or add blocks from installed mods
2525
before creating the world.
2626

2727
Mods can also offer new biomes and world materials without enabling strata.
28-
Use **Biomes & World Materials** to inspect installed dimension palettes,
29-
surface blocks, aquifer fluids, snow, and ice. The picker only accepts real
28+
Use **Biomes** to inspect loaded biomes, placement palettes, and surface rules.
29+
Replacing a biome changes only newly generated terrain. The dimension's
30+
**Materials** button changes aquifer fluid, snow, or ice across every biome in
31+
that dimension, not only the biome currently selected. The picker only accepts
3032
installed registry entries. Missing optional compatibility biomes are skipped
3133
safely instead of breaking world creation.
3234

@@ -48,11 +50,13 @@ safely instead of breaking world creation.
4850
installed mod. These are covered underground deposits, not exposed vanilla
4951
lakes. **Solid Cover** controls the roof thickness, while **Solid Shell**
5052
prevents a deposit from opening into a cave at its sides or underside.
51-
- **Biomes & World Materials** controls broad biome regions and what their
52-
surfaces, underground water, snow, and ice are made from. **Augment** mixes
53-
new biomes into the existing source; **Replace** creates a complete provider
54-
style. Namespace scope protects other biome mods unless a pack deliberately
55-
opts them in.
53+
- **Biomes** lists installed and referenced biomes and their placement rules.
54+
**Replace in new terrain with...** is an exact, one-to-one choice and does
55+
not rewrite existing chunks. Palette settings still offer **Augment** for a
56+
provider mix or **Replace** for a complete provider style.
57+
- **Ore Sources** groups interchangeable ores by exact block tags. Balanced
58+
shares one placement budget across eligible outputs; Single picks one output;
59+
Custom lets you choose weights. Keep Original leaves every rule independent.
5660

5761
**World Materials** applies across an entire dimension. **Aquifer Fluid**
5862
changes the normal below-sea-level fluid. Minecraft 1.14.4 exposes only that

0 commit comments

Comments
 (0)