Skip to content

Commit

Permalink
fix filtering of biomes
Browse files Browse the repository at this point in the history
  • Loading branch information
MelanX committed Jul 21, 2023
1 parent a1838ee commit bda4c5c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import de.melanx.skyblockbuilder.SkyblockBuilder;
import de.melanx.skyblockbuilder.config.common.WorldConfig;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
Expand All @@ -15,7 +16,7 @@

public class BiomeSourceConverter {

public static BiomeSource customBiomeSource(ResourceKey<Level> level, BiomeSource baseSource) {
public static BiomeSource customBiomeSource(ResourceKey<Level> level, BiomeSource baseSource, HolderLookup<Biome> biomes) {
ResourceList resourceList = WorldConfig.biomes.get(level.location().toString());
if (resourceList != null) {
Set<Holder<Biome>> newBiomes = new HashSet<>();
Expand All @@ -30,6 +31,8 @@ public static BiomeSource customBiomeSource(ResourceKey<Level> level, BiomeSourc
}

if (newBiomes.isEmpty()) {
biomes.listElementIds().filter(lol -> resourceList.test(lol.location())).forEach(key -> newBiomes.add(biomes.getOrThrow(key)));
} else {
SkyblockBuilder.getLogger().warn("Skipping biome filtering as all biomes were filtered out: " + level);
newBiomes.addAll(baseSource.possibleBiomes());
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/de/melanx/skyblockbuilder/util/CoreUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static Codec<WorldPreset> augmentWorldPresetCodec(Codec<WorldPreset> code
RegistryOps.retrieveGetter(Registries.DIMENSION_TYPE),
RegistryOps.retrieveGetter(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST),
RegistryOps.retrieveGetter(Registries.NOISE_SETTINGS),
RegistryOps.retrieveGetter(Registries.BIOME)
RegistryOps.retrieveRegistryLookup(Registries.BIOME).forGetter(SkyblockPreset::getBiomes)
).apply(instance, SkyblockPreset::new));

MapCodec<Unit> skyblockCodecId = Codec.STRING.fieldOf("type").flatXmap(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import de.melanx.skyblockbuilder.world.chunkgenerators.SkyblockNoiseBasedChunkGenerator;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter;
import net.minecraft.core.HolderLookup;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.*;
Expand All @@ -32,18 +33,24 @@ public class SkyblockPreset extends WorldPreset {

// Must be lazy as we can't access the full registry while seserialising.
private final LazyValue<WorldPreset> actualPreset;
private final HolderLookup.RegistryLookup<Biome> biomes;

public SkyblockPreset(
HolderGetter<DimensionType> dimensionTypes,
HolderGetter<MultiNoiseBiomeSourceParameterList> noises,
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderGetter<Biome> biomes
HolderLookup.RegistryLookup<Biome> biomes
) {
// Dummy map
super(Map.of());
this.actualPreset = new LazyValue<>(() -> new WorldPreset(dimensions(
dimensionTypes, noises, noiseGeneratorSettings, biomes
)));
this.biomes = biomes;
}

public HolderLookup.RegistryLookup<Biome> getBiomes() {
return this.biomes;
}

@Nonnull
Expand All @@ -62,15 +69,15 @@ public static Map<ResourceKey<LevelStem>, LevelStem> dimensions(
HolderGetter<DimensionType> dimensionTypes,
HolderGetter<MultiNoiseBiomeSourceParameterList> noises,
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderGetter<Biome> biomes
HolderLookup<Biome> biomes
) {
return Map.of(
LevelStem.OVERWORLD, new LevelStem(dimensionTypes.getOrThrow(BuiltinDimensionTypes.OVERWORLD),
configuredOverworldChunkGenerator(noises, noiseGeneratorSettings)),
configuredOverworldChunkGenerator(noises, noiseGeneratorSettings, biomes)),
LevelStem.NETHER, new LevelStem(dimensionTypes.getOrThrow(BuiltinDimensionTypes.NETHER),
DimensionsConfig.Nether.Default ?
WorldPresetUtil.defaultNetherGenerator(noises, noiseGeneratorSettings)
: netherChunkGenerator(noises, noiseGeneratorSettings)),
: netherChunkGenerator(noises, noiseGeneratorSettings, biomes)),
LevelStem.END, new LevelStem(dimensionTypes.getOrThrow(BuiltinDimensionTypes.END),
DimensionsConfig.End.Default ?
WorldPresetUtil.defaultEndGenerator(noiseGeneratorSettings, biomes)
Expand All @@ -80,38 +87,41 @@ LevelStem.END, new LevelStem(dimensionTypes.getOrThrow(BuiltinDimensionTypes.END

public static ChunkGenerator configuredOverworldChunkGenerator(
HolderGetter<MultiNoiseBiomeSourceParameterList> noises,
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderLookup<Biome> biomes
) {
return DimensionsConfig.Overworld.Default ?
new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(noises.getOrThrow(MultiNoiseBiomeSourceParameterLists.OVERWORLD)), noiseGeneratorSettings.getOrThrow(NoiseGeneratorSettings.OVERWORLD))
: overworldChunkGenerator(noises, noiseGeneratorSettings);
: overworldChunkGenerator(noises, noiseGeneratorSettings, biomes);
}

public static ChunkGenerator overworldChunkGenerator(
HolderGetter<MultiNoiseBiomeSourceParameterList> noises,
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderLookup<Biome> biomes
) {
MultiNoiseBiomeSource biomeSource = (MultiNoiseBiomeSource) BiomeSourceConverter.customBiomeSource(Level.OVERWORLD, MultiNoiseBiomeSource.createFromPreset(noises.getOrThrow(MultiNoiseBiomeSourceParameterLists.OVERWORLD)));
MultiNoiseBiomeSource biomeSource = (MultiNoiseBiomeSource) BiomeSourceConverter.customBiomeSource(Level.OVERWORLD, MultiNoiseBiomeSource.createFromPreset(noises.getOrThrow(MultiNoiseBiomeSourceParameterLists.OVERWORLD)), biomes);
Holder<NoiseGeneratorSettings> settings = noiseGeneratorSettings.getOrThrow(NoiseGeneratorSettings.OVERWORLD);

return new SkyblockNoiseBasedChunkGenerator(biomeSource, settings, Level.OVERWORLD, SkyblockPreset.getLayers(Level.OVERWORLD));
}

private static ChunkGenerator netherChunkGenerator(
HolderGetter<MultiNoiseBiomeSourceParameterList> noises,
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderLookup<Biome> biomes
) {
BiomeSource biomeSource = BiomeSourceConverter.customBiomeSource(Level.NETHER, MultiNoiseBiomeSource.createFromPreset(noises.getOrThrow(MultiNoiseBiomeSourceParameterLists.NETHER)));
BiomeSource biomeSource = BiomeSourceConverter.customBiomeSource(Level.NETHER, MultiNoiseBiomeSource.createFromPreset(noises.getOrThrow(MultiNoiseBiomeSourceParameterLists.NETHER)), biomes);
Holder<NoiseGeneratorSettings> settings = noiseGeneratorSettings.getOrThrow(NoiseGeneratorSettings.NETHER);

return new SkyblockNoiseBasedChunkGenerator(biomeSource, settings, Level.NETHER, SkyblockPreset.getLayers(Level.NETHER));
}

private static ChunkGenerator endChunkGenerator(
HolderGetter<NoiseGeneratorSettings> noiseGeneratorSettings,
HolderGetter<Biome> biomes
HolderLookup<Biome> biomes
) {
TheEndBiomeSource biomeSource = (TheEndBiomeSource) BiomeSourceConverter.customBiomeSource(Level.END, TheEndBiomeSource.create(biomes));
TheEndBiomeSource biomeSource = (TheEndBiomeSource) BiomeSourceConverter.customBiomeSource(Level.END, TheEndBiomeSource.create(biomes), biomes);
Holder<NoiseGeneratorSettings> settings = noiseGeneratorSettings.getOrThrow(NoiseGeneratorSettings.END);

return new SkyblockEndChunkGenerator(biomeSource, settings, Level.END, SkyblockPreset.getLayers(Level.END));
Expand Down

0 comments on commit bda4c5c

Please sign in to comment.