Skip to content

Commit 700bbb9

Browse files
committed
1.18 to 1.19 port
1 parent 5ad2714 commit 700bbb9

39 files changed

Lines changed: 1047 additions & 223 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ Mineralogy 6 is the first full provider. It supplies its rocks, ores, crude-oil
2222
deposit, geomes, biome influences, and recommended settings to OreSpawn. An
2323
ore-only provider such as Base Metals can supply ores and host tags without
2424
enabling rock layers or biome replacement. A total-conversion provider can add
25-
biomes and replace surfaces, aquifer fluids, snow, and ice without depending on
26-
TerraBlender.
25+
biomes and replace surfaces, aquifer fluids, snow, and ice through OreSpawn's
26+
declarative provider contract.
2727

2828
## Players And Server Owners
2929

docs/AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ Configuration contracts:
2727
per ore and must also drive vanilla-feature suppression.
2828
- JSON Schemas and examples are under `META-INF/orespawn/docs/` in the jar.
2929
- Schema 4 providers may declare `biome_palettes` and `dimension_materials`.
30-
Palettes wrap the native dimension biome source; they do not require
31-
TerraBlender. Region presets are 128, 256, 512, 1024, and 2048 blocks.
30+
Palettes wrap the native dimension biome source. Region presets are 128,
31+
256, 512, 1024, and 2048 blocks.
3232

3333
Lifecycle and ownership:
3434

docs/API.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ WorldgenProvider provider = WorldgenProvider.builder("examplemod", 1)
7878
for one legacy oil rule. New integrations should use `FluidDepositDefinition`.
7979

8080
Register custom biomes with Forge as usual. `OreSpawnBiomes.copyAndRegister`
81-
provides a small optional convenience for cloning a known biome without adding
82-
TerraBlender:
81+
provides a small optional convenience for cloning a known biome:
8382

