property-ify trees

This commit is contained in:
dfsek
2021-07-17 12:24:15 -07:00
parent f4820e5a06
commit 810340dbfb
4 changed files with 27 additions and 21 deletions

View File

@@ -3,17 +3,19 @@ package com.dfsek.terra.addons.tree;
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.addons.tree.tree.TreeLayer;
import java.util.Collections;
import java.util.List;
public class BiomeTreeTemplate implements ConfigTemplate {
public class BiomeTreeTemplate implements ObjectTemplate<BiomeTrees> {
@Value("trees")
@Default
private List<TreeLayer> trees = Collections.emptyList();
public List<TreeLayer> getTrees() {
return trees;
@Override
public BiomeTrees get() {
return new BiomeTrees(trees);
}
}

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.addons.tree;
import com.dfsek.terra.addons.tree.tree.TreeLayer;
import com.dfsek.terra.api.properties.Properties;
import java.util.List;
public class BiomeTrees implements Properties {
private final List<TreeLayer> trees;
public BiomeTrees(List<TreeLayer> trees) {
this.trees = trees;
}
public List<TreeLayer> getTrees() {
return trees;
}
}

View File

@@ -13,14 +13,8 @@ import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.generator.GenerationStageProvider;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Addon("config-tree")
@Author("Terra")
@Version("1.0.0")
@@ -28,8 +22,6 @@ public class TreeAddon extends TerraAddon implements EventListener {
@Inject
private TerraPlugin main;
private final Map<String, List<TreeLayer>> trees = new HashMap<>();
@Override
public void initialize() {
main.getEventManager().registerListener(this, this);
@@ -37,17 +29,13 @@ public class TreeAddon extends TerraAddon implements EventListener {
public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException {
event.getPack().registerConfigType(new TreeConfigType(event.getPack()), "TREE", 2);
event.getPack().getOrCreateRegistry(GenerationStageProvider.class).register("TREE", pack -> new TreePopulator(main, this));
event.getPack().getOrCreateRegistry(GenerationStageProvider.class).register("TREE", pack -> new TreePopulator(main));
event.getPack().applyLoader(TreeLayer.class, TreeLayerTemplate::new);
}
public void onBiomeLoad(ConfigurationLoadEvent event) {
if(BiomeBuilder.class.isAssignableFrom(event.getType().getTypeClass())) {
trees.put(event.getConfiguration().getID(), event.load(new BiomeTreeTemplate()).getTrees());
event.getLoadedObject(BiomeBuilder.class).getContext().put(event.load(new BiomeTreeTemplate()).get());
}
}
public List<TreeLayer> getTrees(TerraBiome biome) {
return trees.getOrDefault(biome.getID(), Collections.emptyList());
}
}

View File

@@ -18,11 +18,9 @@ import java.util.Random;
public class TreePopulator implements TerraGenerationStage {
private final TerraPlugin main;
private final TreeAddon addon;
public TreePopulator(TerraPlugin main, TreeAddon addon) {
public TreePopulator(TerraPlugin main) {
this.main = main;
this.addon = addon;
}
private static int offset(Random r, int i) {
@@ -40,7 +38,7 @@ public class TreePopulator implements TerraGenerationStage {
Random random = PopulationUtil.getRandom(chunk);
for(int x = 0; x < 16; x += 2) {
for(int z = 0; z < 16; z += 2) {
for(TreeLayer layer : addon.getTrees(provider.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z))) {
for(TreeLayer layer : provider.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z).getContext().get(BiomeTrees.class).getTrees()) {
if(layer.getDensity() >= random.nextDouble() * 100) {
layer.place(chunk, new Vector2(offset(random, x), offset(random, z)));
}