diff --git a/src/main/java/biomesoplenty/api/enums/BOPClimates.java b/src/main/java/biomesoplenty/api/enums/BOPClimates.java index 399c38cda..5099348b8 100644 --- a/src/main/java/biomesoplenty/api/enums/BOPClimates.java +++ b/src/main/java/biomesoplenty/api/enums/BOPClimates.java @@ -131,24 +131,6 @@ public enum BOPClimates return new WeightedBiomeEntry(100, Biomes.OCEAN); } - static - { - // Set up vanilla biomes - BOPClimates.ICE_CAP.addBiome(10, Biomes.SNOWY_TUNDRA); - BOPClimates.TUNDRA.addBiome(10, Biomes.SNOWY_TAIGA).addBiome(7, Biomes.MOUNTAINS); - BOPClimates.WET_BOREAL.addBiome(10, Biomes.TAIGA); - BOPClimates.DRY_BOREAL.addBiome(5, Biomes.GIANT_TREE_TAIGA); - BOPClimates.WET_TEMPERATE.addBiome(5, Biomes.DARK_FOREST).addBiome(7, Biomes.SWAMP); - BOPClimates.DRY_TEMPERATE.addBiome(7, Biomes.BIRCH_FOREST); - BOPClimates.COOL_TEMPERATE.addBiome(10, Biomes.FOREST); - BOPClimates.WARM_TEMPERATE.addBiome(10, Biomes.PLAINS); - BOPClimates.TROPICAL.addBiome(15, Biomes.JUNGLE); - BOPClimates.SAVANNA.addBiome(10, Biomes.SAVANNA); - BOPClimates.HOT_DESERT.addBiome(15, Biomes.DESERT).addBiome(10, Biomes.BADLANDS_PLATEAU).addBiome(3, Biomes.WOODED_BADLANDS_PLATEAU); - - BOPClimates.NETHER.addBiome(10, Biomes.NETHER); - } - private static BOPClimates[] values = BOPClimates.values(); public static BOPClimates lookup(int i) {return values[i];} diff --git a/src/main/java/biomesoplenty/common/biome/BiomeConfigData.java b/src/main/java/biomesoplenty/common/biome/BiomeConfigData.java index 596dbf0bd..ccc06dc20 100644 --- a/src/main/java/biomesoplenty/common/biome/BiomeConfigData.java +++ b/src/main/java/biomesoplenty/common/biome/BiomeConfigData.java @@ -7,18 +7,15 @@ ******************************************************************************/ package biomesoplenty.common.biome; -import biomesoplenty.api.enums.BOPClimates; -import biomesoplenty.core.BiomesOPlenty; import com.google.common.collect.Maps; import com.google.gson.annotations.SerializedName; -import java.util.Map; import java.util.TreeMap; public class BiomeConfigData { @SerializedName("standard_weights") - public TreeMap standardBiomeWeights = Maps.newTreeMap(); + public TreeMap standardBiomeWeights = Maps.newTreeMap(); @SerializedName("sub_biome_weights") public TreeMap subBiomeEntries = Maps.newTreeMap(); @@ -26,11 +23,14 @@ public class BiomeConfigData //@SerializedName("island_biome_weights") //public Map islandBiomeEntries = Maps.newHashMap(); - public static class StandardBiomeEntry + @SerializedName("vanilla_biome_weights") + public TreeMap vanillaBiomeEntries = Maps.newTreeMap(); + + public static class WeightedBiomeEntry { public int weight; - public StandardBiomeEntry(int weight) + public WeightedBiomeEntry(int weight) { this.weight = weight; } @@ -47,14 +47,4 @@ public class BiomeConfigData this.rarity = rarity; } } - - public static class IslandBiomeEntry - { - public int weight; - - public IslandBiomeEntry(int weight) - { - this.weight = weight; - } - } } diff --git a/src/main/java/biomesoplenty/common/biome/BiomeRegistry.java b/src/main/java/biomesoplenty/common/biome/BiomeRegistry.java index 044fad3b8..0ec147b4e 100644 --- a/src/main/java/biomesoplenty/common/biome/BiomeRegistry.java +++ b/src/main/java/biomesoplenty/common/biome/BiomeRegistry.java @@ -49,13 +49,18 @@ public class BiomeRegistry public static void deferIslandBiomeRegistration(Biome biome, BOPClimates climate, int weight) { - defer(RegistrationType.ISLAND_BIOME, new IslandBiomeRegistrationData(biome, climate, weight)); + defer(RegistrationType.ISLAND_BIOME, new SingleClimateRegistrationData(biome, climate, weight)); + } + + public static void deferVanillaBiomeRegistration(Biome biome, BOPClimates climate, int weight) + { + defer(RegistrationType.VANILLA_BIOME, new SingleClimateRegistrationData(biome, climate, weight)); } public static void configureStandardBiomes() { List standardRegistrations = deferrances.get(RegistrationType.STANDARD_BIOME); - TreeMap defaultEntries = Maps.newTreeMap(); + TreeMap defaultEntries = Maps.newTreeMap(); Map regDataMap = Maps.newHashMap(); for (DeferredRegistration registration : standardRegistrations) @@ -67,21 +72,19 @@ public class BiomeRegistry { String biomeName = new ResourceLocation(BiomesOPlenty.MOD_ID, regData.getName()).toString(); Pair primaryWeight = regData.getPrimaryWeight(); - defaultEntries.put(biomeName, new BiomeConfigData.StandardBiomeEntry(primaryWeight.getValue())); + defaultEntries.put(biomeName, new BiomeConfigData.WeightedBiomeEntry(primaryWeight.getValue())); regDataMap.put(biomeName, registration.regData); } } - BiomesOPlenty.logger.info(defaultEntries.keySet()); - BiomeConfigData defaultConfigData = new BiomeConfigData(); defaultConfigData.standardBiomeWeights = defaultEntries; BiomeConfigData configData = getConfigData(defaultConfigData); - TreeMap revisedStandardBiomeWeights = Maps.newTreeMap(defaultEntries); + TreeMap revisedStandardBiomeWeights = Maps.newTreeMap(defaultEntries); // Merge the config file with the default values - for (Map.Entry biomeEntry : configData.standardBiomeWeights.entrySet()) + for (Map.Entry biomeEntry : configData.standardBiomeWeights.entrySet()) { if (revisedStandardBiomeWeights.containsKey(biomeEntry.getKey())) { @@ -93,10 +96,10 @@ public class BiomeRegistry configData.standardBiomeWeights = revisedStandardBiomeWeights; JsonUtil.writeFile(getConfigFile(), configData); - for (Map.Entry biomeEntry : configData.standardBiomeWeights.entrySet()) + for (Map.Entry biomeEntry : configData.standardBiomeWeights.entrySet()) { String name = biomeEntry.getKey(); - BiomeConfigData.StandardBiomeEntry weight = biomeEntry.getValue(); + BiomeConfigData.WeightedBiomeEntry weight = biomeEntry.getValue(); // Replace the default weight map for this biome with those from the config file if (regDataMap.containsKey(name)) @@ -203,6 +206,53 @@ public class BiomeRegistry // } } + public static void configureVanillaBiomes() + { + List islandBiomeReistrations = deferrances.get(RegistrationType.VANILLA_BIOME); + TreeMap defaultBiomeEntries = Maps.newTreeMap(); + Map regDataMap = Maps.newHashMap(); + + for (DeferredRegistration registration : islandBiomeReistrations) + { + SingleClimateRegistrationData regData = registration.regData; + String biomeName = registration.regData.getBiome().delegate.name().toString(); + defaultBiomeEntries.put(biomeName, new BiomeConfigData.WeightedBiomeEntry(regData.getWeight())); + regDataMap.put(biomeName, registration.regData); + } + + BiomeConfigData defaultConfigData = new BiomeConfigData(); + defaultConfigData.vanillaBiomeEntries = defaultBiomeEntries; + BiomeConfigData configData = getConfigData(defaultConfigData); + + TreeMap revisedBiomeEntries = Maps.newTreeMap(defaultBiomeEntries); + + // Merge the config file with the default values + for (Map.Entry biomeEntry : configData.vanillaBiomeEntries.entrySet()) + { + if (revisedBiomeEntries.containsKey(biomeEntry.getKey())) + { + revisedBiomeEntries.put(biomeEntry.getKey(), biomeEntry.getValue()); + } + } + + // Write back to the config file + configData.vanillaBiomeEntries = revisedBiomeEntries; + JsonUtil.writeFile(getConfigFile(), configData); + + for (Map.Entry biomeEntry : configData.vanillaBiomeEntries.entrySet()) + { + String name = biomeEntry.getKey(); + BiomeConfigData.WeightedBiomeEntry islandBiomeEntry = biomeEntry.getValue(); + + // Replace the default values for this biome with those from the config file + if (regDataMap.containsKey(name)) + { + SingleClimateRegistrationData registrationData = regDataMap.get(name); + registrationData.setWeight(islandBiomeEntry.weight); + } + } + } + private static File getConfigDirFile() { Path configPath = FMLPaths.CONFIGDIR.get(); @@ -264,7 +314,7 @@ public class BiomeRegistry // Don't register biomes with their weight set to 0, that normally have weights that are non-zero if (!biome.getWeightMap().isEmpty() && (data.weightMap.isEmpty() || data.weightMap.entrySet().stream().allMatch((entry) -> entry.getValue().equals(0)))) { - BiomesOPlenty.logger.info("Weights absent for " + data.getName() + ", disabling..."); + BiomesOPlenty.logger.debug("Weights absent for " + data.getName() + ", disabling..."); return; } @@ -282,7 +332,7 @@ public class BiomeRegistry { BOPClimates climate = entry.getKey(); int weight = entry.getValue(); - BiomesOPlenty.logger.info(String.format("%s weight set to %d for climate %s", name, weight, climate.name())); + BiomesOPlenty.logger.debug(String.format("%s weight set to %d for climate %s", name, weight, climate.name())); climate.addBiome(weight, biome); } } @@ -300,25 +350,34 @@ public class BiomeRegistry SUB_BIOME((SubBiomeRegistrationData data) -> { if (data.getWeight() == 0) { - BiomesOPlenty.logger.warn("Weights absent for sub biome" + data.getChild().getName() + ", disabling..."); + BiomesOPlenty.logger.debug("Weights absent for sub biome" + data.getChild().getName() + ", disabling..."); return; } String childName = data.getChild().delegate.name().toString(); - BiomesOPlenty.logger.info(String.format("Sub biome %s weight set to %d", childName, data.getWeight())); + BiomesOPlenty.logger.debug(String.format("Sub biome %s weight set to %d", childName, data.getWeight())); ModBiomes.subBiomes.put(Registry.BIOME.getId(data.getParent()), new ModBiomes.WeightedSubBiome(data.getChild(), data.getRarity(), data.getWeight())); }), - ISLAND_BIOME((IslandBiomeRegistrationData data) -> { + ISLAND_BIOME((SingleClimateRegistrationData data) -> { if (data.getWeight() == 0) { - BiomesOPlenty.logger.warn("Weights absent for island biome" + data.getBiome().getName() + ", disabling..."); + BiomesOPlenty.logger.debug("Weights absent for island biome" + data.getBiome().getName() + ", disabling..."); return; } String biomeName = data.getBiome().delegate.name().toString(); - BiomesOPlenty.logger.info(String.format("Island biome %s weight set to %d for climate %s", biomeName, data.getWeight(), data.getClimate().name())); + BiomesOPlenty.logger.debug(String.format("Island biome %s weight set to %d for climate %s", biomeName, data.getWeight(), data.getClimate().name())); ModBiomes.islandBiomeIds.add(Registry.BIOME.getId(data.getBiome())); data.getClimate().addIslandBiome(data.getWeight(), data.getBiome()); + }), + VANILLA_BIOME((SingleClimateRegistrationData data) -> { + if (data.getWeight() == 0) + { + BiomesOPlenty.logger.debug("Weights absent for vanilla biome" + data.getBiome().getName() + ", disabling..."); + return; + } + + data.getClimate().addBiome(data.getWeight(), data.getBiome()); }); public final Consumer regFunc; @@ -446,12 +505,12 @@ public class BiomeRegistry } } - private static class IslandBiomeRegistrationData extends RegistrationData + private static class SingleClimateRegistrationData extends RegistrationData { private final BOPClimates climate; private int weight; - public IslandBiomeRegistrationData(Biome biome, BOPClimates climate, int weight) + public SingleClimateRegistrationData(Biome biome, BOPClimates climate, int weight) { super(biome); this.climate = climate; diff --git a/src/main/java/biomesoplenty/init/ModBiomes.java b/src/main/java/biomesoplenty/init/ModBiomes.java index 8b695e8ca..da8857404 100644 --- a/src/main/java/biomesoplenty/init/ModBiomes.java +++ b/src/main/java/biomesoplenty/init/ModBiomes.java @@ -158,6 +158,27 @@ public class ModBiomes //BiomeRegistry.configureIslandBiomes(); BiomeRegistry.finalizeRegistrations(BiomeRegistry.RegistrationType.ISLAND_BIOME); + // Set up vanilla biomes + registerVanillaBiome(Biomes.SNOWY_TUNDRA, BOPClimates.ICE_CAP, 10); + registerVanillaBiome(Biomes.MOUNTAINS, BOPClimates.TUNDRA, 7); + registerVanillaBiome(Biomes.TAIGA, BOPClimates.WET_BOREAL, 10); + registerVanillaBiome(Biomes.GIANT_TREE_TAIGA, BOPClimates.DRY_BOREAL, 5); + registerVanillaBiome(Biomes.DARK_FOREST, BOPClimates.WET_TEMPERATE, 5); + registerVanillaBiome(Biomes.SWAMP, BOPClimates.WET_TEMPERATE, 7); + registerVanillaBiome(Biomes.BIRCH_FOREST, BOPClimates.DRY_TEMPERATE, 7); + registerVanillaBiome(Biomes.FOREST, BOPClimates.COOL_TEMPERATE, 10); + registerVanillaBiome(Biomes.PLAINS, BOPClimates.WARM_TEMPERATE, 10); + registerVanillaBiome(Biomes.JUNGLE, BOPClimates.TROPICAL, 15); + registerVanillaBiome(Biomes.SAVANNA, BOPClimates.SAVANNA, 10); + registerVanillaBiome(Biomes.DESERT, BOPClimates.HOT_DESERT, 15); + registerVanillaBiome(Biomes.BADLANDS_PLATEAU, BOPClimates.HOT_DESERT, 10); + registerVanillaBiome(Biomes.WOODED_BADLANDS_PLATEAU, BOPClimates.HOT_DESERT, 3); + + registerVanillaBiome(Biomes.NETHER, BOPClimates.NETHER, 10); + + BiomeRegistry.configureVanillaBiomes(); + BiomeRegistry.finalizeRegistrations(BiomeRegistry.RegistrationType.VANILLA_BIOME); + registerBiomeDictionaryTags(); registerVillagerTypes(); } @@ -363,6 +384,11 @@ public class ModBiomes registerIslandBiome(biome.get(), climate, weight); } + private static void registerVanillaBiome(Biome biome, BOPClimates climate, int weight) + { + BiomeRegistry.deferVanillaBiomeRegistration(biome, climate, weight); + } + public static class WeightedSubBiome { public final Biome biome;