diff --git a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java index deeda4ef1..76b45f163 100644 --- a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java +++ b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java @@ -1,11 +1,14 @@ package com.dfsek.terra.addons.generation.structure; +import com.dfsek.terra.addons.generation.structure.config.BiomeStructuresTemplate; import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; +import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.generator.GenerationStageProvider; @@ -25,6 +28,16 @@ public class StructureGenerationAddon implements AddonInitializer { .getOrCreateRegistry(GenerationStageProvider.class) .register("STRUCTURE", pack -> new StructureGenerationStage(platform))) .failThrough(); + + platform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(addon, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(TerraBiome.class)) { + event.getLoadedObject(TerraBiome.class).getContext().put(event.load(new BiomeStructuresTemplate()).get()); + } + }) + .failThrough(); } } diff --git a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructures.java b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructures.java new file mode 100644 index 000000000..838c29ebd --- /dev/null +++ b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructures.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.addons.generation.structure.config; + +import com.dfsek.terra.api.properties.Properties; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; + +import java.util.List; + + +public class BiomeStructures implements Properties { + private final List structures; + + public BiomeStructures(List structures) { this.structures = structures; } + + public List getStructures() { + return structures; + } +} diff --git a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructuresTemplate.java b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructuresTemplate.java new file mode 100644 index 000000000..12b90520c --- /dev/null +++ b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/config/BiomeStructuresTemplate.java @@ -0,0 +1,25 @@ +package com.dfsek.terra.addons.generation.structure.config; + +import com.dfsek.tectonic.annotations.Default; +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ConfigTemplate; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.structure.feature.Feature; + +import java.util.Collections; +import java.util.List; + + +public class BiomeStructuresTemplate implements ObjectTemplate { + @Value("features") + @Default + private @Meta List<@Meta ConfiguredStructure> features = Collections.emptyList(); + + @Override + public BiomeStructures get() { + return new BiomeStructures(features); + } +}