diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLEndBiomeSourceConfig.java b/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLEndBiomeSourceConfig.java index 0a76e88d..177ac98c 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLEndBiomeSourceConfig.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/config/BCLEndBiomeSourceConfig.java @@ -45,6 +45,28 @@ public class BCLEndBiomeSourceConfig implements BiomeSourceConfig CODEC = RecordCodecBuilder.create(instance -> instance 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 4d8c5249..ac892e4f 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 @@ -32,6 +32,21 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig CODEC = RecordCodecBuilder.create(instance -> instance diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java index 3cd61b77..c47a4e77 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java @@ -10,21 +10,25 @@ import org.betterx.worlds.together.levelgen.WorldGenUtil; import org.betterx.worlds.together.worldPreset.TogetherWorldPreset; import org.betterx.worlds.together.worldPreset.WorldPresets; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; 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; public static ResourceKey BCL_WORLD_17; public void bootstrapWorldPresets() { BCL_WORLD = WorldPresets.register( BCLib.makeID("normal"), - (overworldStem, netherContext, endContext) -> + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> buildPreset( overworldStem, netherContext, @@ -34,9 +38,45 @@ public class PresetsRegistry implements WorldPresetBootstrap { true ); + BCL_WORLD_LARGE = + WorldPresets.register( + BCLib.makeID("large"), + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { + Holder largeBiomeGenerator = noiseSettings + .getOrCreateHolderOrThrow(NoiseGeneratorSettings.LARGE_BIOMES); + return buildPreset( + noiseBasedOverworld.make( + overworldStem.generator().getBiomeSource(), + largeBiomeGenerator + ), + netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_LARGE, + endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_LARGE + ); + }, + 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_17 = WorldPresets.register( BCLib.makeID("legacy_17"), - (overworldStem, netherContext, endContext) -> + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> buildPreset( overworldStem, netherContext, diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java index be28feb3..f2a9e9e3 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java @@ -12,5 +12,19 @@ public class PresetsRegistryClient { WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> { return new WorldSetupScreen(createWorldScreen, worldCreationContext); }); + + WorldPresetsClient.registerCustomizeUI( + PresetsRegistry.BCL_WORLD_LARGE, + (createWorldScreen, worldCreationContext) -> { + return new WorldSetupScreen(createWorldScreen, worldCreationContext); + } + ); + + WorldPresetsClient.registerCustomizeUI( + PresetsRegistry.BCL_WORLD_AMPLIFIED, + (createWorldScreen, worldCreationContext) -> { + return new WorldSetupScreen(createWorldScreen, worldCreationContext); + } + ); } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java index 0d1cd6a0..763fd4ab 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java @@ -6,6 +6,7 @@ import org.betterx.worlds.together.worldPreset.WorldPresets; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; @@ -48,6 +49,16 @@ public abstract class WorldPresetsBootstrapMixin { //see WorldPresets.register + @Shadow + protected abstract LevelStem makeNoiseBasedOverworld( + BiomeSource biomeSource, + Holder holder + ); + + @Shadow + @Final + private Registry noiseSettings; + @ModifyArg(method = "run", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;")) private LevelStem bcl_getOverworldStem(LevelStem overworldStem) { WorldGenUtil.Context netherContext = new WorldGenUtil.Context( @@ -65,7 +76,14 @@ public abstract class WorldPresetsBootstrapMixin { this.endNoiseSettings ); - WorldPresets.bootstrapPresets(presets, overworldStem, netherContext, endContext); + WorldPresets.bootstrapPresets( + presets, + overworldStem, + netherContext, + endContext, + noiseSettings, + this::makeNoiseBasedOverworld + ); return overworldStem; } diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java index a77273f7..3d7bf3b3 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java @@ -15,7 +15,9 @@ import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.WorldPresetTags; +import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.presets.WorldPreset; import com.google.common.collect.Maps; @@ -24,6 +26,10 @@ import java.util.Map; import org.jetbrains.annotations.ApiStatus; public class WorldPresets { + @FunctionalInterface + public interface OverworldBuilder { + LevelStem make(BiomeSource biomeSource, Holder noiseGeneratorSettings); + } public static final TagRegistry.Simple WORLD_PRESETS = TagManager.registerType(BuiltinRegistries.WORLD_PRESET, "tags/worldgen/world_preset"); @@ -78,17 +84,24 @@ public class WorldPresets { return key; } + @ApiStatus.Internal public static void bootstrapPresets( Registry presets, LevelStem overworldStem, WorldGenUtil.Context netherContext, - WorldGenUtil.Context endContext + WorldGenUtil.Context endContext, + Registry noiseSettings, + OverworldBuilder noiseBasedOverworld ) { EntrypointUtil.getCommon(WorldPresetBootstrap.class) .forEach(e -> e.bootstrapWorldPresets()); for (Map.Entry, PresetBuilder> e : BUILDERS.entrySet()) { - TogetherWorldPreset preset = e.getValue().create(overworldStem, netherContext, endContext); + TogetherWorldPreset preset = e.getValue() + .create( + overworldStem, netherContext, endContext, + noiseSettings, noiseBasedOverworld + ); BuiltinRegistries.register(presets, e.getKey(), preset); } BUILDERS = null; @@ -112,7 +125,9 @@ public class WorldPresets { TogetherWorldPreset create( LevelStem overworldStem, WorldGenUtil.Context netherContext, - WorldGenUtil.Context endContext + WorldGenUtil.Context endContext, + Registry noiseSettings, + OverworldBuilder noiseBasedOverworld ); } } diff --git a/src/main/resources/assets/bclib/lang/de_de.json b/src/main/resources/assets/bclib/lang/de_de.json index 2378a3b9..a0894018 100644 --- a/src/main/resources/assets/bclib/lang/de_de.json +++ b/src/main/resources/assets/bclib/lang/de_de.json @@ -50,6 +50,8 @@ "title.bclib.datafixer.error.continue": "Continue and Mark as Fixed", "tooltip.bclib.place_on": "Lebt auf: %s", "generator.bclib.normal": "BetterX", + "generator.bclib.large": "Groß & BetterX", + "generator.bclib.amplified": "Ampl. & BetterX", "title.screen.bclib.worldgen.main": "Welt-Generator Eigenschaften", "title.bclib.the_nether": "Nether", "title.bclib.the_end": "Das Ende", diff --git a/src/main/resources/assets/bclib/lang/en_us.json b/src/main/resources/assets/bclib/lang/en_us.json index 79ba425f..711c1215 100644 --- a/src/main/resources/assets/bclib/lang/en_us.json +++ b/src/main/resources/assets/bclib/lang/en_us.json @@ -54,6 +54,8 @@ "title.config.bclib.client.infos.survives_on_hint": "Show 'Survives On' hint as Tooltip", "tooltip.bclib.place_on": "Survives on: %s", "generator.bclib.normal": "BetterX", + "generator.bclib.large": "Large & BetterX", + "generator.bclib.amplified": "Ampl. & BetterX", "title.screen.bclib.worldgen.main": "World Generator Settings", "title.bclib.the_nether": "The Nether", "title.bclib.the_end": "The End",