This commit is contained in:
Brian Neumann-Fopiano
2026-07-16 19:38:53 -04:00
parent e8dd4e1127
commit 0193f75daa
21 changed files with 272 additions and 180 deletions
@@ -242,10 +242,10 @@ final class IrisModdedBiomeSource extends BiomeSource {
throw new IllegalStateException("Iris returned no surface structure biome at quart "
+ quartX + "," + quartZ);
}
Holder<Biome> resolved = resolveHolder(registry, irisBiome.getVanillaDerivativeKey());
Holder<Biome> resolved = resolveHolder(registry, irisBiome.getStructureDerivativeKey());
if (resolved == null) {
throw new IllegalStateException("Iris structure biome derivative '"
+ irisBiome.getVanillaDerivativeKey() + "' is not registered at quart "
+ irisBiome.getStructureDerivativeKey() + "' is not registered at quart "
+ quartX + "," + quartZ);
}
return resolved;
@@ -262,10 +262,10 @@ final class IrisModdedBiomeSource extends BiomeSource {
if (registry == null) {
throw new IllegalStateException("Iris structure biome lookup has no biome registry");
}
Holder<Biome> resolved = resolveHolder(registry, resolution.irisBiome().getVanillaDerivativeKey());
Holder<Biome> resolved = resolveHolder(registry, resolution.irisBiome().getStructureDerivativeKey());
if (resolved == null) {
throw new IllegalStateException("Iris structure biome derivative '"
+ resolution.irisBiome().getVanillaDerivativeKey() + "' is not registered at block "
+ resolution.irisBiome().getStructureDerivativeKey() + "' is not registered at block "
+ resolution.blockX() + "," + resolution.blockY() + "," + resolution.blockZ());
}
return resolved;
@@ -353,7 +353,7 @@ final class IrisModdedBiomeSource extends BiomeSource {
throw new IllegalStateException("Iris returned no structure biome at quart "
+ quartX + "," + quartY + "," + quartZ);
}
String derivativeKey = irisBiome.getVanillaDerivativeKey();
String derivativeKey = irisBiome.getStructureDerivativeKey();
Holder<Biome> resolved = resolveHolder(registry, derivativeKey);
if (resolved == null) {
throw new IllegalStateException("Iris structure biome derivative '" + derivativeKey
@@ -435,7 +435,7 @@ final class IrisModdedBiomeSource extends BiomeSource {
LinkedHashSet<String> possible = new LinkedHashSet<>();
String namespace = engine.getDimension().getLoadKey().toLowerCase(Locale.ROOT);
for (IrisBiome irisBiome : engine.getAllBiomes()) {
String derivative = normalizeKey(irisBiome.getVanillaDerivativeKey());
String derivative = normalizeKey(irisBiome.getStructureDerivativeKey());
if (derivative != null) {
possible.add(derivative);
}
@@ -28,6 +28,7 @@ import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisBiomeCustom;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisNativeStructureDecision;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.engine.object.IrisStructureStiltSettings;
import art.arcane.iris.engine.object.NativeStructureGenerationStatus;
import art.arcane.iris.nativegen.NativeStructureGenerationException;
@@ -611,7 +612,20 @@ public final class IrisModdedChunkGenerator extends ChunkGenerator {
}
static Set<String> collectConfiguredBiomeKeys(IrisDimension dimension, IrisData data) {
return collectConfiguredBiomeKeys(dimension.getReachableBiomes(() -> data), dimension.getLoadKey());
LinkedHashSet<String> keys = new LinkedHashSet<>(
collectConfiguredBiomeKeys(dimension.getReachableBiomes(() -> data), dimension.getLoadKey()));
for (IrisRegion region : dimension.getAllRegions(() -> data)) {
if (region == null) {
continue;
}
if (!region.getSeaBiomes().isEmpty()) {
keys.add("minecraft:the_void");
}
if (!region.getShoreBiomes().isEmpty()) {
keys.add("minecraft:beach");
}
}
return Set.copyOf(keys);
}
static Set<String> collectConfiguredBiomeKeys(Iterable<IrisBiome> biomes, String dimensionLoadKey) {
@@ -621,7 +635,7 @@ public final class IrisModdedChunkGenerator extends ChunkGenerator {
if (irisBiome == null) {
continue;
}
Identifier derivative = Identifier.tryParse(irisBiome.getVanillaDerivativeKey());
Identifier derivative = Identifier.tryParse(irisBiome.getStructureDerivativeKey());
if (derivative != null) {
keys.add(derivative.toString().toLowerCase(Locale.ROOT));
}
@@ -4,6 +4,7 @@ import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisBiomeCustom;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisRange;
import art.arcane.iris.engine.object.InferredType;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import net.minecraft.SharedConstants;
@@ -101,11 +102,18 @@ public class IrisModdedStructureParityTest {
IrisBiome custom = new IrisBiome()
.setDerivative("forest")
.setCustomDerivitives(new KList<>(new IrisBiomeCustom().setId("Aurora")));
IrisBiome shore = new IrisBiome()
.setVanillaDerivative("minecraft:desert")
.setInferredType(InferredType.SHORE);
IrisBiome unsafeSea = new IrisBiome()
.setVanillaDerivative("minecraft:plains")
.setInferredType(InferredType.SEA);
Set<String> keys = IrisModdedChunkGenerator.collectConfiguredBiomeKeys(
List.of(ocean, custom), "OverWorld");
List.of(ocean, custom, shore, unsafeSea), "OverWorld");
assertEquals(Set.of("minecraft:deep_ocean", "minecraft:forest", "overworld:aurora"), keys);
assertEquals(Set.of("minecraft:deep_ocean", "minecraft:forest", "minecraft:beach",
"minecraft:the_void", "overworld:aurora"), keys);
assertFalse(keys.contains("minecraft:desert"));
assertFalse(keys.contains("minecraft:plains"));
}