Fixed biome provider preservation across world loads
This commit is contained in:
parent
e33525cd99
commit
be402fba7f
|
@ -8,51 +8,52 @@
|
||||||
package biomesoplenty.common.world;
|
package biomesoplenty.common.world;
|
||||||
|
|
||||||
import biomesoplenty.api.enums.BOPClimates;
|
import biomesoplenty.api.enums.BOPClimates;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.ImmutableList;
|
||||||
import net.minecraft.block.BlockState;
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.biome.provider.OverworldBiomeProvider;
|
import net.minecraft.world.biome.Biomes;
|
||||||
import net.minecraft.world.gen.feature.structure.Structure;
|
import net.minecraft.world.biome.provider.BiomeProvider;
|
||||||
import net.minecraft.world.gen.layer.Layer;
|
import net.minecraft.world.gen.layer.Layer;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class BOPBiomeProvider extends OverworldBiomeProvider
|
public class BOPBiomeProvider extends BiomeProvider
|
||||||
{
|
{
|
||||||
|
public static final Codec<BOPBiomeProvider> CODEC = RecordCodecBuilder.create((builder) ->
|
||||||
|
{
|
||||||
|
return builder.group(Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed)).apply(builder, builder.stable(BOPBiomeProvider::new));
|
||||||
|
});
|
||||||
|
|
||||||
|
private static final List<Biome> 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 Layer noiseBiomeLayer;
|
||||||
protected final Set<Biome> possibleBiomes;
|
|
||||||
|
|
||||||
public BOPBiomeProvider(long seed)
|
public BOPBiomeProvider(long seed)
|
||||||
{
|
{
|
||||||
super(seed, false, false);
|
super(Stream.concat(VANILLA_POSSIBLE_BIOMES.stream(), BOPClimates.getOverworldBiomes().stream()).collect(Collectors.toList()));
|
||||||
this.possibleBiomes = Sets.newHashSet(super.possibleBiomes);
|
this.seed = seed;
|
||||||
this.possibleBiomes.addAll(BOPClimates.getOverworldBiomes());
|
|
||||||
this.noiseBiomeLayer = BOPLayerUtil.createGenLayers(seed, new BOPOverworldGenSettings());
|
this.noiseBiomeLayer = BOPLayerUtil.createGenLayers(seed, new BOPOverworldGenSettings());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Codec<? extends BiomeProvider> codec()
|
||||||
|
{
|
||||||
|
return CODEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BiomeProvider withSeed(long seed)
|
||||||
|
{
|
||||||
|
return new BOPBiomeProvider(seed);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Biome getNoiseBiome(int x, int y, int z)
|
public Biome getNoiseBiome(int x, int y, int z)
|
||||||
{
|
{
|
||||||
return this.noiseBiomeLayer.get(x, z);
|
return this.noiseBiomeLayer.get(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canGenerateStructure(Structure<?> structure)
|
|
||||||
{
|
|
||||||
return this.supportedStructures.computeIfAbsent(structure, (p_226839_1_) -> this.possibleBiomes.stream().anyMatch((biome) -> biome.isValidStart(p_226839_1_)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<BlockState> getSurfaceBlocks()
|
|
||||||
{
|
|
||||||
if (this.surfaceBlocks.isEmpty())
|
|
||||||
{
|
|
||||||
for(Biome biome : this.possibleBiomes)
|
|
||||||
{
|
|
||||||
this.surfaceBlocks.add(biome.getSurfaceBuilderConfig().getTopMaterial());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.surfaceBlocks;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -7,36 +7,50 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package biomesoplenty.common.world;
|
package biomesoplenty.common.world;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import biomesoplenty.api.enums.BOPClimates;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
|
import net.minecraft.world.biome.Biomes;
|
||||||
import net.minecraft.world.biome.provider.BiomeProvider;
|
import net.minecraft.world.biome.provider.BiomeProvider;
|
||||||
import net.minecraft.world.biome.provider.NetherBiomeProvider;
|
|
||||||
import net.minecraft.world.gen.layer.Layer;
|
import net.minecraft.world.gen.layer.Layer;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class BOPNetherBiomeProvider extends NetherBiomeProvider
|
public class BOPNetherBiomeProvider extends BiomeProvider
|
||||||
{
|
{
|
||||||
|
public static final Codec<BOPNetherBiomeProvider> CODEC = RecordCodecBuilder.create((builder) -> builder.group(Codec.LONG.fieldOf("seed").stable().forGetter((biomeProvider) -> biomeProvider.seed)).apply(builder, builder.stable(BOPNetherBiomeProvider::new)));
|
||||||
|
|
||||||
|
private static final List<Biome> 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 Layer noiseBiomeLayer;
|
||||||
|
|
||||||
public BOPNetherBiomeProvider(long seed)
|
public BOPNetherBiomeProvider(long seed)
|
||||||
{
|
{
|
||||||
super(seed, Lists.newArrayList(), Optional.empty());
|
super(Stream.concat(VANILLA_POSSIBLE_BIOMES.stream(), BOPClimates.NETHER.getLandBiomes().stream().map((entry) -> entry.biome)).collect(Collectors.toList()));
|
||||||
|
this.seed = seed;
|
||||||
this.noiseBiomeLayer = BOPNetherLayerUtil.createGenLayers(seed);
|
this.noiseBiomeLayer = BOPNetherLayerUtil.createGenLayers(seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Codec<? extends BiomeProvider> codec()
|
||||||
|
{
|
||||||
|
return CODEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BiomeProvider withSeed(long seed)
|
||||||
|
{
|
||||||
|
return new BOPNetherBiomeProvider(seed);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Biome getNoiseBiome(int x, int y, int z)
|
public Biome getNoiseBiome(int x, int y, int z)
|
||||||
{
|
{
|
||||||
return this.noiseBiomeLayer.get(x, z);
|
return this.noiseBiomeLayer.get(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public BiomeProvider withSeed(long seed)
|
|
||||||
{
|
|
||||||
return new BOPNetherBiomeProvider(seed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,11 +13,14 @@ import biomesoplenty.common.biome.BiomeRegistry;
|
||||||
import biomesoplenty.common.biome.nether.*;
|
import biomesoplenty.common.biome.nether.*;
|
||||||
import biomesoplenty.common.biome.overworld.*;
|
import biomesoplenty.common.biome.overworld.*;
|
||||||
import biomesoplenty.common.world.BOPBiomeGeneratorTypeScreen;
|
import biomesoplenty.common.world.BOPBiomeGeneratorTypeScreen;
|
||||||
|
import biomesoplenty.common.world.BOPBiomeProvider;
|
||||||
|
import biomesoplenty.common.world.BOPNetherBiomeProvider;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import net.minecraft.client.gui.screen.BiomeGeneratorTypeScreens;
|
import net.minecraft.client.gui.screen.BiomeGeneratorTypeScreens;
|
||||||
import net.minecraft.entity.villager.IVillagerType;
|
import net.minecraft.entity.villager.IVillagerType;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.biome.Biomes;
|
import net.minecraft.world.biome.Biomes;
|
||||||
import net.minecraftforge.common.BiomeDictionary;
|
import net.minecraftforge.common.BiomeDictionary;
|
||||||
|
@ -43,6 +46,10 @@ public class ModBiomes
|
||||||
{
|
{
|
||||||
biomeGeneratorTypeScreenBOP = new BOPBiomeGeneratorTypeScreen();
|
biomeGeneratorTypeScreenBOP = new BOPBiomeGeneratorTypeScreen();
|
||||||
BiomeGeneratorTypeScreens.PRESETS.add(biomeGeneratorTypeScreenBOP);
|
BiomeGeneratorTypeScreens.PRESETS.add(biomeGeneratorTypeScreenBOP);
|
||||||
|
|
||||||
|
// Register biome providers
|
||||||
|
Registry.register(Registry.BIOME_SOURCE, "biomesoplenty_overworld", BOPBiomeProvider.CODEC);
|
||||||
|
Registry.register(Registry.BIOME_SOURCE, "biomesoplenty_nether", BOPNetherBiomeProvider.CODEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
Loading…
Reference in New Issue