diff --git a/src/main/java/biomesoplenty/common/util/biome/BiomeUtil.java b/src/main/java/biomesoplenty/common/util/biome/BiomeUtil.java index 229c79efc..35c7a9630 100644 --- a/src/main/java/biomesoplenty/common/util/biome/BiomeUtil.java +++ b/src/main/java/biomesoplenty/common/util/biome/BiomeUtil.java @@ -8,6 +8,7 @@ package biomesoplenty.common.util.biome; import biomesoplenty.common.biome.BiomeMetadata; +import biomesoplenty.core.BiomesOPlenty; import biomesoplenty.init.ModBiomes; import net.minecraft.util.RegistryKey; import net.minecraft.util.registry.DynamicRegistries; @@ -31,21 +32,21 @@ public class BiomeUtil public static Biome getBiome(RegistryKey key) { Biome biome = ForgeRegistries.BIOMES.getValue(key.location()); - if (biome == null) throw new RuntimeException("Attempted to get unregistered biome " + key); + if (biome == null) BiomesOPlenty.logger.error("Attempted to get unregistered biome " + key); return biome; } public static Biome getBiome(int id) { - if (id == -1) throw new RuntimeException("Attempted to get biome with id -1"); + if (id == -1) BiomesOPlenty.logger.error("Attempted to get biome with id -1"); return getBiome(((ForgeRegistry)ForgeRegistries.BIOMES).getKey(id)); } public static int getBiomeId(Biome biome) { - if (biome == null) throw new RuntimeException("Attempted to get id of null biome"); + if (biome == null) BiomesOPlenty.logger.error("Attempted to get id of null biome"); int id = ((ForgeRegistry)ForgeRegistries.BIOMES).getID(biome); - if (id == -1) throw new RuntimeException("Biome id is -1 for biome " + biome.delegate.name()); + if (id == -1) BiomesOPlenty.logger.error("Biome id is -1 for biome " + biome.delegate.name()); return id; } diff --git a/src/main/java/biomesoplenty/common/world/BOPBiomeGeneratorTypeScreen.java b/src/main/java/biomesoplenty/common/world/BOPBiomeGeneratorTypeScreen.java index 0a531cd04..6378be25f 100644 --- a/src/main/java/biomesoplenty/common/world/BOPBiomeGeneratorTypeScreen.java +++ b/src/main/java/biomesoplenty/common/world/BOPBiomeGeneratorTypeScreen.java @@ -28,7 +28,7 @@ public class BOPBiomeGeneratorTypeScreen extends BiomeGeneratorTypeScreens @Override protected ChunkGenerator generator(Registry biomeRegistry, Registry dimensionSettingsRegistry, long seed) { - return BOPWorldTypeUtil.createChunkGenerator(seed); + return BOPWorldTypeUtil.makeOverworld(biomeRegistry, dimensionSettingsRegistry, seed); } @Override diff --git a/src/main/java/biomesoplenty/common/world/BOPBiomeProvider.java b/src/main/java/biomesoplenty/common/world/BOPBiomeProvider.java index 45beb7dfb..d61c59502 100644 --- a/src/main/java/biomesoplenty/common/world/BOPBiomeProvider.java +++ b/src/main/java/biomesoplenty/common/world/BOPBiomeProvider.java @@ -15,11 +15,13 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.RegistryKey; import net.minecraft.util.registry.DynamicRegistries; import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryLookupCodec; import net.minecraft.util.registry.WorldGenRegistries; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biomes; import net.minecraft.world.biome.provider.BiomeProvider; import net.minecraft.world.gen.layer.Layer; +import net.minecraft.world.gen.layer.LayerUtil; import net.minecraftforge.registries.ForgeRegistries; import java.util.List; @@ -30,21 +32,24 @@ public class BOPBiomeProvider extends BiomeProvider { public static final Codec CODEC = RecordCodecBuilder.create((builder) -> { - return builder.group(Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed)).apply(builder, builder.stable(BOPBiomeProvider::new)); + return builder.group( + Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed), + RegistryLookupCodec.create(Registry.BIOME_REGISTRY).forGetter((biomeProvider) -> biomeProvider.biomes) + ).apply(builder, builder.stable(BOPBiomeProvider::new)); }); private static final List> VANILLA_POSSIBLE_BIOMES = ImmutableList.of(Biomes.OCEAN, Biomes.PLAINS, Biomes.DESERT, Biomes.MOUNTAINS, Biomes.FOREST, Biomes.TAIGA, Biomes.SWAMP, Biomes.RIVER, Biomes.FROZEN_OCEAN, Biomes.FROZEN_RIVER, Biomes.SNOWY_TUNDRA, Biomes.SNOWY_MOUNTAINS, Biomes.MUSHROOM_FIELDS, Biomes.MUSHROOM_FIELD_SHORE, Biomes.BEACH, Biomes.DESERT_HILLS, Biomes.WOODED_HILLS, Biomes.TAIGA_HILLS, Biomes.MOUNTAIN_EDGE, Biomes.JUNGLE, Biomes.JUNGLE_HILLS, Biomes.JUNGLE_EDGE, Biomes.DEEP_OCEAN, Biomes.STONE_SHORE, Biomes.SNOWY_BEACH, Biomes.BIRCH_FOREST, Biomes.BIRCH_FOREST_HILLS, Biomes.DARK_FOREST, Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.WOODED_MOUNTAINS, Biomes.SAVANNA, Biomes.SAVANNA_PLATEAU, Biomes.BADLANDS, Biomes.WOODED_BADLANDS_PLATEAU, Biomes.BADLANDS_PLATEAU, Biomes.WARM_OCEAN, Biomes.LUKEWARM_OCEAN, Biomes.COLD_OCEAN, Biomes.DEEP_WARM_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN, Biomes.DEEP_COLD_OCEAN, Biomes.DEEP_FROZEN_OCEAN, Biomes.SUNFLOWER_PLAINS, Biomes.DESERT_LAKES, Biomes.GRAVELLY_MOUNTAINS, Biomes.FLOWER_FOREST, Biomes.TAIGA_MOUNTAINS, Biomes.SWAMP_HILLS, Biomes.ICE_SPIKES, Biomes.MODIFIED_JUNGLE, Biomes.MODIFIED_JUNGLE_EDGE, Biomes.TALL_BIRCH_FOREST, Biomes.TALL_BIRCH_HILLS, Biomes.DARK_FOREST_HILLS, Biomes.SNOWY_TAIGA_MOUNTAINS, Biomes.GIANT_SPRUCE_TAIGA, Biomes.GIANT_SPRUCE_TAIGA_HILLS, Biomes.MODIFIED_GRAVELLY_MOUNTAINS, Biomes.SHATTERED_SAVANNA, Biomes.SHATTERED_SAVANNA_PLATEAU, Biomes.ERODED_BADLANDS, Biomes.MODIFIED_WOODED_BADLANDS_PLATEAU, Biomes.MODIFIED_BADLANDS_PLATEAU); private final long seed; private final Layer noiseBiomeLayer; - private final Registry biomeRegistry; + private final Registry biomes; - public BOPBiomeProvider(long seed) + public BOPBiomeProvider(long seed, Registry biomes) { super(Stream.concat(VANILLA_POSSIBLE_BIOMES.stream(), BOPClimates.getOverworldBiomes().stream()).map(BiomeUtil::getBiome).collect(Collectors.toList())); this.seed = seed; this.noiseBiomeLayer = BOPLayerUtil.createGenLayers(seed, new BOPOverworldGenSettings()); - this.biomeRegistry = DynamicRegistries.builtin().registryOrThrow(Registry.BIOME_REGISTRY); + this.biomes = biomes; } @Override @@ -56,12 +61,12 @@ public class BOPBiomeProvider extends BiomeProvider @Override public BiomeProvider withSeed(long seed) { - return new BOPBiomeProvider(seed); + return new BOPBiomeProvider(seed, this.biomes); } @Override public Biome getNoiseBiome(int x, int y, int z) { - return this.noiseBiomeLayer.get(biomeRegistry, x, z); + return this.noiseBiomeLayer.get(this.biomes, x, z); } } \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/world/BOPDimensionType.java b/src/main/java/biomesoplenty/common/world/BOPDimensionType.java index 9d7745c81..d81f5a7fb 100644 --- a/src/main/java/biomesoplenty/common/world/BOPDimensionType.java +++ b/src/main/java/biomesoplenty/common/world/BOPDimensionType.java @@ -46,7 +46,7 @@ public class BOPDimensionType extends DimensionType if (ModConfig.GenerationConfig.useBopNether.get()) { - biomeProvider = new BOPNetherBiomeProvider(seed); + biomeProvider = new BOPNetherBiomeProvider(seed, biomeRegistry); } else { diff --git a/src/main/java/biomesoplenty/common/world/BOPNetherBiomeProvider.java b/src/main/java/biomesoplenty/common/world/BOPNetherBiomeProvider.java index 28cca9c66..67e69d9b3 100644 --- a/src/main/java/biomesoplenty/common/world/BOPNetherBiomeProvider.java +++ b/src/main/java/biomesoplenty/common/world/BOPNetherBiomeProvider.java @@ -13,6 +13,8 @@ import com.google.common.collect.ImmutableList; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.RegistryKey; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryLookupCodec; import net.minecraft.util.registry.WorldGenRegistries; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biomes; @@ -26,18 +28,25 @@ import java.util.stream.Stream; public class BOPNetherBiomeProvider extends BiomeProvider { - public static final Codec CODEC = RecordCodecBuilder.create((builder) -> builder.group(Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed)).apply(builder, builder.stable(BOPNetherBiomeProvider::new))); - + public static final Codec CODEC = RecordCodecBuilder.create((builder) -> + { + return builder.group( + Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed), + RegistryLookupCodec.create(Registry.BIOME_REGISTRY).forGetter((biomeProvider) -> biomeProvider.biomes) + ).apply(builder, builder.stable(BOPNetherBiomeProvider::new)); + }); private static final List> VANILLA_POSSIBLE_BIOMES = ImmutableList.of(Biomes.NETHER_WASTES, Biomes.SOUL_SAND_VALLEY, Biomes.CRIMSON_FOREST, Biomes.WARPED_FOREST, Biomes.BASALT_DELTAS); private final long seed; private final Layer noiseBiomeLayer; + private final Registry biomes; - public BOPNetherBiomeProvider(long seed) + public BOPNetherBiomeProvider(long seed, Registry biomes) { super(Stream.concat(VANILLA_POSSIBLE_BIOMES.stream(), BOPClimates.NETHER.getLandBiomes().stream().map((entry) -> entry.biome)).map(BiomeUtil::getBiome).collect(Collectors.toList())); this.seed = seed; this.noiseBiomeLayer = BOPNetherLayerUtil.createGenLayers(seed); + this.biomes = biomes; } @Override @@ -49,12 +58,12 @@ public class BOPNetherBiomeProvider extends BiomeProvider @Override public BiomeProvider withSeed(long seed) { - return new BOPNetherBiomeProvider(seed); + return new BOPNetherBiomeProvider(seed, this.biomes); } @Override public Biome getNoiseBiome(int x, int y, int z) { - return this.noiseBiomeLayer.get(WorldGenRegistries.BIOME, x, z); + return this.noiseBiomeLayer.get(this.biomes, x, z); } } diff --git a/src/main/java/biomesoplenty/common/world/BOPWorldTypeUtil.java b/src/main/java/biomesoplenty/common/world/BOPWorldTypeUtil.java index 6aea442bc..409383899 100644 --- a/src/main/java/biomesoplenty/common/world/BOPWorldTypeUtil.java +++ b/src/main/java/biomesoplenty/common/world/BOPWorldTypeUtil.java @@ -18,15 +18,12 @@ import net.minecraft.util.registry.WorldGenRegistries; import net.minecraft.world.Dimension; import net.minecraft.world.DimensionType; import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.provider.EndBiomeProvider; import net.minecraft.world.biome.provider.NetherBiomeProvider; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.DimensionSettings; import net.minecraft.world.gen.NoiseChunkGenerator; import net.minecraft.world.gen.settings.DimensionGeneratorSettings; import net.minecraft.world.storage.ServerWorldInfo; -import net.minecraftforge.registries.ForgeRegistries; -import org.spongepowered.asm.mixin.Dynamic; import java.util.List; import java.util.Locale; @@ -74,9 +71,9 @@ public class BOPWorldTypeUtil return true; } - public static ChunkGenerator createChunkGenerator(long seed) + public static ChunkGenerator makeOverworld(Registry biomes, Registry noiseGeneratorSettings, long seed) { - return new NoiseChunkGenerator(new BOPBiomeProvider(seed), seed, () -> WorldGenRegistries.NOISE_GENERATOR_SETTINGS.getOrThrow(DimensionSettings.OVERWORLD)); + return new NoiseChunkGenerator(new BOPBiomeProvider(seed, biomes), seed, () -> noiseGeneratorSettings.getOrThrow(DimensionSettings.OVERWORLD)); } public static DimensionGeneratorSettings createDimensionGeneratorSettings(DynamicRegistries registries, long seed, boolean generateFeatures, boolean generateBonusChest) @@ -84,7 +81,7 @@ public class BOPWorldTypeUtil Registry biomeRegistry = registries.registryOrThrow(Registry.BIOME_REGISTRY); Registry dimensionSettingsRegistry = registries.registryOrThrow(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY); Registry dimensionTypeRegistry = registries.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); - return new DimensionGeneratorSettings(seed, generateFeatures, generateBonusChest, DimensionGeneratorSettings.withOverworld(dimensionTypeRegistry, BOPDimensionType.bopDimensions(biomeRegistry, dimensionSettingsRegistry, seed), createChunkGenerator(seed))); + return new DimensionGeneratorSettings(seed, generateFeatures, generateBonusChest, DimensionGeneratorSettings.withOverworld(dimensionTypeRegistry, BOPDimensionType.bopDimensions(biomeRegistry, dimensionSettingsRegistry, seed), makeOverworld(biomeRegistry, dimensionSettingsRegistry, seed))); } public static void setupForDedicatedServer(DedicatedServer server)