Use Overworld generation for cave and skylands Ages
Build / build (push) Canceled after 0s

This commit is contained in:
dnorberg committed 2026-09-22 06:10:07 -04:00
1 parent ee388f2b55
commit 0182684231
3 files changed
+11 -54

No files matched your search

+4
View File
@@ -248,6 +248,10 @@ honor the server's loaded data packs. Automated coverage also verifies that a
live Age's seed equals its immutable saved definition; Dynamic Dimensions
derives both from the Overworld seed and the Age dimension identifier.
Version 0.2.16.11 moves Cave and Island/Skylands Ages onto the standard
Overworld biome, terrain, surface, structure, and feature pipeline. They no
longer inherit Nether or End generation and dimension behavior.
Version 0.2.14.0 restores the legacy Linking and Descriptive Book artwork for
inventory items and gives each book its matching open-book texture when placed
on a Book Stand. Return Linking Books created inside another Age also retain and
+1 -1
View File
@@ -35,7 +35,7 @@ mod_name=Rivencraft
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=LGPL-3.0-or-later
# The mod version. Rivencraft uses the x.y.z.b policy documented in README.md.
mod_version=0.2.16.10
mod_version=0.2.16.11
immersive_portals_version=6.0.7
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
@@ -22,7 +22,6 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.MultiNoiseBiomeSource;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterLists;
import net.minecraft.world.level.biome.TheEndBiomeSource;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.DimensionType;
@@ -49,7 +48,7 @@ public final class AgeDimensionService {
loader.loadDynamicDimension(
age.dimensionId(),
createGenerator(server, age),
createDimensionType(server, age)
createDimensionType()
);
}
synchronizeImmersivePortals(server);
@@ -86,7 +85,7 @@ public final class AgeDimensionService {
ServerLevel loaded = DynamicDimensionRegistry.from(server).loadDynamicDimension(
definition.dimensionId(),
createGenerator(server, definition),
createDimensionType(server, definition)
createDimensionType()
);
if (loaded == null) {
Rivencraft.LOGGER.error("Failed to load Age {} as {}", definition.id(), definition.dimensionId());
@@ -208,26 +207,15 @@ public final class AgeDimensionService {
return new FlatLevelSource(settings);
}
var biomes = server.registryAccess().lookupOrThrow(Registries.BIOME);
var biomeParameters = server.registryAccess()
.lookupOrThrow(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST);
var noiseSettings = server.registryAccess().lookupOrThrow(Registries.NOISE_SETTINGS);
if (profile.equals(AgeGenerationProfiles.CAVE)) {
return new NoiseBasedChunkGenerator(
MultiNoiseBiomeSource.createFromPreset(
biomeParameters.getOrThrow(MultiNoiseBiomeSourceParameterLists.NETHER)),
noiseSettings.getOrThrow(NoiseGeneratorSettings.NETHER)
);
}
if (profile.equals(AgeGenerationProfiles.ISLAND)) {
return new NoiseBasedChunkGenerator(
TheEndBiomeSource.create(biomes),
noiseSettings.getOrThrow(NoiseGeneratorSettings.END)
);
}
ResourceKey<NoiseGeneratorSettings> settingsKey = profile.equals(AgeGenerationProfiles.AMPLIFIED)
? NoiseGeneratorSettings.AMPLIFIED
: NoiseGeneratorSettings.OVERWORLD;
// Cave and Island/Skylands currently describe an Age's theme. Their
// terrain, biomes, surfaces, structures, and features use the standard
// Overworld pipeline until their dedicated terrain modifiers land.
// random_vanilla is retained as a migration alias for existing Ages.
return new NoiseBasedChunkGenerator(
MultiNoiseBiomeSource.createFromPreset(
@@ -236,13 +224,7 @@ public final class AgeDimensionService {
);
}
private static DimensionType createDimensionType(MinecraftServer server, AgeDefinition age) {
if (age.generationProfile().equals(AgeGenerationProfiles.CAVE)) {
return copyDimensionType(server.getLevel(Level.NETHER).dimensionType());
}
if (age.generationProfile().equals(AgeGenerationProfiles.ISLAND)) {
return copyDimensionType(server.getLevel(Level.END).dimensionType());
}
private static DimensionType createDimensionType() {
return new DimensionType(
OptionalLong.empty(),
true,
@@ -262,33 +244,4 @@ public final class AgeDimensionService {
);
}
/** Dynamic Dimensions registers one dimension-type value per Age, so each needs a distinct instance graph. */
private static DimensionType copyDimensionType(DimensionType type) {
DimensionType.MonsterSettings monsters = type.monsterSettings();
return new DimensionType(
type.fixedTime(),
type.hasSkyLight(),
type.hasCeiling(),
type.ultraWarm(),
type.natural(),
type.coordinateScale(),
type.bedWorks(),
type.respawnAnchorWorks(),
type.minY(),
type.height(),
type.logicalHeight(),
type.infiniburn(),
type.effectsLocation(),
type.ambientLight(),
new DimensionType.MonsterSettings(
monsters.piglinSafe(),
monsters.hasRaids(),
UniformInt.of(
monsters.monsterSpawnLightTest().getMinValue(),
monsters.monsterSpawnLightTest().getMaxValue()
),
monsters.monsterSpawnBlockLightLimit()
)
);
}
}