From 810340dbfb699baebb5b629c56dbe2aebeccc726 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 17 Jul 2021 12:24:15 -0700 Subject: [PATCH] property-ify trees --- .../terra/addons/tree/BiomeTreeTemplate.java | 8 +++++--- .../dfsek/terra/addons/tree/BiomeTrees.java | 18 ++++++++++++++++++ .../com/dfsek/terra/addons/tree/TreeAddon.java | 16 ++-------------- .../dfsek/terra/addons/tree/TreePopulator.java | 6 ++---- 4 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTrees.java diff --git a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTreeTemplate.java b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTreeTemplate.java index dc34e10be..df507127b 100644 --- a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTreeTemplate.java +++ b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTreeTemplate.java @@ -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 { @Value("trees") @Default private List trees = Collections.emptyList(); - public List getTrees() { - return trees; + @Override + public BiomeTrees get() { + return new BiomeTrees(trees); } } diff --git a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTrees.java b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTrees.java new file mode 100644 index 000000000..095dee68a --- /dev/null +++ b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/BiomeTrees.java @@ -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 trees; + + public BiomeTrees(List trees) { + this.trees = trees; + } + + public List getTrees() { + return trees; + } +} diff --git a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeAddon.java b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeAddon.java index 378f3c40d..bce7b8ec2 100644 --- a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeAddon.java +++ b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeAddon.java @@ -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> 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 getTrees(TerraBiome biome) { - return trees.getOrDefault(biome.getID(), Collections.emptyList()); - } } diff --git a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreePopulator.java b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreePopulator.java index 63580a2c7..3449b5505 100644 --- a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreePopulator.java +++ b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreePopulator.java @@ -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))); }