[Feature] New WorldTypes for BetterX + Large Biomes (bclib:large)Overworld or Amplified (bclib:amplified) Overworld (#53)

This commit is contained in:
Frank 2022-11-16 10:09:21 +01:00
parent 6c6aca74b5
commit 42be3dd2c7
8 changed files with 134 additions and 6 deletions

View file

@ -45,6 +45,28 @@ public class BCLEndBiomeSourceConfig implements BiomeSourceConfig<BCLibEndBiomeS
MINECRAFT_17.landBiomesSize, MINECRAFT_17.landBiomesSize,
MINECRAFT_17.barrensBiomesSize MINECRAFT_17.barrensBiomesSize
); );
public static final BCLEndBiomeSourceConfig MINECRAFT_18_LARGE = new BCLEndBiomeSourceConfig(
EndBiomeMapType.HEX,
BCLib.RUNS_NULLSCAPE ? EndBiomeGeneratorType.VANILLA : EndBiomeGeneratorType.PAULEVS,
BCLib.RUNS_NULLSCAPE ? false : true,
MINECRAFT_18.innerVoidRadiusSquared,
MINECRAFT_18.centerBiomesSize,
MINECRAFT_18.voidBiomesSize * 2,
MINECRAFT_18.landBiomesSize * 4,
MINECRAFT_18.barrensBiomesSize * 2
);
public static final BCLEndBiomeSourceConfig MINECRAFT_18_AMPLIFIED = new BCLEndBiomeSourceConfig(
EndBiomeMapType.HEX,
EndBiomeGeneratorType.PAULEVS,
true,
MINECRAFT_18.innerVoidRadiusSquared,
MINECRAFT_18.centerBiomesSize,
MINECRAFT_18.voidBiomesSize,
MINECRAFT_18.landBiomesSize,
MINECRAFT_18.barrensBiomesSize
);
public static final BCLEndBiomeSourceConfig DEFAULT = MINECRAFT_18; public static final BCLEndBiomeSourceConfig DEFAULT = MINECRAFT_18;
public static final Codec<BCLEndBiomeSourceConfig> CODEC = RecordCodecBuilder.create(instance -> instance public static final Codec<BCLEndBiomeSourceConfig> CODEC = RecordCodecBuilder.create(instance -> instance

View file

@ -32,6 +32,21 @@ public class BCLNetherBiomeSourceConfig implements BiomeSourceConfig<BCLibNether
MINECRAFT_17.biomeSizeVertical, MINECRAFT_17.biomeSizeVertical,
MINECRAFT_17.useVerticalBiomes MINECRAFT_17.useVerticalBiomes
); );
public static final BCLNetherBiomeSourceConfig MINECRAFT_18_LARGE = new BCLNetherBiomeSourceConfig(
NetherBiomeMapType.HEX,
MINECRAFT_18.biomeSize * 4,
MINECRAFT_18.biomeSizeVertical * 2,
MINECRAFT_18.useVerticalBiomes
);
public static final BCLNetherBiomeSourceConfig MINECRAFT_18_AMPLIFIED = new BCLNetherBiomeSourceConfig(
NetherBiomeMapType.HEX,
MINECRAFT_18.biomeSize,
MINECRAFT_18.biomeSizeVertical * 2,
false
);
public static final BCLNetherBiomeSourceConfig DEFAULT = MINECRAFT_18; public static final BCLNetherBiomeSourceConfig DEFAULT = MINECRAFT_18;
public static final Codec<BCLNetherBiomeSourceConfig> CODEC = RecordCodecBuilder.create(instance -> instance public static final Codec<BCLNetherBiomeSourceConfig> CODEC = RecordCodecBuilder.create(instance -> instance

View file

@ -10,21 +10,25 @@ import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset; import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.WorldPresets; import org.betterx.worlds.together.worldPreset.WorldPresets;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import java.util.Map; import java.util.Map;
public class PresetsRegistry implements WorldPresetBootstrap { public class PresetsRegistry implements WorldPresetBootstrap {
public static ResourceKey<WorldPreset> BCL_WORLD; public static ResourceKey<WorldPreset> BCL_WORLD;
public static ResourceKey<WorldPreset> BCL_WORLD_LARGE;
public static ResourceKey<WorldPreset> BCL_WORLD_AMPLIFIED;
public static ResourceKey<WorldPreset> BCL_WORLD_17; public static ResourceKey<WorldPreset> BCL_WORLD_17;
public void bootstrapWorldPresets() { public void bootstrapWorldPresets() {
BCL_WORLD = BCL_WORLD =
WorldPresets.register( WorldPresets.register(
BCLib.makeID("normal"), BCLib.makeID("normal"),
(overworldStem, netherContext, endContext) -> (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) ->
buildPreset( buildPreset(
overworldStem, overworldStem,
netherContext, netherContext,
@ -34,9 +38,45 @@ public class PresetsRegistry implements WorldPresetBootstrap {
true true
); );
BCL_WORLD_LARGE =
WorldPresets.register(
BCLib.makeID("large"),
(overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> {
Holder<NoiseGeneratorSettings> 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<NoiseGeneratorSettings> 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( BCL_WORLD_17 = WorldPresets.register(
BCLib.makeID("legacy_17"), BCLib.makeID("legacy_17"),
(overworldStem, netherContext, endContext) -> (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) ->
buildPreset( buildPreset(
overworldStem, overworldStem,
netherContext, netherContext,

View file

@ -12,5 +12,19 @@ public class PresetsRegistryClient {
WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> { WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> {
return new WorldSetupScreen(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);
}
);
} }
} }

View file

@ -6,6 +6,7 @@ import org.betterx.worlds.together.worldPreset.WorldPresets;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.world.level.biome.Biome; 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.DimensionType;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
@ -48,6 +49,16 @@ public abstract class WorldPresetsBootstrapMixin {
//see WorldPresets.register //see WorldPresets.register
@Shadow
protected abstract LevelStem makeNoiseBasedOverworld(
BiomeSource biomeSource,
Holder<NoiseGeneratorSettings> holder
);
@Shadow
@Final
private Registry<NoiseGeneratorSettings> 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;")) @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) { private LevelStem bcl_getOverworldStem(LevelStem overworldStem) {
WorldGenUtil.Context netherContext = new WorldGenUtil.Context( WorldGenUtil.Context netherContext = new WorldGenUtil.Context(
@ -65,7 +76,14 @@ public abstract class WorldPresetsBootstrapMixin {
this.endNoiseSettings this.endNoiseSettings
); );
WorldPresets.bootstrapPresets(presets, overworldStem, netherContext, endContext); WorldPresets.bootstrapPresets(
presets,
overworldStem,
netherContext,
endContext,
noiseSettings,
this::makeNoiseBasedOverworld
);
return overworldStem; return overworldStem;
} }

View file

@ -15,7 +15,9 @@ import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.WorldPresetTags; import net.minecraft.tags.WorldPresetTags;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -24,6 +26,10 @@ import java.util.Map;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
public class WorldPresets { public class WorldPresets {
@FunctionalInterface
public interface OverworldBuilder {
LevelStem make(BiomeSource biomeSource, Holder<NoiseGeneratorSettings> noiseGeneratorSettings);
}
public static final TagRegistry.Simple<WorldPreset> WORLD_PRESETS = public static final TagRegistry.Simple<WorldPreset> WORLD_PRESETS =
TagManager.registerType(BuiltinRegistries.WORLD_PRESET, "tags/worldgen/world_preset"); TagManager.registerType(BuiltinRegistries.WORLD_PRESET, "tags/worldgen/world_preset");
@ -78,17 +84,24 @@ public class WorldPresets {
return key; return key;
} }
@ApiStatus.Internal
public static void bootstrapPresets( public static void bootstrapPresets(
Registry<WorldPreset> presets, Registry<WorldPreset> presets,
LevelStem overworldStem, LevelStem overworldStem,
WorldGenUtil.Context netherContext, WorldGenUtil.Context netherContext,
WorldGenUtil.Context endContext WorldGenUtil.Context endContext,
Registry<NoiseGeneratorSettings> noiseSettings,
OverworldBuilder noiseBasedOverworld
) { ) {
EntrypointUtil.getCommon(WorldPresetBootstrap.class) EntrypointUtil.getCommon(WorldPresetBootstrap.class)
.forEach(e -> e.bootstrapWorldPresets()); .forEach(e -> e.bootstrapWorldPresets());
for (Map.Entry<ResourceKey<WorldPreset>, PresetBuilder> e : BUILDERS.entrySet()) { for (Map.Entry<ResourceKey<WorldPreset>, 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); BuiltinRegistries.register(presets, e.getKey(), preset);
} }
BUILDERS = null; BUILDERS = null;
@ -112,7 +125,9 @@ public class WorldPresets {
TogetherWorldPreset create( TogetherWorldPreset create(
LevelStem overworldStem, LevelStem overworldStem,
WorldGenUtil.Context netherContext, WorldGenUtil.Context netherContext,
WorldGenUtil.Context endContext WorldGenUtil.Context endContext,
Registry<NoiseGeneratorSettings> noiseSettings,
OverworldBuilder noiseBasedOverworld
); );
} }
} }

View file

@ -50,6 +50,8 @@
"title.bclib.datafixer.error.continue": "Continue and Mark as Fixed", "title.bclib.datafixer.error.continue": "Continue and Mark as Fixed",
"tooltip.bclib.place_on": "Lebt auf: %s", "tooltip.bclib.place_on": "Lebt auf: %s",
"generator.bclib.normal": "BetterX", "generator.bclib.normal": "BetterX",
"generator.bclib.large": "Groß & BetterX",
"generator.bclib.amplified": "Ampl. & BetterX",
"title.screen.bclib.worldgen.main": "Welt-Generator Eigenschaften", "title.screen.bclib.worldgen.main": "Welt-Generator Eigenschaften",
"title.bclib.the_nether": "Nether", "title.bclib.the_nether": "Nether",
"title.bclib.the_end": "Das Ende", "title.bclib.the_end": "Das Ende",

View file

@ -54,6 +54,8 @@
"title.config.bclib.client.infos.survives_on_hint": "Show 'Survives On' hint as Tooltip", "title.config.bclib.client.infos.survives_on_hint": "Show 'Survives On' hint as Tooltip",
"tooltip.bclib.place_on": "Survives on: %s", "tooltip.bclib.place_on": "Survives on: %s",
"generator.bclib.normal": "BetterX", "generator.bclib.normal": "BetterX",
"generator.bclib.large": "Large & BetterX",
"generator.bclib.amplified": "Ampl. & BetterX",
"title.screen.bclib.worldgen.main": "World Generator Settings", "title.screen.bclib.worldgen.main": "World Generator Settings",
"title.bclib.the_nether": "The Nether", "title.bclib.the_nether": "The Nether",
"title.bclib.the_end": "The End", "title.bclib.the_end": "The End",