[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

@ -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<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;"))
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;
}

View file

@ -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> noiseGeneratorSettings);
}
public static final TagRegistry.Simple<WorldPreset> 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<WorldPreset> presets,
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
WorldGenUtil.Context endContext
WorldGenUtil.Context endContext,
Registry<NoiseGeneratorSettings> noiseSettings,
OverworldBuilder noiseBasedOverworld
) {
EntrypointUtil.getCommon(WorldPresetBootstrap.class)
.forEach(e -> e.bootstrapWorldPresets());
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);
}
BUILDERS = null;
@ -112,7 +125,9 @@ public class WorldPresets {
TogetherWorldPreset create(
LevelStem overworldStem,
WorldGenUtil.Context netherContext,
WorldGenUtil.Context endContext
WorldGenUtil.Context endContext,
Registry<NoiseGeneratorSettings> noiseSettings,
OverworldBuilder noiseBasedOverworld
);
}
}