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 03c2dd66b..daee1ebd1 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 @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.chunkgenerator; import com.dfsek.terra.addons.chunkgenerator.generation.generators.NoiseChunkGenerator3D; +import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; +import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.annotations.Addon; @@ -26,5 +28,6 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException { event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main)); + event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader()); } } 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 new file mode 100644 index 000000000..5f4efd908 --- /dev/null +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/palette/SlantHolderLoader.java @@ -0,0 +1,28 @@ +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, (PaletteHolder) configLoader.loadType(PaletteHolder.class, layer.get("palette"))); + } + + return new SlantHolder(slantLayers, minThreshold); + } +}