diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/DataPackContentsMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/DataPackContentsMixin.java index f2e38a11d..e355e4f2d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/DataPackContentsMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/DataPackContentsMixin.java @@ -1,7 +1,8 @@ package com.dfsek.terra.fabric.mixin.lifecycle; -import com.dfsek.terra.fabric.util.BiomeUtil; import com.dfsek.terra.fabric.util.TagUtil; +import com.dfsek.terra.mod.util.MinecraftUtil; + import net.minecraft.server.DataPackContents; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; @@ -23,6 +24,6 @@ public class DataPackContentsMixin { Registry biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY); TagUtil.registerBiomeTags(biomeRegistry); - BiomeUtil.registerFlora(biomeRegistry); + MinecraftUtil.registerFlora(biomeRegistry); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java index 678d7777a..769c9e65b 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java @@ -4,9 +4,7 @@ import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.mod.config.VanillaBiomeProperties; -import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; import com.dfsek.terra.mod.config.ProtoPlatformBiome; import com.dfsek.terra.mod.util.MinecraftUtil; @@ -14,10 +12,6 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.biome.Biome.Builder; -import net.minecraft.world.biome.BiomeEffects; -import net.minecraft.world.biome.GenerationSettings; -import net.minecraft.world.gen.feature.ConfiguredFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,25 +21,17 @@ import java.util.*; public final class BiomeUtil { private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); - private static final Map> - TERRA_BIOME_MAP = new HashMap<>(); - private BiomeUtil() { } - public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { - return pack.getID() - .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); - } - public static void registerBiomes() { logger.info("Registering biomes..."); FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. pack.getCheckedRegistry(Biome.class) .forEach((id, biome) -> registerBiome(biome, pack, id)); }); - registerFlora(BuiltinRegistries.BIOME); + MinecraftUtil.registerFlora(BuiltinRegistries.BIOME); logger.info("Terra biomes registered."); } @@ -64,9 +50,9 @@ public final class BiomeUtil { if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { - net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, registry.get(vanilla)); + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla)); - Identifier identifier = new Identifier("terra", createBiomeID(pack, id)); + Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); if(registry.containsId(identifier)) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier) @@ -75,97 +61,12 @@ public final class BiomeUtil { .orElseThrow()); } else { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, - registerKey(identifier).getValue(), + MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome).getKey().orElseThrow()); } - TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); + MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); } } - 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 Map> getTerraBiomeMap() { - return Map.copyOf(TERRA_BIOME_MAP); - } - - private static RegistryKey registerKey(Identifier identifier) { - return RegistryKey.of(Registry.BIOME_KEY, identifier); - } - - public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) { - GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); - - BiomeEffects.Builder effects = new BiomeEffects.Builder(); - - net.minecraft.world.biome.Biome.Builder builder = new Builder(); - - if(biome.getContext().has(VanillaBiomeProperties.class)) { - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) - .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) - .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) - .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) - .grassColorModifier( - Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier())); - - - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - } else { - effects.grassColor(vanillaBiomeProperties.getGrassColor()); - } - - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - } else { - effects.foliageColor(vanillaBiomeProperties.getFoliageColor()); - } - - builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation())); - - } else { - effects.waterColor(vanilla.getWaterColor()) - .waterFogColor(vanilla.getWaterFogColor()) - .fogColor(vanilla.getFogColor()) - .skyColor(vanilla.getSkyColor()); - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - - builder.precipitation(vanilla.getPrecipitation()); - } - - vanilla.getLoopSound().ifPresent(effects::loopSound); - vanilla.getAdditionsSound().ifPresent(effects::additionsSound); - vanilla.getMoodSound().ifPresent(effects::moodSound); - vanilla.getMusic().ifPresent(effects::music); - vanilla.getParticleConfig().ifPresent(effects::particleConfig); - - return builder - .temperature(vanilla.getTemperature()) - .downfall(vanilla.getDownfall()) - .effects(effects.build()) - .spawnSettings(vanilla.getSpawnSettings()) - .generationSettings(generationSettings.build()) - .build(); - } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java index 78759c4f4..78c180283 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java @@ -56,7 +56,7 @@ public final class TagUtil { logger.info("Doing biome tag garbage...."); Map, List>> collect = tagsToMutableMap(registry); - BiomeUtil + MinecraftUtil .getTerraBiomeMap() .forEach((vb, terraBiomes) -> MinecraftUtil diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/lifecycle/DataPackContentsMixin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/lifecycle/DataPackContentsMixin.java index fefb67df4..b7db9106a 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/lifecycle/DataPackContentsMixin.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/lifecycle/DataPackContentsMixin.java @@ -2,6 +2,8 @@ package com.dfsek.terra.forge.mixin.lifecycle; import com.dfsek.terra.forge.util.BiomeUtil; import com.dfsek.terra.forge.util.TagUtil; +import com.dfsek.terra.mod.util.MinecraftUtil; + import net.minecraft.server.DataPackContents; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; @@ -23,6 +25,6 @@ public class DataPackContentsMixin { Registry biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY); TagUtil.registerBiomeTags(biomeRegistry); - BiomeUtil.registerFlora(biomeRegistry); + MinecraftUtil.registerFlora(biomeRegistry); } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index c42db1143..28fe88ec2 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -1,49 +1,31 @@ package com.dfsek.terra.forge.util; -import com.dfsek.terra.mod.config.ProtoPlatformBiome; - import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; -import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.biome.Biome.Builder; -import net.minecraft.world.biome.BiomeEffects; -import net.minecraft.world.biome.GenerationSettings; -import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegisterEvent.RegisterHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.forge.ForgeEntryPoint; import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.mod.config.VanillaBiomeProperties; -import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; +import com.dfsek.terra.mod.util.MinecraftUtil; public final class BiomeUtil { private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); - private static final Map> - TERRA_BIOME_MAP = new HashMap<>(); private BiomeUtil() { } - - public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { - return pack.getID() - .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); - } + public static void registerBiomes(RegisterHelper helper) { logger.info("Registering biomes..."); @@ -51,7 +33,7 @@ public final class BiomeUtil { pack.getCheckedRegistry(Biome.class) .forEach((id, biome) -> registerBiome(biome, pack, id, helper)); }); - registerFlora(BuiltinRegistries.BIOME); + MinecraftUtil.registerFlora(BuiltinRegistries.BIOME); logger.info("Terra biomes registered."); } @@ -69,104 +51,18 @@ public final class BiomeUtil { if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { - net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value()); + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value()); - Identifier identifier = new Identifier("terra", createBiomeID(pack, id)); + Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); if(ForgeRegistries.BIOMES.containsKey(identifier)) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow()); } else { - helper.register(registerKey(identifier).getValue(), minecraftBiome); + helper.register(MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome); ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow()); } - TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); + MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); } } - - 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 Map> getTerraBiomeMap() { - return Map.copyOf(TERRA_BIOME_MAP); - } - - private static RegistryKey registerKey(Identifier identifier) { - return RegistryKey.of(Registry.BIOME_KEY, identifier); - } - - public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) { - GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); - - BiomeEffects.Builder effects = new BiomeEffects.Builder(); - - net.minecraft.world.biome.Biome.Builder builder = new Builder(); - - if(biome.getContext().has(VanillaBiomeProperties.class)) { - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) - .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) - .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) - .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) - .grassColorModifier( - Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier())); - - - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - } else { - effects.grassColor(vanillaBiomeProperties.getGrassColor()); - } - - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - } else { - effects.foliageColor(vanillaBiomeProperties.getFoliageColor()); - } - - builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation())); - - } else { - effects.waterColor(vanilla.getWaterColor()) - .waterFogColor(vanilla.getWaterFogColor()) - .fogColor(vanilla.getFogColor()) - .skyColor(vanilla.getSkyColor()); - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - - builder.precipitation(vanilla.getPrecipitation()); - } - - vanilla.getLoopSound().ifPresent(effects::loopSound); - vanilla.getAdditionsSound().ifPresent(effects::additionsSound); - vanilla.getMoodSound().ifPresent(effects::moodSound); - vanilla.getMusic().ifPresent(effects::music); - vanilla.getParticleConfig().ifPresent(effects::particleConfig); - - return builder - .temperature(vanilla.getTemperature()) - .downfall(vanilla.getDownfall()) - .effects(effects.build()) - .spawnSettings(vanilla.getSpawnSettings()) - .generationSettings(generationSettings.build()) - .build(); - } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java index 42f001e8e..38a1e2237 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java @@ -56,7 +56,7 @@ public final class TagUtil { logger.info("Doing biome tag garbage...."); Map, List>> collect = tagsToMutableMap(registry); - BiomeUtil + MinecraftUtil .getTerraBiomeMap() .forEach((vb, terraBiomes) -> MinecraftUtil diff --git a/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index 9f7a36712..80178c3be 100644 --- a/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -5,6 +5,10 @@ import com.dfsek.terra.api.block.entity.Container; import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.Sign; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; + import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; @@ -12,12 +16,29 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; +import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.WorldAccess; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.Builder; +import net.minecraft.world.biome.BiomeEffects; +import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; import java.util.Optional; public final class MinecraftUtil { + public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class); + public static final Map> + TERRA_BIOME_MAP = new HashMap<>(); + private MinecraftUtil() { } @@ -39,4 +60,95 @@ 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 Map> getTerraBiomeMap() { + return Map.copyOf(TERRA_BIOME_MAP); + } + + public static RegistryKey registerKey(Identifier identifier) { + return RegistryKey.of(Registry.BIOME_KEY, identifier); + } + + public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) { + GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); + + BiomeEffects.Builder effects = new BiomeEffects.Builder(); + + Biome.Builder builder = new Builder(); + + if(biome.getContext().has(VanillaBiomeProperties.class)) { + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) + .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) + .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) + .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) + .grassColorModifier( + Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier())); + + + if(vanillaBiomeProperties.getGrassColor() == null) { + vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); + } else { + effects.grassColor(vanillaBiomeProperties.getGrassColor()); + } + + if(vanillaBiomeProperties.getFoliageColor() == null) { + vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); + } else { + effects.foliageColor(vanillaBiomeProperties.getFoliageColor()); + } + + builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation())); + + } else { + effects.waterColor(vanilla.getWaterColor()) + .waterFogColor(vanilla.getWaterFogColor()) + .fogColor(vanilla.getFogColor()) + .skyColor(vanilla.getSkyColor()); + vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); + vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); + + builder.precipitation(vanilla.getPrecipitation()); + } + + vanilla.getLoopSound().ifPresent(effects::loopSound); + vanilla.getAdditionsSound().ifPresent(effects::additionsSound); + vanilla.getMoodSound().ifPresent(effects::moodSound); + vanilla.getMusic().ifPresent(effects::music); + vanilla.getParticleConfig().ifPresent(effects::particleConfig); + + return builder + .temperature(vanilla.getTemperature()) + .downfall(vanilla.getDownfall()) + .effects(effects.build()) + .spawnSettings(vanilla.getSpawnSettings()) + .generationSettings(generationSettings.build()) + .build(); + } + + public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { + return pack.getID() + .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); + } }