Skip to content

Commit e781033

Browse files
committed
Switch Luminous Grove surface generation to a surface builder.
- Fix Luminous Grove surface generation when TerraBlender is present
1 parent ed3a487 commit e781033

File tree

9 files changed

+56
-89
lines changed

9 files changed

+56
-89
lines changed

worldgen/src/main/java/com/terraformersmc/cinderscapes/mixin/ChunkGeneratorSettingsAccessor.java

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

worldgen/src/main/java/com/terraformersmc/cinderscapes/mixin/MaterialRuleContextAccessor.java

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

worldgen/src/main/java/com/terraformersmc/cinderscapes/mixin/MixinMinecraftServer.java

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

worldgen/src/main/java/com/terraformersmc/cinderscapes/mixin/NoiseChunkGeneratorAccessor.java

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

worldgen/src/main/java/com/terraformersmc/cinderscapes/surfacebuilders/CinderscapesSurfaceBuilders.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ public static void init() {
1616
Blocks.MAGMA_BLOCK.getDefaultState(),
1717
Blocks.LAVA.getDefaultState()
1818
).setBiomeKey(CinderscapesBiomes.ASHY_SHOALS));
19+
20+
builders.add(new LuminousGroveSurfaceBuilder(
21+
CinderscapesBlocks.UMBRAL_NYLIUM.getDefaultState(),
22+
CinderscapesBlocks.UMBRAL_WART_BLOCK.getDefaultState(),
23+
Blocks.NETHERRACK.getDefaultState()
24+
).setBiomeKey(CinderscapesBiomes.LUMINOUS_GROVE));
1925
}
2026

2127
public static ArrayList<CinderscapesSurfaceBuilder> getBuilders() {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.terraformersmc.cinderscapes.surfacebuilders;
2+
3+
import net.minecraft.block.BlockState;
4+
import net.minecraft.tag.BiomeTags;
5+
import net.minecraft.util.math.BlockPos;
6+
import net.minecraft.util.registry.RegistryEntry;
7+
import net.minecraft.world.biome.Biome;
8+
import net.minecraft.world.biome.source.BiomeAccess;
9+
import net.minecraft.world.chunk.Chunk;
10+
import net.minecraft.world.gen.chunk.BlockColumn;
11+
import net.minecraft.world.gen.random.AbstractRandom;
12+
13+
public class LuminousGroveSurfaceBuilder extends CinderscapesSurfaceBuilder {
14+
private final BlockState topMaterial;
15+
private final BlockState midMaterial;
16+
private final BlockState lowMaterial;
17+
18+
public LuminousGroveSurfaceBuilder(BlockState topMaterial, BlockState midMaterial, BlockState lowMaterial) {
19+
this.topMaterial = topMaterial;
20+
this.midMaterial = midMaterial;
21+
this.lowMaterial = lowMaterial;
22+
}
23+
24+
@Override
25+
public void generate(BiomeAccess biomeAccess, BlockColumn column, AbstractRandom rand, Chunk chunk, Biome biome, int x, int z, int vHeight, int seaLevel) {
26+
BlockPos pos = new BlockPos(x, -128, z);
27+
boolean inAir = false;
28+
29+
// Set in-biome netherrack
30+
for (int y = chunk.getTopY() - 6; y >= seaLevel - 1; --y) {
31+
BlockState state = column.getState(y);
32+
if (state.isAir()) {
33+
inAir = true;
34+
} else {
35+
if (inAir && state.isOf(lowMaterial.getBlock()) && biomeAccess.getBiome(pos.withY(y)).matchesKey(biomeKey)) {
36+
column.setState(y, rand.nextFloat() < 0.99f ? topMaterial : midMaterial);
37+
}
38+
inAir = false;
39+
}
40+
}
41+
}
42+
43+
@Override
44+
public boolean filterBiome(RegistryEntry<Biome> biome) {
45+
return biome.isIn(BiomeTags.IS_NETHER);
46+
}
47+
}

worldgen/src/main/java/com/terraformersmc/cinderscapes/surfacerules/CinderscapesSurfaceRules.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public class CinderscapesSurfaceRules {
2222
MaterialRules.block(CinderscapesBlocks.UMBRAL_WART_BLOCK.getDefaultState())),
2323
MaterialRules.block(CinderscapesBlocks.UMBRAL_NYLIUM.getDefaultState())))))));
2424

25+
// TODO: Actually ATM there are no active Cinderscapes surface rules. TerraBlender when present overwrites them.
26+
// When we migrate to TerraBlender, consider whether to migrate back from surface builders to surface rules...
2527
// At the moment, there's just Luminous Grove. To add another, wrap them in MaterialRules.sequence()
2628
public static final MaterialRules.MaterialRule CINDERSCAPES_NETHER_RULES = LUMINOUS_GROVE;
2729

worldgen/src/main/resources/cinderscapes-worldgen.accesswidener

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,5 @@ accessWidener v1 named
22

33
accessible class net/minecraft/world/gen/surfacebuilder/MaterialRules$BlockStateRule
44
accessible class net/minecraft/world/gen/surfacebuilder/MaterialRules$MaterialRuleContext
5-
accessible class net/minecraft/world/gen/surfacebuilder/MaterialRules$BooleanSupplier
6-
accessible method net/minecraft/world/gen/surfacebuilder/MaterialRules$MaterialRuleContext initVerticalContext (IIIIII)V
7-
accessible field net/minecraft/world/gen/surfacebuilder/MaterialRules$MaterialRuleContext surfaceBuilder Lnet/minecraft/world/gen/surfacebuilder/SurfaceBuilder;
85
accessible method net/minecraft/world/gen/surfacebuilder/MaterialRules$MaterialRuleContext method_39551 ()I
96
accessible method net/minecraft/world/gen/surfacebuilder/SurfaceBuilder getNoiseSampler (Lnet/minecraft/util/registry/RegistryKey;)Lnet/minecraft/util/math/noise/DoublePerlinNoiseSampler;

worldgen/src/main/resources/mixins.cinderscapes-worldgen.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,8 @@
33
"package": "com.terraformersmc.cinderscapes.mixin",
44
"compatibilityLevel": "JAVA_17",
55
"mixins": [
6-
"ChunkGeneratorSettingsAccessor",
7-
"MaterialRuleContextAccessor",
8-
"MixinMinecraftServer",
96
"MixinNetherCaveCarver",
10-
"MixinSurfaceBuilder",
11-
"NoiseChunkGeneratorAccessor"
7+
"MixinSurfaceBuilder"
128
],
139
"client": [
1410
],

0 commit comments

Comments
 (0)