diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java index 8890a56b1..65edf085b 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java @@ -10,9 +10,8 @@ package com.dfsek.terra.addons.chunkgenerator; import com.dfsek.terra.addons.chunkgenerator.config.NoiseChunkGeneratorPackConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.palette.BiomePaletteTemplate; +import com.dfsek.terra.addons.chunkgenerator.config.palette.SlantLayer; import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D; -import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; -import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader; import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; @@ -45,7 +44,7 @@ public class NoiseChunkGenerator3DAddon implements AddonInitializer { pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(), config.getHorizontalRes(), config.getVerticalRes())); event.getPack() - .applyLoader(SlantHolder.class, new SlantHolderLoader()); + .applyLoader(SlantLayer.class, SlantLayer::new); }) .failThrough(); diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/BiomePaletteTemplate.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/BiomePaletteTemplate.java index 9498f0728..8fe5b747a 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/BiomePaletteTemplate.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/BiomePaletteTemplate.java @@ -17,15 +17,17 @@ import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.world.chunk.generation.util.Palette; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; public class BiomePaletteTemplate implements ObjectTemplate { @Value("slant") @Default - private @Meta SlantHolder slant; + private @Meta List<@Meta SlantLayer> slant = Collections.emptyList(); @Value("palette") private @Meta List<@Meta Map<@Meta Palette, @Meta Integer>> palettes; @Value("ocean.level") @@ -42,6 +44,16 @@ public class BiomePaletteTemplate implements ObjectTemplate { builder.add(entry.getValue(), entry.getKey()); } } - return new PaletteInfo(builder.build(), slant, oceanPalette, seaLevel); + + TreeMap slantLayers = new TreeMap<>(); + double minThreshold = Double.MAX_VALUE; + + for(SlantLayer layer : slant) { + double threshold = layer.getThreshold(); + if(threshold < minThreshold) minThreshold = threshold; + slantLayers.put(threshold, layer.getPalette()); + } + + return new PaletteInfo(builder.build(), new SlantHolder(slantLayers, minThreshold), oceanPalette, seaLevel); } } diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/SlantLayer.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/SlantLayer.java new file mode 100644 index 000000000..a1dc8a96c --- /dev/null +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/SlantLayer.java @@ -0,0 +1,42 @@ +package com.dfsek.terra.addons.chunkgenerator.config.palette; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder; +import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolderBuilder; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.world.chunk.generation.util.Palette; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + + +public class SlantLayer implements ObjectTemplate { + @Value("threshold") + private @Meta double threshold; + + @Value("palette") + private @Meta List<@Meta Map<@Meta Palette, @Meta Integer>> palettes; + + @Override + public SlantLayer get() { + return this; + } + + public double getThreshold() { + return threshold; + } + + public PaletteHolder getPalette() { + PaletteHolderBuilder builder = new PaletteHolderBuilder(); + for(Map layer : palettes) { + for(Entry entry : layer.entrySet()) { + builder.add(entry.getValue(), entry.getKey()); + } + } + + return builder.build(); + } +} diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/palette/SlantHolderLoader.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/palette/SlantHolderLoader.java deleted file mode 100644 index 1a8b70bd2..000000000 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/palette/SlantHolderLoader.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2020-2021 Polyhedral Development - * - * The Terra Core Addons are licensed under the terms of the MIT License. For more details, - * reference the LICENSE file in this module's root directory. - */ - -package com.dfsek.terra.addons.chunkgenerator.palette; - -import com.dfsek.tectonic.exception.LoadException; -import com.dfsek.tectonic.loading.ConfigLoader; -import com.dfsek.tectonic.loading.TypeLoader; - -import java.lang.reflect.AnnotatedType; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - - -@SuppressWarnings("unchecked") -public class SlantHolderLoader implements TypeLoader { - @Override - public SlantHolder load(AnnotatedType type, Object o, ConfigLoader configLoader) throws LoadException { - List> layers = (List>) o; - TreeMap slantLayers = new TreeMap<>(); - double minThreshold = Double.MAX_VALUE; - - for(Map layer : layers) { - double threshold = ((Number) layer.get("threshold")).doubleValue(); - if(threshold < minThreshold) minThreshold = threshold; - slantLayers.put(threshold, configLoader.loadType(PaletteHolder.class, layer.get("palette"))); - } - - return new SlantHolder(slantLayers, minThreshold); - } -}