mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
property-ify trees
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user