diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java index e221e5898..1bbbff6b3 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java @@ -20,4 +20,18 @@ public interface BiomeDelegate extends StringIdentifiable { } }; } + + static BiomeDelegate from(Biome biome) { + return new BiomeDelegate() { + @Override + public Biome getBiome() { + return biome; + } + + @Override + public String getID() { + return biome.getID(); + } + }; + } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomeDelegateLoader.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomeDelegateLoader.java new file mode 100644 index 000000000..198a9c0b1 --- /dev/null +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomeDelegateLoader.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.addons.biome.pipeline.config; + +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.tectonic.loading.TypeLoader; +import org.jetbrains.annotations.NotNull; + +import java.lang.reflect.AnnotatedType; + +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; +import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.world.biome.Biome; + + +public class BiomeDelegateLoader implements TypeLoader { + private final Registry biomeRegistry; + + public BiomeDelegateLoader(Registry biomeRegistry) { + this.biomeRegistry = biomeRegistry; + } + + @Override + public BiomeDelegate load(@NotNull AnnotatedType t, @NotNull Object c, @NotNull ConfigLoader loader) throws LoadException { + return biomeRegistry + .get((String) c) + .map(BiomeDelegate::from) + .orElseGet(() -> BiomeDelegate.ephemeral((String) c)); + } +}