diff --git a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteFactory.java b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteFactory.java index 4349ae661..1deb75c93 100644 --- a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteFactory.java +++ b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteFactory.java @@ -8,7 +8,6 @@ package com.dfsek.terra.addons.palette; import com.dfsek.terra.addons.palette.palette.PaletteImpl; -import com.dfsek.terra.addons.palette.palette.PaletteLayerHolder; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.world.chunk.generation.util.Palette; @@ -17,10 +16,6 @@ import com.dfsek.terra.api.world.chunk.generation.util.Palette; public class PaletteFactory implements ConfigFactory { @Override public Palette build(PaletteTemplate config, Platform platform) { - PaletteImpl palette = new PaletteImpl(config.getNoise()); - for(PaletteLayerHolder layer : config.getPalette()) { - palette.add(layer.getLayer(), layer.getSize(), layer.getSampler()); - } - return palette; + return new PaletteImpl(config.getPalette(), config.getDefaultSampler()); } } diff --git a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteTemplate.java b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteTemplate.java index eb5f219bc..d2c966320 100644 --- a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteTemplate.java +++ b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteTemplate.java @@ -23,7 +23,7 @@ import com.dfsek.terra.api.noise.NoiseSampler; public class PaletteTemplate implements AbstractableTemplate { @Value("sampler") @Default - private @Meta NoiseSampler noise = NoiseSampler.zero(); + private @Meta NoiseSampler defaultSampler = NoiseSampler.zero(); @Value("id") @Final @@ -40,7 +40,7 @@ public class PaletteTemplate implements AbstractableTemplate { return palette; } - public NoiseSampler getNoise() { - return noise; + public NoiseSampler getDefaultSampler() { + return defaultSampler; } } diff --git a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/palette/PaletteImpl.java b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/palette/PaletteImpl.java index 96186f3d4..1eeaff73d 100644 --- a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/palette/PaletteImpl.java +++ b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/palette/PaletteImpl.java @@ -15,73 +15,45 @@ import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.chunk.generation.util.Palette; - /** * A class representation of a "slice" of the world. * Used to get a section of blocks, based on the depth at which they are found. */ public class PaletteImpl implements Palette { - private final List pallet = new ArrayList<>(); - private final NoiseSampler sampler; + private final PaletteLayer[] layers; - public PaletteImpl(NoiseSampler sampler) { - this.sampler = sampler; - } + public PaletteImpl(List layers, NoiseSampler defaultSampler) { + List layerArray = new ArrayList<>(); - public Palette add(ProbabilityCollection m, int layers, NoiseSampler sampler) { - for(int i = 0; i < layers; i++) { - pallet.add(new PaletteLayer(m, sampler)); + for (PaletteLayerHolder holder : layers) { + PaletteLayer layer; + ProbabilityCollection materials = holder.getLayer(); + NoiseSampler sampler = holder.getSampler() == null ? defaultSampler : holder.getSampler(); + layer = new PaletteLayer(materials, sampler); + for (int i = 0; i < holder.getSize(); i++) + layerArray.add(layer); } - return this; + + this.layers = layerArray.toArray(new PaletteLayer[0]); } @Override public BlockState get(int layer, double x, double y, double z, long seed) { - PaletteLayer paletteLayer; - if(layer > this.getSize()) paletteLayer = this.getLayers().get(this.getLayers().size() - 1); - else { - List pl = getLayers(); - if(layer >= pl.size()) paletteLayer = pl.get(pl.size() - 1); - else paletteLayer = pl.get(layer); - } - NoiseSampler paletteSampler = paletteLayer.getSampler(); - return paletteLayer.get(paletteSampler == null ? sampler : paletteSampler, x, y, z, seed); + int idx = layer < layers.length ? layer : layers.length - 1; + return layers[idx].get(x, y, z, seed); } - - public int getSize() { - return pallet.size(); - } - - public List getLayers() { - return pallet; - } - - /** - * Class representation of a layer of a BlockPalette. - */ - public static class PaletteLayer { + static class PaletteLayer { private final NoiseSampler sampler; private final ProbabilityCollection collection; - /** - * Constructs a PaletteLayerHolder with a ProbabilityCollection of materials and a number of layers. - * - * @param type The collection of materials to choose from. - * @param sampler Noise sampler to use - */ public PaletteLayer(ProbabilityCollection type, NoiseSampler sampler) { this.sampler = sampler; this.collection = type; } - public BlockState get(NoiseSampler random, double x, double y, double z, long seed) { - return this.collection.get(random, x, y, z, seed); + public BlockState get(double x, double y, double z, long seed) { + return this.collection.get(sampler, x, y, z, seed); } - - public NoiseSampler getSampler() { - return sampler; - } - } }