8483
```java
8584
RegistryObject<Biome> candyPlains = OreSpawnBiomes.copyAndRegister(

docs/BIOMES.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
# Biomes And World Materials
22

3-
OreSpawn can place provider biomes and replace their visible world materials
4-
without requiring TerraBlender. It does not register biomes for a child mod:
5-
the provider still registers ordinary Forge `Biome` objects, then supplies
6-
declarative placement and material rules to OreSpawn.
3+
OreSpawn can place provider biomes and replace their visible world materials.
4+
It does not register biomes for a child mod: the provider still registers
5+
ordinary Forge `Biome` objects, then supplies declarative placement and
6+
material rules to OreSpawn.
77

88
This feature is optional. Ore-only providers and existing Mineralogy profiles
99
with no biome palettes use Minecraft's original biome source unchanged.
1010

1111
## How Placement Composes
1212

1313
OreSpawn waits until a server level has its final `ChunkGenerator`, then wraps
14-
the biome source already selected for that dimension. Vanilla, TerraBlender,
15-
Biomes O' Plenty, or another framework therefore runs first. OreSpawn reads the
16-
source biome once and applies pre-baked palette rules.
14+
the biome source already selected for that dimension. Vanilla or another
15+
installed biome source therefore runs first. OreSpawn reads the source biome
16+
once and applies pre-baked palette rules.
1717

18-
The wrapper is native to OreSpawn and has no TerraBlender compile-time or
19-
runtime dependency. This keeps simple child mods small while still allowing a
20-
pack that already uses TerraBlender to compose safely.
18+
The wrapper is native to OreSpawn. This keeps simple child mods small and lets
19+
OreSpawn compose with the biome source already selected by the pack.
2120

2221
Each palette has:
2322

docs/DEVELOPER_GUIDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ chunk invocation and no registry lookup in the placement loop.
179179

180180
Biome palettes wrap the dimension's already-selected biome source and bake
181181
registry holders, climate ranges, namespace filters, weights, surfaces, and
182-
world materials at server activation. No TerraBlender API is called. A
183-
dimension without a palette or material rule keeps the original generator path.
182+
world materials at server activation. A dimension without a palette or material
183+
rule keeps the original generator path.
184184

185185
Definitions normally change after a restart. `/orespawn reload` is intended for
186186
operator-controlled profile reloads. Existing chunks are unchanged unless

docs/DIMENSIONS.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ Biome palettes and dimension-material rules are separate from terrain
1010
replacement. They may target `minecraft:overworld`, `minecraft:the_nether`,
1111
`minecraft:the_end`, or a provider dimension without adding rock strata.
1212
Unconfigured dimensions keep their original biome source, aquifers, snow, and
13-
ice. OreSpawn wraps the source already installed by the dimension, so
14-
TerraBlender is supported when present but is never required.
13+
ice. OreSpawn wraps the biome source already installed by the dimension.
1514

1615
Each `terrain_dimensions` entry supplies replacement host blocks or tags and
1716
may restrict generation to explicit biome IDs or biome namespaces. With no

docs/PLAYER_GUIDE.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ For a normal game:
1212
3. Open **Help & Guide** for a plain-language tour of the controls.
1313
4. Press **Done**, then create the world normally.
1414

15+
Hover over unfamiliar controls for a short explanation. The same explanations
16+
are collected in **Help & Guide**, so a setting can be learned either while
17+
editing it or one topic at a time.
18+
1519
There is no requirement to use rock strata. Ore-only mods can use OreSpawn to
1620
place ores in ordinary vanilla stone while every geology control remains idle.
1721
When no provider supplies rocks, **Configure Rock Strata...** starts with a
@@ -50,6 +54,12 @@ safely instead of breaking world creation.
5054
style. Namespace scope protects other biome mods unless a pack deliberately
5155
opts them in.
5256

57+
**World Materials** applies across an entire dimension. **Aquifer Fluid**
58+
changes the normal below-sea-level fluid, while **Deep Aquifer** can use a
59+
second fluid below a chosen Y level. Snow and ordinary ice can also be replaced.
60+
Use **Fluid Deposits**, not World Materials, for occasional underground lakes
61+
or pockets.
62+
5363
## Rocks, Ores, And Other Mods
5464

5565
The material picker lists blocks from installed mods by full registry ID, for

docs/PROVIDERS.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ rules remain in the self-contained snapshot.
107107

108108
Biome providers can add Forge biomes normally, then declare where those biomes
109109
belong through `biome_palettes`. The overlay wraps the dimension's existing
110-
biome source, so it composes after vanilla, TerraBlender, Biomes O' Plenty, or
111-
another source instead of taking a compile-time dependency on them. Use
112-
`minecraft_only` scope when the provider should leave other mods' biomes alone.
110+
biome source, so it composes after vanilla or another installed source instead
111+
of taking a compile-time dependency on it. Use `minecraft_only` scope when the
112+
provider should leave other mods' biomes alone.
113113
Use `required_similar_biomes` only when an output truly cannot work without a
114114
referenced biome; ordinary compatibility hints belong in `similar_biomes`.
115115

src/main/java/com/mcmoddev/orespawn/client/AdvancedGeologySettingsScreen.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,9 @@ protected void init() {
3232
Component.translatable("button.orespawn.cyano_details"),
3333
button -> openNumeric("cyano", NumericConfigScreen.CYANO_FIELDS)));
3434
}
35-
if (!session.fluidDepositIds().isEmpty()) {
36-
addRenderableWidget(OreSpawnScreenLayout.plainButton(left, top + (row * 28), 310, 20,
37-
Component.translatable("button.orespawn.fluid_deposit_details"),
38-
button -> minecraft.setScreen(new FluidDepositListScreen(this, session))));
39-
}
35+
addRenderableWidget(OreSpawnScreenLayout.plainButton(left, top + (row * 28), 310, 20,
36+
Component.translatable("button.orespawn.fluid_deposit_details"),
37+
button -> minecraft.setScreen(new FluidDepositListScreen(this, session))));
4038
addRenderableWidget(OreSpawnScreenLayout.plainButton(width / 2 - 75, OreSpawnScreenLayout.footerY(height), 150, 20,
4139
CommonComponents.GUI_DONE, button -> onClose()));
4240
}

src/main/java/com/mcmoddev/orespawn/client/BiomePlacementScreen.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,12 @@ protected void init() {
5252
button.active = value != tab;
5353
}
5454
JsonObject placement = session.biomePlacement(dimension, biomeId);
55-
addRenderableWidget(CycleButton.onOffBuilder(bool(placement, "enabled", true))
56-
.create(left, 64, contentWidth, 20,
55+
addRenderableWidget(OreSpawnScreenLayout.explain(
56+
CycleButton.onOffBuilder(bool(placement, "enabled", true)).create(
57+
left, 64, contentWidth, 20,
5758
Component.translatable("option.orespawn.enabled"),
58-
(button, value) -> placement.addProperty("enabled", value)));
59+
(button, value) -> placement.addProperty("enabled", value)),
60+
"guide.orespawn.biomes.1"));
5961
if (tab == Tab.PLACEMENT) initPlacement(left, half, placement);
6062
else if (tab == Tab.CLIMATE) initClimate(left, half, placement);
6163
else initSurface(left, contentWidth, placement);
@@ -71,36 +73,45 @@ protected void init() {
7173
private void initPlacement(int left, int half, JsonObject placement) {
7274
int y = 90;
7375
weight = field(left + half + 5, y, half, decimal(placement, "weight", 1.0D));
76+
OreSpawnScreenLayout.explain(weight, "guide.orespawn.biomes.3");
7477
label(left, y + 6, half, "option.orespawn.weight");
7578
y += 28;
76-
addRenderableWidget(OreSpawnScreenLayout.button(this, font, left, y, half, 20,
79+
addRenderableWidget(OreSpawnScreenLayout.explain(OreSpawnScreenLayout.button(
80+
this, font, left, y, half, 20,
7781
Component.translatable("button.orespawn.similar_biomes",
7882
array(placement, "similar_biomes").size()),
7983
button -> { saveFields(); minecraft.setScreen(new BiomeReferenceScreen(
80-
this, session, placement, "similar_biomes")); }));
81-
addRenderableWidget(OreSpawnScreenLayout.button(this, font, left + half + 5, y,
84+
this, session, placement, "similar_biomes")); }),
85+
"guide.orespawn.biomes.3"));
86+
addRenderableWidget(OreSpawnScreenLayout.explain(OreSpawnScreenLayout.button(
87+
this, font, left + half + 5, y,
8288
half, 20, Component.translatable("button.orespawn.required_biomes",
8389
array(placement, "required_similar_biomes").size()),
8490
button -> { saveFields(); minecraft.setScreen(new BiomeReferenceScreen(
85-
this, session, placement, "required_similar_biomes")); }));
91+
this, session, placement, "required_similar_biomes")); }),
92+
"guide.orespawn.biomes.3"));
8693
}
8794

8895
private void initClimate(int left, int half, JsonObject placement) {
8996
int y = 90;
9097
minTemperature = field(left + half + 5, y, half,
9198
decimal(placement, "min_temperature", -2.0D));
99+
OreSpawnScreenLayout.explain(minTemperature, "guide.orespawn.biomes.3");
92100
label(left, y + 6, half, "option.orespawn.min_temperature");
93101
y += 24;
94102
maxTemperature = field(left + half + 5, y, half,
95103
decimal(placement, "max_temperature", 2.0D));
104+
OreSpawnScreenLayout.explain(maxTemperature, "guide.orespawn.biomes.3");
96105
label(left, y + 6, half, "option.orespawn.max_temperature");
97106
y += 24;
98107
minDownfall = field(left + half + 5, y, half,
99108
decimal(placement, "min_downfall", 0.0D));
109+
OreSpawnScreenLayout.explain(minDownfall, "guide.orespawn.biomes.3");
100110
label(left, y + 6, half, "option.orespawn.min_downfall");
101111
y += 24;
102112
maxDownfall = field(left + half + 5, y, half,
103113
decimal(placement, "max_downfall", 1.0D));
114+
OreSpawnScreenLayout.explain(maxDownfall, "guide.orespawn.biomes.3");
104115
label(left, y + 6, half, "option.orespawn.max_downfall");
105116
}
106117

@@ -110,19 +121,23 @@ private void initSurface(int left, int width, JsonObject placement) {
110121
for (String key : Arrays.asList("top_block", "filler_block",
111122
"underwater_block", "ceiling_block")) {
112123
String current = string(surface, key, "");
113-
addRenderableWidget(OreSpawnScreenLayout.button(this, font, left, y,
124+
addRenderableWidget(OreSpawnScreenLayout.explain(OreSpawnScreenLayout.button(
125+
this, font, left, y,
114126
width - 65, 20, materialLabel(key, current), button -> {
115127
saveFields();
116128
minecraft.setScreen(new MaterialBlockPickerScreen(this, session,
117129
false, id -> surface.addProperty(key, id)));
118-
}));
119-
addRenderableWidget(OreSpawnScreenLayout.plainButton(left + width - 60, y, 60, 20,
130+
}), "guide.orespawn.biomes.3"));
131+
Button clear = addRenderableWidget(OreSpawnScreenLayout.plainButton(
132+
left + width - 60, y, 60, 20,
120133
Component.translatable("button.orespawn.clear"),
121134
button -> { surface.remove(key); rebuildWidgets(); }));
135+
clear.active = !current.isEmpty();
122136
y += 24;
123137
}
124138
fillerDepth = field(left + width / 2, y, width / 2,
125139
integer(surface, "filler_depth", 3));
140+
OreSpawnScreenLayout.explain(fillerDepth, "guide.orespawn.biomes.3");
126141
label(left, y + 6, width / 2 - 5, "option.orespawn.filler_depth");
127142
}
128143

0 commit comments

Comments
 (0)