From 008084fae94d1a9bba399d025fab3bcbfdbce676 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 14 Jun 2021 14:21:42 -0700 Subject: [PATCH] TreeLayerLoader -> TreeLayerTemplate --- .../dfsek/terra/config/GenericLoaders.java | 4 +- .../loaders/config/OreConfigTemplate.java | 1 + .../loaders/config/TreeLayerLoader.java | 34 -------------- .../loaders/config/TreeLayerTemplate.java | 44 +++++++++++++++++++ 4 files changed, 47 insertions(+), 36 deletions(-) delete mode 100644 common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerLoader.java create mode 100644 common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerTemplate.java diff --git a/common/src/main/java/com/dfsek/terra/config/GenericLoaders.java b/common/src/main/java/com/dfsek/terra/config/GenericLoaders.java index a331cb898..6ac7dfc69 100644 --- a/common/src/main/java/com/dfsek/terra/config/GenericLoaders.java +++ b/common/src/main/java/com/dfsek/terra/config/GenericLoaders.java @@ -29,7 +29,7 @@ import com.dfsek.terra.config.loaders.config.FloraLayerTemplate; import com.dfsek.terra.config.loaders.config.GridSpawnTemplate; import com.dfsek.terra.config.loaders.config.OreConfigTemplate; import com.dfsek.terra.config.loaders.config.OreHolderLoader; -import com.dfsek.terra.config.loaders.config.TreeLayerLoader; +import com.dfsek.terra.config.loaders.config.TreeLayerTemplate; import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader; import com.dfsek.terra.config.loaders.config.biome.SourceBuilderLoader; import com.dfsek.terra.config.loaders.config.biome.StageBuilderLoader; @@ -75,7 +75,7 @@ public class GenericLoaders implements LoaderRegistrar { .registerLoader(FloraLayer.class, FloraLayerTemplate::new) .registerLoader(Ore.Type.class, (t, o, l) -> Ore.Type.valueOf(o.toString())) .registerLoader(OreConfig.class, OreConfigTemplate::new) - .registerLoader(TreeLayer.class, new TreeLayerLoader()) + .registerLoader(TreeLayer.class, TreeLayerTemplate::new) .registerLoader(MaterialSet.class, new MaterialSetLoader()) .registerLoader(OreHolder.class, new OreHolderLoader()) .registerLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new) diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/OreConfigTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/OreConfigTemplate.java index 4ec47888b..fb514759f 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/OreConfigTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/OreConfigTemplate.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.Range; import com.dfsek.terra.world.population.items.ores.OreConfig; +@SuppressWarnings("unused") public class OreConfigTemplate implements ObjectTemplate { @Value("min") private MetaValue min; diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerLoader.java deleted file mode 100644 index 0b52d2d19..000000000 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerLoader.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.dfsek.terra.config.loaders.config; - -import com.dfsek.tectonic.exception.LoadException; -import com.dfsek.tectonic.loading.ConfigLoader; -import com.dfsek.tectonic.loading.TypeLoader; -import com.dfsek.terra.api.math.Range; -import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler; -import com.dfsek.terra.api.platform.world.Tree; -import com.dfsek.terra.api.util.collections.ProbabilityCollection; -import com.dfsek.terra.api.util.seeded.NoiseSeeded; -import com.dfsek.terra.config.loaders.Types; -import com.dfsek.terra.world.population.items.tree.TreeLayer; - -import java.lang.reflect.Type; -import java.util.Map; - -@SuppressWarnings("unchecked") -public class TreeLayerLoader implements TypeLoader { - @Override - public TreeLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException { - Map map = (Map) o; - double density = ((Number) map.get("density")).doubleValue(); - Range range = configLoader.loadClass(Range.class, map.get("y")); - if(range == null) throw new LoadException("Tree range unspecified"); - ProbabilityCollection items = (ProbabilityCollection) configLoader.loadType(Types.TREE_PROBABILITY_COLLECTION_TYPE, map.get("items")); - - if(map.containsKey("distribution")) { - NoiseSeeded noise = configLoader.loadClass(NoiseSeeded.class, map.get("distribution")); - return new TreeLayer(density, range, items, noise.apply(2403L)); - } - - return new TreeLayer(density, range, items, new WhiteNoiseSampler(2403)); - } -} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerTemplate.java new file mode 100644 index 000000000..a4739de3f --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/TreeLayerTemplate.java @@ -0,0 +1,44 @@ +package com.dfsek.terra.config.loaders.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.config.meta.MetaValue; +import com.dfsek.terra.api.math.Range; +import com.dfsek.terra.api.math.noise.NoiseSampler; +import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler; +import com.dfsek.terra.api.platform.world.Tree; +import com.dfsek.terra.api.util.collections.ProbabilityCollection; +import com.dfsek.terra.api.util.seeded.NoiseSeeded; +import com.dfsek.terra.world.population.items.tree.TreeLayer; + +@SuppressWarnings({"FieldMayBeFinal", "unused"}) +public class TreeLayerTemplate implements ObjectTemplate { + @Value("density") + private MetaValue density; + + @Value("y") + private MetaValue range; + + @Value("items") + private ProbabilityCollection items; + + @Value("distribution") + @Default + private MetaValue sampler = MetaValue.of(new NoiseSeeded() { + @Override + public NoiseSampler apply(Long seed) { + return new WhiteNoiseSampler(seed.intValue()); + } + + @Override + public int getDimensions() { + return 2; + } + }); + + @Override + public TreeLayer get() { + return new TreeLayer(density.get(), range.get(), items, sampler.get().apply(2403L)); + } +}