diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java index 39114b70..0d4a5ca6 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java @@ -17,6 +17,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.data.worldgen.SurfaceRuleData; import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; @@ -24,13 +26,11 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.FeatureSorter; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; -import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.*; import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.synth.NormalNoise; @@ -63,6 +63,12 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto .and(builderInstance.group(noiseGetter, biomeSourceCodec, settingsCodec)) .apply(builderInstance, builderInstance.stable(BCLChunkGenerator::new)); }); + protected static final NoiseSettings NETHER_NOISE_SETTINGS_AMPLIFIED = NoiseSettings.create(0, 256, 1, 4); + public static final ResourceKey AMPLIFIED_NETHER = ResourceKey.create( + Registry.NOISE_GENERATOR_SETTINGS_REGISTRY, + BCLib.makeID("amplified_nether") + ); + public final BiomeSource initialBiomeSource; public BCLChunkGenerator( @@ -226,4 +232,24 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto // // return Holder.direct(noise); } + + + public static NoiseGeneratorSettings amplifiedNether() { + return new NoiseGeneratorSettings( + NETHER_NOISE_SETTINGS_AMPLIFIED, + Blocks.NETHERRACK.defaultBlockState(), + Blocks.LAVA.defaultBlockState(), + NoiseRouterData.noNewCaves( + BuiltinRegistries.DENSITY_FUNCTION, + NoiseRouterData.slideNetherLike(BuiltinRegistries.DENSITY_FUNCTION, 0, 256) + ), + SurfaceRuleData.nether(), + List.of(), + 32, + false, + false, + false, + true + ); + } } diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLNetherBiomeSourceConfig.java b/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLNetherBiomeSourceConfig.java index 41cc5a91..7d9ebbab 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLNetherBiomeSourceConfig.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLNetherBiomeSourceConfig.java @@ -18,33 +18,38 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig o.biomeSizeVertical), Codec.BOOL.fieldOf("use_vertical_biomes") .orElse(DEFAULT.useVerticalBiomes) - .forGetter(o -> o.useVerticalBiomes) + .forGetter(o -> o.useVerticalBiomes), + Codec.BOOL.fieldOf("amplified") + .orElse(DEFAULT.amplified) + .forGetter(o -> o.amplified) ) .apply(instance, BCLNetherBiomeSourceConfig::new)); public final @NotNull NetherBiomeMapType mapVersion; @@ -69,17 +77,20 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig netherPage(BCLNetherBiomeSourceConfig netherConfig) { VerticalStack content = new VerticalStack(fill(), fit()).centerHorizontal(); @@ -78,6 +79,12 @@ public class WorldSetupScreen extends LayoutScreen { netherConfig.mapVersion == BCLNetherBiomeSourceConfig.NetherBiomeMapType.SQUARE ); + netherAmplified = content.indent(20).addCheckbox( + fit(), fit(), + Component.translatable("title.screen.bclib.worldgen.nether_amplified"), + netherConfig.amplified + ); + netherVertical = content.indent(20).addCheckbox( fit(), fit(), Component.translatable("title.screen.bclib.worldgen.nether_vertical"), @@ -109,6 +116,7 @@ public class WorldSetupScreen extends LayoutScreen { bclibNether.onChange((cb, state) -> { netherLegacy.setEnabled(state); + netherAmplified.setEnabled(state); netherVertical.setEnabled(state); netherBiomeSize.setEnabled(state); netherVerticalBiomeSize.setEnabled(state && netherVertical.isChecked()); @@ -234,6 +242,8 @@ public class WorldSetupScreen extends LayoutScreen { private void updateSettings() { Map, ChunkGenerator> betterxDimensions = TogetherWorldPreset.getDimensionsMap( PresetsRegistry.BCL_WORLD); + Map, ChunkGenerator> betterxAmplifiedDimensions = TogetherWorldPreset.getDimensionsMap( + PresetsRegistry.BCL_WORLD_AMPLIFIED); Map, ChunkGenerator> vanillaDimensions = TogetherWorldPreset.getDimensionsMap( WorldPresets.NORMAL); BCLEndBiomeSourceConfig.EndBiomeMapType endVersion = BCLEndBiomeSourceConfig.DEFAULT.mapVersion; @@ -271,10 +281,15 @@ public class WorldSetupScreen extends LayoutScreen { : BCLNetherBiomeSourceConfig.NetherBiomeMapType.HEX, netherBiomeSize.getValue() * 16, netherVerticalBiomeSize.getValue() * 16, - netherVertical.isChecked() + netherVertical.isChecked(), + netherAmplified.isChecked() ); - ChunkGenerator netherGenerator = betterxDimensions.get(LevelStem.NETHER); + ChunkGenerator netherGenerator = ( + netherAmplified.isChecked() + ? betterxAmplifiedDimensions + : betterxDimensions + ).get(LevelStem.NETHER); ((BCLibNetherBiomeSource) netherGenerator.getBiomeSource()).setTogetherConfig(netherConfig); updateConfiguration(LevelStem.NETHER, BuiltinDimensionTypes.NETHER, netherGenerator); diff --git a/src/main/java/org/betterx/bclib/mixin/common/NoiseGeneratorSettingsMixin.java b/src/main/java/org/betterx/bclib/mixin/common/NoiseGeneratorSettingsMixin.java new file mode 100644 index 00000000..849cd249 --- /dev/null +++ b/src/main/java/org/betterx/bclib/mixin/common/NoiseGeneratorSettingsMixin.java @@ -0,0 +1,36 @@ +package org.betterx.bclib.mixin.common; + +import org.betterx.bclib.api.v2.generator.BCLChunkGenerator; + +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(NoiseGeneratorSettings.class) +public abstract class NoiseGeneratorSettingsMixin { + @Shadow + static protected Holder register( + Registry registry, + ResourceKey resourceKey, + NoiseGeneratorSettings noiseGeneratorSettings + ) { + return null; + } + + ; + + @Inject(method = "bootstrap", at = @At("HEAD")) + private static void bcl_addNoiseGenerators( + Registry registry, + CallbackInfoReturnable> cir + ) { + register(registry, BCLChunkGenerator.AMPLIFIED_NETHER, BCLChunkGenerator.amplifiedNether()); + } +} diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java index c47a4e77..c8564ebd 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java @@ -1,6 +1,7 @@ package org.betterx.bclib.registry; import org.betterx.bclib.BCLib; +import org.betterx.bclib.api.v2.generator.BCLChunkGenerator; import org.betterx.bclib.api.v2.generator.config.BCLEndBiomeSourceConfig; import org.betterx.bclib.api.v2.generator.config.BCLNetherBiomeSourceConfig; import org.betterx.bclib.api.v2.levelgen.LevelGenUtil; @@ -19,6 +20,7 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset; import java.util.Map; public class PresetsRegistry implements WorldPresetBootstrap { + public static ResourceKey BCL_WORLD; public static ResourceKey BCL_WORLD_LARGE; public static ResourceKey BCL_WORLD_AMPLIFIED; @@ -31,9 +33,8 @@ public class PresetsRegistry implements WorldPresetBootstrap { (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> buildPreset( overworldStem, - netherContext, - BCLNetherBiomeSourceConfig.DEFAULT, endContext, - BCLEndBiomeSourceConfig.DEFAULT + netherContext, BCLNetherBiomeSourceConfig.DEFAULT, + endContext, BCLEndBiomeSourceConfig.DEFAULT ), true ); @@ -56,23 +57,31 @@ public class PresetsRegistry implements WorldPresetBootstrap { true ); - BCL_WORLD_AMPLIFIED = - WorldPresets.register( - BCLib.makeID("amplified"), - (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { - Holder largeBiomeGenerator = noiseSettings - .getOrCreateHolderOrThrow(NoiseGeneratorSettings.AMPLIFIED); - return buildPreset( - noiseBasedOverworld.make( - overworldStem.generator().getBiomeSource(), - largeBiomeGenerator - ), - netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED, - endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED - ); - }, - true - ); + BCL_WORLD_AMPLIFIED = WorldPresets.register( + BCLib.makeID("amplified"), + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { + Holder amplifiedBiomeGenerator = noiseSettings + .getOrCreateHolderOrThrow(NoiseGeneratorSettings.AMPLIFIED); + + WorldGenUtil.Context amplifiedNetherContext = new WorldGenUtil.Context( + netherContext.biomes, + netherContext.dimension, + netherContext.structureSets, + netherContext.noiseParameters, + Holder.direct(BCLChunkGenerator.amplifiedNether()) + ); + + return buildPreset( + noiseBasedOverworld.make( + overworldStem.generator().getBiomeSource(), + amplifiedBiomeGenerator + ), + amplifiedNetherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_AMPLIFIED, + endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_AMPLIFIED + ); + }, + true + ); BCL_WORLD_17 = WorldPresets.register( BCLib.makeID("legacy_17"), diff --git a/src/main/resources/assets/bclib/lang/de_de.json b/src/main/resources/assets/bclib/lang/de_de.json index 57362d0c..7288a18f 100644 --- a/src/main/resources/assets/bclib/lang/de_de.json +++ b/src/main/resources/assets/bclib/lang/de_de.json @@ -64,6 +64,7 @@ "title.screen.bclib.worldgen.nether_biome_size": "Größe", "title.screen.bclib.worldgen.nether_vertical_biome_size": "Biomhöhe", "title.screen.bclib.worldgen.nether_vertical": "Biome auch vertikal verteilen", + "title.screen.bclib.worldgen.nether_amplified": "Doppelte Höhe", "title.screen.bclib.worldgen.land_biome_size": "Land-Biome", "title.screen.bclib.worldgen.void_biome_size": "Kleine Inseln", "title.screen.bclib.worldgen.center_biome_size": "Zentralbiome", diff --git a/src/main/resources/assets/bclib/lang/en_us.json b/src/main/resources/assets/bclib/lang/en_us.json index d3d35f7e..1c5a527d 100644 --- a/src/main/resources/assets/bclib/lang/en_us.json +++ b/src/main/resources/assets/bclib/lang/en_us.json @@ -67,6 +67,7 @@ "title.screen.bclib.worldgen.nether_biome_size": "Biome Size", "title.screen.bclib.worldgen.nether_vertical_biome_size": "Biome Height", "title.screen.bclib.worldgen.nether_vertical": "Generate vertical Biomes", + "title.screen.bclib.worldgen.nether_amplified": "Double Height", "title.screen.bclib.worldgen.land_biome_size": "Land Biomes", "title.screen.bclib.worldgen.void_biome_size": "Small Island Biomes", "title.screen.bclib.worldgen.center_biome_size": "Central Biomes", diff --git a/src/main/resources/bclib.accesswidener b/src/main/resources/bclib.accesswidener index a9751021..868e9918 100644 --- a/src/main/resources/bclib.accesswidener +++ b/src/main/resources/bclib.accesswidener @@ -21,6 +21,8 @@ accessible method net/minecraft/world/entity/ai/village/poi/PoiTypes register (L accessible method net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource (Ljava/util/List;)V accessible method net/minecraft/core/Registry registerSimple (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Registry$RegistryBootstrap;)Lnet/minecraft/core/Registry; accessible method net/minecraft/world/entity/SpawnPlacements register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/levelgen/Heightmap$Types;Lnet/minecraft/world/entity/SpawnPlacements$SpawnPredicate;)V - +accessible method net/minecraft/world/level/levelgen/NoiseRouterData nether (Lnet/minecraft/core/Registry;)Lnet/minecraft/world/level/levelgen/NoiseRouter; +accessible method net/minecraft/world/level/levelgen/NoiseRouterData noNewCaves (Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/levelgen/DensityFunction;)Lnet/minecraft/world/level/levelgen/NoiseRouter; +accessible method net/minecraft/world/level/levelgen/NoiseRouterData slideNetherLike (Lnet/minecraft/core/Registry;II)Lnet/minecraft/world/level/levelgen/DensityFunction; #Fields accessible field net/minecraft/world/entity/ai/village/poi/PoiTypes TYPE_BY_STATE Ljava/util/Map; \ No newline at end of file