diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java index 7efd74015..3dce7ef6e 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java @@ -42,6 +42,10 @@ public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { @Default private double airThreshold = -0.5; + @Value("minecraft.inject-flora") + @Default + private boolean injectFlora = false; + public boolean useVanillaBiomes() { return vanillaBiomes; } @@ -57,4 +61,8 @@ public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { public double getAirThreshold() { return airThreshold; } + + public boolean isInjectFlora() { + return injectFlora; + } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index bd7428742..d7595d0cd 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -1,5 +1,10 @@ package com.dfsek.terra.mod.util; +import com.dfsek.terra.mod.CommonPlatform; + +import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; + import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; @@ -68,29 +73,43 @@ public final class MinecraftUtil { return null; } - public static void registerFlora(Registry biomes) { - logger.info("Injecting flora into Terra biomes..."); - TERRA_BIOME_MAP - .forEach((vb, terraBiomes) -> - biomes.getOrEmpty(vb) - .ifPresentOrElse(vanilla -> terraBiomes - .forEach(tb -> biomes.getOrEmpty(tb) - .ifPresentOrElse( - terra -> { - List> flowerFeatures = List.copyOf( - vanilla.getGenerationSettings() - .getFlowerFeatures()); - logger.debug("Injecting flora into biome" + - " {} : {}", tb, - flowerFeatures); - ((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures( - flowerFeatures); - }, - () -> logger.error( - "No such biome: {}", - tb))), - () -> logger.error("No vanilla biome: {}", vb))); + public static void registerFlora(Registry biomeRegistry) { + CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. + pack.getCheckedRegistry(com.dfsek.terra.api.world.biome.Biome.class) + .forEach((id, biome) -> { + PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); + if (compatibilityOptions.isInjectFlora()) { + registerFlora(biome, pack, id, biomeRegistry); + } + }); + }); + logger.info("Injecting flora into Terra biomes..."); + + } + + public static void registerFlora(com.dfsek.terra.api.world.biome.Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id, Registry biomeRegistry) { + RegistryKey vanillaKey = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(biomeRegistry); + biomeRegistry.getOrEmpty(vanillaKey) + .ifPresentOrElse(vanillaBiome -> { + Identifier terraBiomeIdentifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); + biomeRegistry.getOrEmpty(terraBiomeIdentifier).ifPresentOrElse( + terraBiome -> { + List> flowerFeatures = List.copyOf( + vanillaBiome.getGenerationSettings() + .getFlowerFeatures()); + logger.debug("Injecting flora into biome" + + " {} : {}", terraBiomeIdentifier, + flowerFeatures); + ((FloraFeatureHolder) terraBiome.getGenerationSettings()).setFloraFeatures( + flowerFeatures); + }, + () -> logger.error( + "No such biome: {}", + terraBiomeIdentifier) + ); + }, + () -> logger.error("No vanilla biome: {}", vanillaKey)); } public static Map> getTerraBiomeMap() {