Blocks O' Plenty
This commit is contained in:
parent
b03c90452f
commit
cf9c865a0f
1 changed files with 0 additions and 208 deletions
|
@ -1,208 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright 2021, the Glitchfiend Team.
|
|
||||||
* All rights reserved.
|
|
||||||
******************************************************************************/
|
|
||||||
package biomesoplenty.api.enums;
|
|
||||||
|
|
||||||
import biomesoplenty.api.biome.BOPBiomes;
|
|
||||||
import biomesoplenty.common.util.biome.BiomeUtil;
|
|
||||||
import biomesoplenty.init.ModBiomes;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.world.level.biome.Biome;
|
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
|
||||||
import net.minecraft.world.level.newbiome.context.Context;
|
|
||||||
import net.minecraftforge.common.BiomeManager;
|
|
||||||
import net.minecraftforge.common.BiomeManager.BiomeType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public enum BOPClimates
|
|
||||||
{
|
|
||||||
ICE_CAP (BiomeType.ICY),
|
|
||||||
TUNDRA (BiomeType.ICY),
|
|
||||||
WET_BOREAL (BiomeType.COOL),
|
|
||||||
DRY_BOREAL (BiomeType.COOL),
|
|
||||||
WET_TEMPERATE (BiomeType.COOL),
|
|
||||||
DRY_TEMPERATE (BiomeType.WARM),
|
|
||||||
COOL_TEMPERATE (BiomeType.COOL),
|
|
||||||
WARM_TEMPERATE (BiomeType.WARM),
|
|
||||||
SUBTROPICAL (BiomeType.WARM),
|
|
||||||
TROPICAL (BiomeType.DESERT),
|
|
||||||
MEDITERRANEAN (BiomeType.WARM),
|
|
||||||
SAVANNA (BiomeType.DESERT),
|
|
||||||
HOT_DESERT (BiomeType.DESERT),
|
|
||||||
WASTELAND (null),
|
|
||||||
NETHER (null);
|
|
||||||
|
|
||||||
public final BiomeType biomeType;
|
|
||||||
private int totalBiomesWeight;
|
|
||||||
private int totalIslandBiomesWeight;
|
|
||||||
|
|
||||||
private ArrayList<WeightedBiomeEntry> landBiomes = Lists.newArrayList();
|
|
||||||
private ArrayList<WeightedBiomeEntry> islandBiomes = Lists.newArrayList();
|
|
||||||
|
|
||||||
BOPClimates(BiomeType biomeType)
|
|
||||||
{
|
|
||||||
this.biomeType = biomeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BOPClimates addBiome(int weight, ResourceKey<Biome> biome)
|
|
||||||
{
|
|
||||||
return this.addBiome(new WeightedBiomeEntry(weight, biome));
|
|
||||||
}
|
|
||||||
|
|
||||||
public BOPClimates addBiome(WeightedBiomeEntry biomeEntry)
|
|
||||||
{
|
|
||||||
this.totalBiomesWeight += biomeEntry.weight;
|
|
||||||
this.landBiomes.add(biomeEntry);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BOPClimates addIslandBiome(int weight, ResourceKey<Biome> biome)
|
|
||||||
{
|
|
||||||
return this.addIslandBiome(new WeightedBiomeEntry(weight, biome));
|
|
||||||
}
|
|
||||||
|
|
||||||
public BOPClimates addIslandBiome(WeightedBiomeEntry biomeEntry)
|
|
||||||
{
|
|
||||||
this.totalIslandBiomesWeight += biomeEntry.weight;
|
|
||||||
this.islandBiomes.add(biomeEntry);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ResourceKey<Biome> getRandomBiome(Context context, ResourceKey<Biome> fallback)
|
|
||||||
{
|
|
||||||
if (this.totalBiomesWeight == 0)
|
|
||||||
return fallback;
|
|
||||||
|
|
||||||
int weight = context.nextRandom(this.totalBiomesWeight);
|
|
||||||
Iterator<WeightedBiomeEntry> iterator = this.landBiomes.iterator();
|
|
||||||
WeightedBiomeEntry item;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
item = iterator.next();
|
|
||||||
weight -= item.weight;
|
|
||||||
}
|
|
||||||
while (weight >= 0);
|
|
||||||
return item.biome;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ResourceKey<Biome> getRandomIslandBiome(Context context, ResourceKey<Biome> fallback)
|
|
||||||
{
|
|
||||||
if (this.totalIslandBiomesWeight == 0)
|
|
||||||
return fallback;
|
|
||||||
|
|
||||||
int weight = context.nextRandom(this.totalIslandBiomesWeight);
|
|
||||||
Iterator<WeightedBiomeEntry> iterator = this.islandBiomes.iterator();
|
|
||||||
WeightedBiomeEntry item;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
item = iterator.next();
|
|
||||||
weight -= item.weight;
|
|
||||||
}
|
|
||||||
while (weight >= 0);
|
|
||||||
return item.biome;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ResourceKey<Biome> getRandomOceanBiome(Context context, boolean deep)
|
|
||||||
{
|
|
||||||
return (deep ? Biomes.DEEP_OCEAN : Biomes.OCEAN);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImmutableList<WeightedBiomeEntry> getLandBiomes()
|
|
||||||
{
|
|
||||||
return this.landBiomes.isEmpty() ? ImmutableList.of(this.getDefaultWeightedBiomeEntry()) : ImmutableList.copyOf(this.landBiomes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImmutableList<WeightedBiomeEntry> getIslandBiomes()
|
|
||||||
{
|
|
||||||
return this.islandBiomes.isEmpty() ? ImmutableList.of(this.getDefaultWeightedBiomeEntry()) : ImmutableList.copyOf(this.islandBiomes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private WeightedBiomeEntry getDefaultWeightedBiomeEntry()
|
|
||||||
{
|
|
||||||
return new WeightedBiomeEntry(100, Biomes.OCEAN);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BOPClimates[] values = BOPClimates.values();
|
|
||||||
|
|
||||||
public static BOPClimates lookup(int i) {return values[i];}
|
|
||||||
|
|
||||||
// map temperature and rainfall to climates
|
|
||||||
// temperature values from 0 (cold) to 8 (hot) and rainfall values from 0 (wet) to 11 (dry), index is (temperatureValue * 12) + rainfallValue
|
|
||||||
// we will contrive to make any combination equally likely, so the overall rarity of each climate is in proportion to the number of times it appears in the array
|
|
||||||
private static final BOPClimates[] climateMapping = new BOPClimates[]
|
|
||||||
{
|
|
||||||
TUNDRA, TUNDRA, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, TUNDRA, TUNDRA,
|
|
||||||
WET_BOREAL, WET_BOREAL, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, DRY_BOREAL, DRY_BOREAL,
|
|
||||||
WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL,
|
|
||||||
WET_TEMPERATE, WET_TEMPERATE, WET_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE,
|
|
||||||
WET_TEMPERATE, WET_TEMPERATE, WET_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE,
|
|
||||||
SUBTROPICAL, SUBTROPICAL, WET_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, DRY_TEMPERATE, SAVANNA, SAVANNA,
|
|
||||||
SUBTROPICAL, SUBTROPICAL, SUBTROPICAL, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, SAVANNA, SAVANNA, SAVANNA,
|
|
||||||
TROPICAL, TROPICAL, SUBTROPICAL, SUBTROPICAL, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, SAVANNA, SAVANNA, HOT_DESERT, HOT_DESERT,
|
|
||||||
TROPICAL, TROPICAL, SUBTROPICAL, SUBTROPICAL, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, SAVANNA, SAVANNA, HOT_DESERT, HOT_DESERT
|
|
||||||
};
|
|
||||||
|
|
||||||
public static int[] getClimateMappingInts()
|
|
||||||
{
|
|
||||||
// 9 temperature values, 12 rainfall values, 12 * 9 = 108
|
|
||||||
int[] out = new int[108];
|
|
||||||
for (int i = 0; i < 108; i++)
|
|
||||||
{
|
|
||||||
out[i] = climateMapping[i].ordinal();
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ImmutableSet<ResourceKey<Biome>> getOverworldBiomes()
|
|
||||||
{
|
|
||||||
Set<ResourceKey<Biome>> set = Sets.newHashSet();
|
|
||||||
|
|
||||||
for (BOPClimates climate : BOPClimates.values())
|
|
||||||
{
|
|
||||||
if (climate == BOPClimates.NETHER)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
set.addAll(climate.getLandBiomes().stream().map(weightedBiomeEntry -> weightedBiomeEntry.biome).collect(Collectors.toSet()));
|
|
||||||
set.addAll(climate.getIslandBiomes().stream().map(weightedBiomeEntry -> weightedBiomeEntry.biome).collect(Collectors.toSet()));
|
|
||||||
}
|
|
||||||
|
|
||||||
ModBiomes.subBiomes.values().forEach(weightedSubBiome -> set.add(weightedSubBiome.biome));
|
|
||||||
return ImmutableSet.copyOf(set);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class WeightedBiomeEntry
|
|
||||||
{
|
|
||||||
public final int weight;
|
|
||||||
public final ResourceKey<Biome> biome;
|
|
||||||
|
|
||||||
public WeightedBiomeEntry(int weight, ResourceKey<Biome> biome)
|
|
||||||
{
|
|
||||||
this.weight = weight;
|
|
||||||
this.biome = biome;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// for debugging purposes
|
|
||||||
public static void printWeights()
|
|
||||||
{
|
|
||||||
for (BOPClimates climate : BOPClimates.values())
|
|
||||||
{
|
|
||||||
for (WeightedBiomeEntry entry : climate.landBiomes)
|
|
||||||
{
|
|
||||||
System.out.println(climate.name()+" "+entry.biome.location()+" "+entry.weight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in a new issue