diff --git a/docs/PORTING.md b/docs/PORTING.md index 6b3534b..e3bc694 100644 --- a/docs/PORTING.md +++ b/docs/PORTING.md @@ -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 diff --git a/gradle.properties b/gradle.properties index 9e29c03..70f6be3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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. diff --git a/src/main/java/net/dnorberg/rivencraft/book/AgeDimensionService.java b/src/main/java/net/dnorberg/rivencraft/book/AgeDimensionService.java index b51bf3e..ef331fc 100644 --- a/src/main/java/net/dnorberg/rivencraft/book/AgeDimensionService.java +++ b/src/main/java/net/dnorberg/rivencraft/book/AgeDimensionService.java @@ -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 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() - ) - ); - } }