feature configuration

This commit is contained in:
dfsek 2021-07-17 19:57:50 -07:00
parent 6b191ac00b
commit 0f638b0317
4 changed files with 83 additions and 0 deletions

View File

@ -1,12 +1,17 @@
package com.dfsek.terra.addons.generation.feature;
import com.dfsek.terra.addons.generation.feature.config.BiomeFeaturesTemplate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.EventListener;
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.api.world.generator.GenerationStageProvider;
@Addon("generation-stage-feature")
@Version("1.0.0")
@ -19,4 +24,14 @@ public class FeatureGenerationAddon extends TerraAddon implements EventListener
public void initialize() {
main.getEventManager().registerListener(this, this);
}
public void onPackLoad(ConfigPackPreLoadEvent event) {
event.getPack().getOrCreateRegistry(GenerationStageProvider.class).register("FEATURE", pack -> new FeatureGenerationStage(main));
}
public void onBiomeLoad(ConfigurationLoadEvent event) {
if(BiomeBuilder.class.isAssignableFrom(event.getType().getTypeClass())) {
event.getLoadedObject(BiomeBuilder.class).getContext().put(event.load(new BiomeFeaturesTemplate()).get());
}
}
}

View File

@ -0,0 +1,30 @@
package com.dfsek.terra.addons.generation.feature;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.generator.TerraGenerationStage;
public class FeatureGenerationStage implements TerraGenerationStage {
private final TerraPlugin main;
public FeatureGenerationStage(TerraPlugin main) {
this.main = main;
}
@Override
public void populate(World world, Chunk chunk) {
TerraWorld terraWorld = main.getWorld(world);
try(ProfileFrame ignore = main.getProfiler().profile("feature")) {
int cx = chunk.getX() << 4;
int cz = chunk.getZ() << 4;
for(int x = 0; x < 16; x++) {
for(int z = 0; z < 16; z++) {
}
}
}
}
}

View File

@ -0,0 +1,18 @@
package com.dfsek.terra.addons.generation.feature.config;
import com.dfsek.terra.api.properties.Properties;
import com.dfsek.terra.api.structure.feature.Feature;
import java.util.List;
public class BiomeFeatures implements Properties {
private final List<Feature> features;
public BiomeFeatures(List<Feature> features) {
this.features = features;
}
public List<Feature> getFeatures() {
return features;
}
}

View File

@ -0,0 +1,20 @@
package com.dfsek.terra.addons.generation.feature.config;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.structure.feature.Feature;
import java.util.Collections;
import java.util.List;
public class BiomeFeaturesTemplate implements ObjectTemplate<BiomeFeatures> {
@Value("features")
@Default
private List<Feature> features = Collections.emptyList();
@Override
public BiomeFeatures get() {
return new BiomeFeatures(features);
}
}