mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
remove most hard coded registries
This commit is contained in:
parent
75cb6be36f
commit
4237657dad
@ -1,10 +1,12 @@
|
|||||||
package com.dfsek.terra.api.util.generic.pair;
|
package com.dfsek.terra.api.util.generic.pair;
|
||||||
|
|
||||||
public class ImmutablePair<L, R> {
|
public final class ImmutablePair<L, R> {
|
||||||
private final L left;
|
private final L left;
|
||||||
private final R right;
|
private final R right;
|
||||||
|
|
||||||
public ImmutablePair(L left, R right) {
|
private static final ImmutablePair<?, ?> NULL = new ImmutablePair<>(null, null);
|
||||||
|
|
||||||
|
private ImmutablePair(L left, R right) {
|
||||||
this.left = left;
|
this.left = left;
|
||||||
this.right = right;
|
this.right = right;
|
||||||
}
|
}
|
||||||
@ -21,7 +23,12 @@ public class ImmutablePair<L, R> {
|
|||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <L1, R1> ImmutablePair<L1, R1> ofNull() {
|
||||||
|
return (ImmutablePair<L1, R1>) NULL;
|
||||||
|
}
|
||||||
|
|
||||||
public Pair<L, R> mutable() {
|
public Pair<L, R> mutable() {
|
||||||
return new Pair<>(left, right);
|
return Pair.of(left, right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ public class Pair<L, R> {
|
|||||||
private L left;
|
private L left;
|
||||||
private R right;
|
private R right;
|
||||||
|
|
||||||
public Pair(L left, R right) {
|
private Pair(L left, R right) {
|
||||||
this.left = left;
|
this.left = left;
|
||||||
this.right = right;
|
this.right = right;
|
||||||
}
|
}
|
||||||
@ -30,6 +30,6 @@ public class Pair<L, R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ImmutablePair<L, R> immutable() {
|
public ImmutablePair<L, R> immutable() {
|
||||||
return new ImmutablePair<>(left, right);
|
return ImmutablePair.of(left, right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
package com.dfsek.terra.api.util.world;
|
package com.dfsek.terra.api.util.world;
|
||||||
|
|
||||||
import com.dfsek.terra.api.math.MathUtil;
|
import com.dfsek.terra.api.math.MathUtil;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.world.generation.math.samplers.Sampler;
|
import com.dfsek.terra.world.generation.math.samplers.Sampler;
|
||||||
|
|
||||||
public final class PaletteUtil {
|
public final class PaletteUtil {
|
||||||
public static Palette<BlockData> getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) {
|
public static Palette getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) {
|
||||||
PaletteHolder slant = c.getSlantPalette();
|
PaletteHolder slant = c.getSlantPalette();
|
||||||
if(slant != null && MathUtil.derivative(sampler, x, y, z) > c.getSlantThreshold()) {
|
if(slant != null && MathUtil.derivative(sampler, x, y, z) > c.getSlantThreshold()) {
|
||||||
return slant.getPalette(y);
|
return slant.getPalette(y);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.dfsek.terra.api.world.biome;
|
package com.dfsek.terra.api.world.biome;
|
||||||
|
|
||||||
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
|
|
||||||
public interface Generator {
|
public interface Generator {
|
||||||
@ -35,7 +34,7 @@ public interface Generator {
|
|||||||
*
|
*
|
||||||
* @return BlocPalette - The biome's palette.
|
* @return BlocPalette - The biome's palette.
|
||||||
*/
|
*/
|
||||||
Palette<BlockData> getPalette(int y);
|
Palette getPalette(int y);
|
||||||
|
|
||||||
NoiseSampler getBiomeNoise();
|
NoiseSampler getBiomeNoise();
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package com.dfsek.terra.api.world.palette;
|
package com.dfsek.terra.api.world.palette;
|
||||||
|
|
||||||
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
||||||
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class NoisePalette<E> extends Palette<E> {
|
public class NoisePalette extends Palette {
|
||||||
private final NoiseSampler sampler;
|
private final NoiseSampler sampler;
|
||||||
private final boolean is2D;
|
private final boolean is2D;
|
||||||
|
|
||||||
@ -14,11 +15,11 @@ public class NoisePalette<E> extends Palette<E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public E get(int layer, double x, double y, double z) {
|
public BlockData get(int layer, double x, double y, double z) {
|
||||||
PaletteLayer<E> paletteLayer;
|
PaletteLayer paletteLayer;
|
||||||
if(layer > this.getSize()) paletteLayer = this.getLayers().get(this.getLayers().size() - 1);
|
if(layer > this.getSize()) paletteLayer = this.getLayers().get(this.getLayers().size() - 1);
|
||||||
else {
|
else {
|
||||||
List<PaletteLayer<E>> pl = getLayers();
|
List<PaletteLayer> pl = getLayers();
|
||||||
if(layer >= pl.size()) paletteLayer = pl.get(pl.size() - 1);
|
if(layer >= pl.size()) paletteLayer = pl.get(pl.size() - 1);
|
||||||
else paletteLayer = pl.get(layer);
|
else paletteLayer = pl.get(layer);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.dfsek.terra.api.world.palette;
|
package com.dfsek.terra.api.world.palette;
|
||||||
|
|
||||||
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
||||||
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
import com.dfsek.terra.api.util.GlueList;
|
||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
||||||
|
|
||||||
@ -11,8 +12,8 @@ import java.util.Random;
|
|||||||
* A class representation of a "slice" of the world.
|
* 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.
|
* Used to get a section of blocks, based on the depth at which they are found.
|
||||||
*/
|
*/
|
||||||
public abstract class Palette<E> {
|
public abstract class Palette {
|
||||||
private final List<PaletteLayer<E>> pallet = new GlueList<>();
|
private final List<PaletteLayer> pallet = new GlueList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a blank palette.
|
* Constructs a blank palette.
|
||||||
@ -21,16 +22,16 @@ public abstract class Palette<E> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public com.dfsek.terra.api.world.palette.Palette<E> add(E m, int layers, NoiseSampler sampler) {
|
public com.dfsek.terra.api.world.palette.Palette add(BlockData m, int layers, NoiseSampler sampler) {
|
||||||
for(int i = 0; i < layers; i++) {
|
for(int i = 0; i < layers; i++) {
|
||||||
pallet.add(new PaletteLayer<>(m, sampler));
|
pallet.add(new PaletteLayer(m, sampler));
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public com.dfsek.terra.api.world.palette.Palette<E> add(ProbabilityCollection<E> m, int layers, NoiseSampler sampler) {
|
public com.dfsek.terra.api.world.palette.Palette add(ProbabilityCollection<BlockData> m, int layers, NoiseSampler sampler) {
|
||||||
for(int i = 0; i < layers; i++) {
|
for(int i = 0; i < layers; i++) {
|
||||||
pallet.add(new PaletteLayer<>(m, sampler));
|
pallet.add(new PaletteLayer(m, sampler));
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -41,25 +42,25 @@ public abstract class Palette<E> {
|
|||||||
* @param layer - The layer at which to fetch the material.
|
* @param layer - The layer at which to fetch the material.
|
||||||
* @return BlockData - The material fetched.
|
* @return BlockData - The material fetched.
|
||||||
*/
|
*/
|
||||||
public abstract E get(int layer, double x, double y, double z);
|
public abstract BlockData get(int layer, double x, double y, double z);
|
||||||
|
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return pallet.size();
|
return pallet.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PaletteLayer<E>> getLayers() {
|
public List<PaletteLayer> getLayers() {
|
||||||
return pallet;
|
return pallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class representation of a layer of a BlockPalette.
|
* Class representation of a layer of a BlockPalette.
|
||||||
*/
|
*/
|
||||||
public static class PaletteLayer<E> {
|
public static class PaletteLayer {
|
||||||
private final boolean col; // Is layer using a collection?
|
private final boolean col; // Is layer using a collection?
|
||||||
private ProbabilityCollection<E> collection;
|
private ProbabilityCollection<BlockData> collection;
|
||||||
private final NoiseSampler sampler;
|
private final NoiseSampler sampler;
|
||||||
private E m;
|
private BlockData m;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a PaletteLayerHolder with a ProbabilityCollection of materials and a number of layers.
|
* Constructs a PaletteLayerHolder with a ProbabilityCollection of materials and a number of layers.
|
||||||
@ -67,7 +68,7 @@ public abstract class Palette<E> {
|
|||||||
* @param type The collection of materials to choose from.
|
* @param type The collection of materials to choose from.
|
||||||
* @param sampler Noise sampler to use
|
* @param sampler Noise sampler to use
|
||||||
*/
|
*/
|
||||||
public PaletteLayer(ProbabilityCollection<E> type, NoiseSampler sampler) {
|
public PaletteLayer(ProbabilityCollection<BlockData> type, NoiseSampler sampler) {
|
||||||
this.sampler = sampler;
|
this.sampler = sampler;
|
||||||
this.col = true;
|
this.col = true;
|
||||||
this.collection = type;
|
this.collection = type;
|
||||||
@ -79,7 +80,7 @@ public abstract class Palette<E> {
|
|||||||
* @param type The material to use.
|
* @param type The material to use.
|
||||||
* @param sampler Noise sampler to use
|
* @param sampler Noise sampler to use
|
||||||
*/
|
*/
|
||||||
public PaletteLayer(E type, NoiseSampler sampler) {
|
public PaletteLayer(BlockData type, NoiseSampler sampler) {
|
||||||
this.sampler = sampler;
|
this.sampler = sampler;
|
||||||
this.col = false;
|
this.col = false;
|
||||||
this.m = type;
|
this.m = type;
|
||||||
@ -94,18 +95,18 @@ public abstract class Palette<E> {
|
|||||||
*
|
*
|
||||||
* @return Material - the material..
|
* @return Material - the material..
|
||||||
*/
|
*/
|
||||||
public E get(Random random) {
|
public BlockData get(Random random) {
|
||||||
if(col) return this.collection.get(random);
|
if(col) return this.collection.get(random);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public E get(NoiseSampler random, double x, double y, double z, boolean is2D) {
|
public BlockData get(NoiseSampler random, double x, double y, double z, boolean is2D) {
|
||||||
if(col && is2D) return this.collection.get(random, x, z);
|
if(col && is2D) return this.collection.get(random, x, z);
|
||||||
else if(col) return this.collection.get(random, x, y, z);
|
else if(col) return this.collection.get(random, x, y, z);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProbabilityCollection<E> getCollection() {
|
public ProbabilityCollection<BlockData> getCollection() {
|
||||||
return collection;
|
return collection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package com.dfsek.terra.api.world.palette;
|
package com.dfsek.terra.api.world.palette;
|
||||||
|
|
||||||
public class SinglePalette<E> extends Palette<E> {
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
private final E item;
|
|
||||||
|
|
||||||
public SinglePalette(E item) {
|
public class SinglePalette extends Palette {
|
||||||
|
private final BlockData item;
|
||||||
|
|
||||||
|
public SinglePalette(BlockData item) {
|
||||||
this.item = item;
|
this.item = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public E get(int layer, double x, double y, double z) {
|
public BlockData get(int layer, double x, double y, double z) {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
package com.dfsek.terra.api.world.palette.holder;
|
package com.dfsek.terra.api.world.palette.holder;
|
||||||
|
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
|
|
||||||
public class PaletteHolder {
|
public class PaletteHolder {
|
||||||
private final Palette<BlockData>[] palettes;
|
private final Palette[] palettes;
|
||||||
|
|
||||||
protected PaletteHolder(Palette<BlockData>[] palettes) {
|
protected PaletteHolder(Palette[] palettes) {
|
||||||
this.palettes = palettes;
|
this.palettes = palettes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Palette<BlockData> getPalette(int y) {
|
public Palette getPalette(int y) {
|
||||||
return palettes[y];
|
return palettes[y];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.dfsek.terra.api.world.palette.holder;
|
package com.dfsek.terra.api.world.palette.holder;
|
||||||
|
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
@ -8,19 +7,19 @@ import java.util.Map;
|
|||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
public class PaletteHolderBuilder {
|
public class PaletteHolderBuilder {
|
||||||
private final TreeMap<Integer, Palette<BlockData>> paletteMap = new TreeMap<>();
|
private final TreeMap<Integer, Palette> paletteMap = new TreeMap<>();
|
||||||
|
|
||||||
public PaletteHolderBuilder add(int y, Palette<BlockData> palette) {
|
public PaletteHolderBuilder add(int y, Palette palette) {
|
||||||
paletteMap.put(y, palette);
|
paletteMap.put(y, palette);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"})
|
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"})
|
||||||
public PaletteHolder build() {
|
public PaletteHolder build() {
|
||||||
Palette<BlockData>[] palettes = new Palette[paletteMap.lastKey() + 1];
|
Palette[] palettes = new Palette[paletteMap.lastKey() + 1];
|
||||||
for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) {
|
for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) {
|
||||||
Palette<BlockData> d = null;
|
Palette d = null;
|
||||||
for(Map.Entry<Integer, Palette<BlockData>> e : paletteMap.entrySet()) {
|
for(Map.Entry<Integer, Palette> e : paletteMap.entrySet()) {
|
||||||
if(e.getKey() >= y) {
|
if(e.getKey() >= y) {
|
||||||
d = e.getValue();
|
d = e.getValue();
|
||||||
break;
|
break;
|
||||||
|
@ -2,7 +2,6 @@ package com.dfsek.terra.config.factories;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.flora.Flora;
|
import com.dfsek.terra.api.world.flora.Flora;
|
||||||
import com.dfsek.terra.api.world.palette.NoisePalette;
|
import com.dfsek.terra.api.world.palette.NoisePalette;
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
@ -13,7 +12,7 @@ import com.dfsek.terra.world.population.items.flora.TerraFlora;
|
|||||||
public class FloraFactory implements ConfigFactory<FloraTemplate, Flora> {
|
public class FloraFactory implements ConfigFactory<FloraTemplate, Flora> {
|
||||||
@Override
|
@Override
|
||||||
public TerraFlora build(FloraTemplate config, TerraPlugin main) {
|
public TerraFlora build(FloraTemplate config, TerraPlugin main) {
|
||||||
Palette<BlockData> palette = new NoisePalette<>(new WhiteNoiseSampler(2403), false);
|
Palette palette = new NoisePalette(new WhiteNoiseSampler(2403), false);
|
||||||
for(PaletteLayerHolder layer : config.getFloraPalette()) {
|
for(PaletteLayerHolder layer : config.getFloraPalette()) {
|
||||||
palette.add(layer.getLayer(), layer.getSize(), layer.getSampler());
|
palette.add(layer.getLayer(), layer.getSize(), layer.getSampler());
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
package com.dfsek.terra.config.factories;
|
package com.dfsek.terra.config.factories;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.NoisePalette;
|
import com.dfsek.terra.api.world.palette.NoisePalette;
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
|
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
|
||||||
import com.dfsek.terra.config.templates.PaletteTemplate;
|
import com.dfsek.terra.config.templates.PaletteTemplate;
|
||||||
|
|
||||||
public class PaletteFactory implements ConfigFactory<PaletteTemplate, Palette<BlockData>> {
|
public class PaletteFactory implements ConfigFactory<PaletteTemplate, Palette> {
|
||||||
@Override
|
@Override
|
||||||
public Palette<BlockData> build(PaletteTemplate config, TerraPlugin main) {
|
public Palette build(PaletteTemplate config, TerraPlugin main) {
|
||||||
NoisePalette<BlockData> palette = new NoisePalette<>(config.getNoise().apply(2403L), config.getNoise().getDimensions() == 2);
|
NoisePalette palette = new NoisePalette(config.getNoise().apply(2403L), config.getNoise().getDimensions() == 2);
|
||||||
for(PaletteLayerHolder layer : config.getPalette()) {
|
for(PaletteLayerHolder layer : config.getPalette()) {
|
||||||
palette.add(layer.getLayer(), layer.getSize(), layer.getSampler());
|
palette.add(layer.getLayer(), layer.getSize(), layer.getSampler());
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import com.dfsek.terra.api.platform.world.Tree;
|
|||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.flora.Flora;
|
import com.dfsek.terra.api.world.flora.Flora;
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -15,7 +14,6 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class Types {
|
public final class Types {
|
||||||
public static final Type BLOCK_DATA_PALETTE_TYPE;
|
|
||||||
public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
|
public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
|
||||||
public static final Type FLORA_PROBABILITY_COLLECTION_TYPE;
|
public static final Type FLORA_PROBABILITY_COLLECTION_TYPE;
|
||||||
public static final Type TREE_PROBABILITY_COLLECTION_TYPE;
|
public static final Type TREE_PROBABILITY_COLLECTION_TYPE;
|
||||||
@ -23,7 +21,6 @@ public final class Types {
|
|||||||
public static final Type TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP;
|
public static final Type TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
BLOCK_DATA_PALETTE_TYPE = getType("blockDataPalette");
|
|
||||||
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockDataProbabilityCollection");
|
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockDataProbabilityCollection");
|
||||||
FLORA_PROBABILITY_COLLECTION_TYPE = getType("floraProbabilityCollection");
|
FLORA_PROBABILITY_COLLECTION_TYPE = getType("floraProbabilityCollection");
|
||||||
TREE_PROBABILITY_COLLECTION_TYPE = getType("treeProbabilityCollection");
|
TREE_PROBABILITY_COLLECTION_TYPE = getType("treeProbabilityCollection");
|
||||||
@ -31,7 +28,6 @@ public final class Types {
|
|||||||
TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP = getType("terraBiomeProbabilityCollectionMap");
|
TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP = getType("terraBiomeProbabilityCollectionMap");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Palette<BlockData> blockDataPalette;
|
|
||||||
private ProbabilityCollection<BlockData> blockDataProbabilityCollection;
|
private ProbabilityCollection<BlockData> blockDataProbabilityCollection;
|
||||||
private ProbabilityCollection<Flora> floraProbabilityCollection;
|
private ProbabilityCollection<Flora> floraProbabilityCollection;
|
||||||
private ProbabilityCollection<Tree> treeProbabilityCollection;
|
private ProbabilityCollection<Tree> treeProbabilityCollection;
|
||||||
|
@ -3,11 +3,9 @@ package com.dfsek.terra.config.loaders.palette;
|
|||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||||
import com.dfsek.tectonic.loading.TypeLoader;
|
import com.dfsek.tectonic.loading.TypeLoader;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
||||||
import com.dfsek.terra.api.world.palette.holder.PaletteHolderBuilder;
|
import com.dfsek.terra.api.world.palette.holder.PaletteHolderBuilder;
|
||||||
import com.dfsek.terra.config.loaders.Types;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -21,7 +19,7 @@ public class PaletteHolderLoader implements TypeLoader<PaletteHolder> {
|
|||||||
PaletteHolderBuilder builder = new PaletteHolderBuilder();
|
PaletteHolderBuilder builder = new PaletteHolderBuilder();
|
||||||
for(Map<String, Integer> layer : palette) {
|
for(Map<String, Integer> layer : palette) {
|
||||||
for(Map.Entry<String, Integer> entry : layer.entrySet()) {
|
for(Map.Entry<String, Integer> entry : layer.entrySet()) {
|
||||||
builder.add(entry.getValue(), (Palette<BlockData>) configLoader.loadType(Types.BLOCK_DATA_PALETTE_TYPE, entry.getKey()));
|
builder.add(entry.getValue(), (Palette) configLoader.loadType(Palette.class, entry.getKey()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
@ -8,22 +8,16 @@ import com.dfsek.tectonic.exception.ConfigException;
|
|||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||||
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
|
||||||
import com.dfsek.terra.api.LoaderRegistrar;
|
import com.dfsek.terra.api.LoaderRegistrar;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.platform.world.Tree;
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
|
||||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||||
|
import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
||||||
import com.dfsek.terra.api.world.flora.Flora;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
|
||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
|
||||||
import com.dfsek.terra.config.builder.BiomeBuilder;
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.config.dummy.DummyWorld;
|
import com.dfsek.terra.config.dummy.DummyWorld;
|
||||||
import com.dfsek.terra.config.factories.ConfigFactory;
|
import com.dfsek.terra.config.factories.ConfigFactory;
|
||||||
@ -40,21 +34,13 @@ import com.dfsek.terra.config.prototype.ConfigType;
|
|||||||
import com.dfsek.terra.config.prototype.ProtoConfig;
|
import com.dfsek.terra.config.prototype.ProtoConfig;
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
import com.dfsek.terra.registry.config.BiomeRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.CarverRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.ConfigTypeRegistry;
|
import com.dfsek.terra.registry.config.ConfigTypeRegistry;
|
||||||
import com.dfsek.terra.registry.config.FloraRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.FunctionRegistry;
|
import com.dfsek.terra.registry.config.FunctionRegistry;
|
||||||
import com.dfsek.terra.registry.config.LootRegistry;
|
import com.dfsek.terra.registry.config.LootRegistry;
|
||||||
import com.dfsek.terra.registry.config.NoiseRegistry;
|
import com.dfsek.terra.registry.config.NoiseRegistry;
|
||||||
import com.dfsek.terra.registry.config.OreRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.PaletteRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.ScriptRegistry;
|
import com.dfsek.terra.registry.config.ScriptRegistry;
|
||||||
import com.dfsek.terra.registry.config.StructureRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.TreeRegistry;
|
|
||||||
import com.dfsek.terra.world.TerraWorld;
|
import com.dfsek.terra.world.TerraWorld;
|
||||||
import com.dfsek.terra.world.population.items.TerraStructure;
|
import com.dfsek.terra.world.population.items.TerraStructure;
|
||||||
import com.dfsek.terra.world.population.items.ores.Ore;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.json.simple.parser.ParseException;
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
@ -73,8 +59,6 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
|
|
||||||
@ -84,17 +68,12 @@ import java.util.zip.ZipFile;
|
|||||||
public class ConfigPack implements LoaderRegistrar {
|
public class ConfigPack implements LoaderRegistrar {
|
||||||
private final ConfigPackTemplate template = new ConfigPackTemplate();
|
private final ConfigPackTemplate template = new ConfigPackTemplate();
|
||||||
|
|
||||||
private final BiomeRegistry biomeRegistry = new BiomeRegistry();
|
private final Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> registryMap = new HashMap<>();
|
||||||
private final StructureRegistry structureRegistry = new StructureRegistry();
|
|
||||||
private final PaletteRegistry paletteRegistry;
|
|
||||||
private final FloraRegistry floraRegistry;
|
|
||||||
private final OreRegistry oreRegistry = new OreRegistry();
|
|
||||||
private final TreeRegistry treeRegistry;
|
|
||||||
private final ScriptRegistry scriptRegistry = new ScriptRegistry();
|
private final ScriptRegistry scriptRegistry = new ScriptRegistry();
|
||||||
private final LootRegistry lootRegistry = new LootRegistry();
|
private final LootRegistry lootRegistry = new LootRegistry();
|
||||||
|
|
||||||
private final CarverRegistry carverRegistry = new CarverRegistry();
|
|
||||||
|
|
||||||
private final NoiseRegistry noiseRegistry = new NoiseRegistry();
|
private final NoiseRegistry noiseRegistry = new NoiseRegistry();
|
||||||
private final FunctionRegistry functionRegistry = new FunctionRegistry();
|
private final FunctionRegistry functionRegistry = new FunctionRegistry();
|
||||||
|
|
||||||
@ -112,10 +91,12 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
|
|
||||||
public ConfigPack(File folder, TerraPlugin main) throws ConfigException {
|
public ConfigPack(File folder, TerraPlugin main) throws ConfigException {
|
||||||
try {
|
try {
|
||||||
floraRegistry = new FloraRegistry(main);
|
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
||||||
paletteRegistry = new PaletteRegistry(main);
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
treeRegistry = new TreeRegistry();
|
selfLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main);
|
abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
||||||
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
||||||
|
});
|
||||||
this.loader = new FolderLoader(folder.toPath());
|
this.loader = new FolderLoader(folder.toPath());
|
||||||
this.main = main;
|
this.main = main;
|
||||||
long l = System.nanoTime();
|
long l = System.nanoTime();
|
||||||
@ -151,19 +132,18 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
|
|
||||||
public ConfigPack(ZipFile file, TerraPlugin main) throws ConfigException {
|
public ConfigPack(ZipFile file, TerraPlugin main) throws ConfigException {
|
||||||
try {
|
try {
|
||||||
floraRegistry = new FloraRegistry(main);
|
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
||||||
paletteRegistry = new PaletteRegistry(main);
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
treeRegistry = new TreeRegistry();
|
selfLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main);
|
abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
||||||
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
||||||
|
});
|
||||||
this.loader = new ZIPLoader(file);
|
this.loader = new ZIPLoader(file);
|
||||||
this.main = main;
|
this.main = main;
|
||||||
long l = System.nanoTime();
|
long l = System.nanoTime();
|
||||||
|
|
||||||
register(abstractConfigLoader);
|
|
||||||
register(selfLoader);
|
register(selfLoader);
|
||||||
|
|
||||||
main.register(selfLoader);
|
main.register(selfLoader);
|
||||||
main.register(abstractConfigLoader);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ZipEntry pack = null;
|
ZipEntry pack = null;
|
||||||
@ -202,12 +182,7 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkDeadEntries(TerraPlugin main) {
|
private void checkDeadEntries(TerraPlugin main) {
|
||||||
biomeRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in biome registry: '" + id + "'"));
|
registryMap.forEach((clazz, pair) -> pair.getLeft().getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in '" + clazz + "' registry: '" + id + "'")));
|
||||||
paletteRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in palette registry: '" + id + "'"));
|
|
||||||
floraRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in flora registry: '" + id + "'"));
|
|
||||||
carverRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in carver registry: '" + id + "'"));
|
|
||||||
treeRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in tree registry: '" + id + "'"));
|
|
||||||
oreRegistry.getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in ore registry: '" + id + "'"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -242,7 +217,7 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
|
|
||||||
loader.open("", ".yml").thenEntries(entries -> entries.forEach(stream -> configurations.add(new Configuration(stream.getValue(), stream.getKey()))));
|
loader.open("", ".yml").thenEntries(entries -> entries.forEach(stream -> configurations.add(new Configuration(stream.getValue(), stream.getKey()))));
|
||||||
|
|
||||||
Map<ConfigType<? extends ConfigTemplate>, List<Configuration>> configs = new HashMap<>();
|
Map<ConfigType<? extends ConfigTemplate, ?>, List<Configuration>> configs = new HashMap<>();
|
||||||
|
|
||||||
for(Configuration configuration : configurations) {
|
for(Configuration configuration : configurations) {
|
||||||
ProtoConfig config = new ProtoConfig();
|
ProtoConfig config = new ProtoConfig();
|
||||||
@ -250,7 +225,7 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
configs.computeIfAbsent(config.getType(), configType -> new ArrayList<>()).add(configuration);
|
configs.computeIfAbsent(config.getType(), configType -> new ArrayList<>()).add(configuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(ConfigType<?> configType : configTypeRegistry.entries()) {
|
for(ConfigType<?, ?> configType : configTypeRegistry.entries()) {
|
||||||
for(ConfigTemplate config : abstractConfigLoader.loadConfigs(configs.getOrDefault(configType, Collections.emptyList()), () -> configType.getTemplate(this, main))) {
|
for(ConfigTemplate config : abstractConfigLoader.loadConfigs(configs.getOrDefault(configType, Collections.emptyList()), () -> configType.getTemplate(this, main))) {
|
||||||
((ConfigType) configType).callback(this, main, config);
|
((ConfigType) configType).callback(this, main, config);
|
||||||
}
|
}
|
||||||
@ -260,16 +235,9 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms.");
|
main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public TerraStructure getStructure(String id) {
|
|
||||||
return structureRegistry.get(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<TerraStructure> getStructures() {
|
public Set<TerraStructure> getStructures() {
|
||||||
return new HashSet<>(structureRegistry.entries());
|
return new HashSet<>(getRegistry(TerraStructure.class).entries());
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getStructureIDs() {
|
|
||||||
return structureRegistry.entries().stream().map(terraStructure -> terraStructure.getTemplate().getID()).collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConfigPackTemplate getTemplate() {
|
public ConfigPackTemplate getTemplate() {
|
||||||
@ -280,30 +248,24 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
return varScope;
|
return varScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public <T> CheckedRegistry<T> getRegistry(Class<T> clazz) {
|
||||||
|
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(TypeRegistry registry) {
|
public void register(TypeRegistry registry) {
|
||||||
registry
|
registry
|
||||||
.registerLoader(ConfigType.class, configTypeRegistry)
|
.registerLoader(ConfigType.class, configTypeRegistry)
|
||||||
.registerLoader(Palette.class, paletteRegistry)
|
|
||||||
.registerLoader(BiomeBuilder.class, biomeRegistry)
|
|
||||||
.registerLoader(Flora.class, floraRegistry)
|
|
||||||
.registerLoader(Ore.class, oreRegistry)
|
|
||||||
.registerLoader(Tree.class, treeRegistry)
|
|
||||||
.registerLoader(StructureScript.class, scriptRegistry)
|
.registerLoader(StructureScript.class, scriptRegistry)
|
||||||
.registerLoader(TerraStructure.class, structureRegistry)
|
|
||||||
.registerLoader(LootTable.class, lootRegistry)
|
.registerLoader(LootTable.class, lootRegistry)
|
||||||
.registerLoader(UserDefinedCarver.class, carverRegistry)
|
|
||||||
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader))
|
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader))
|
||||||
.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(noiseRegistry))
|
.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(noiseRegistry))
|
||||||
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
|
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
|
||||||
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main))
|
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main))
|
||||||
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(biomeRegistry))
|
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
|
||||||
.registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(biomeRegistry));
|
.registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)));
|
||||||
}
|
|
||||||
|
|
||||||
public Set<UserDefinedCarver> getCarvers() {
|
|
||||||
return new HashSet<>(carverRegistry.entries());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
||||||
@ -314,55 +276,20 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
return new CheckedRegistry<>(scriptRegistry);
|
return new CheckedRegistry<>(scriptRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckedRegistry<BiomeBuilder> getBiomeRegistry() {
|
|
||||||
return new CheckedRegistry<>(biomeRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<Tree> getTreeRegistry() {
|
|
||||||
return new CheckedRegistry<>(treeRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<FunctionBuilder<?>> getFunctionRegistry() {
|
|
||||||
return new CheckedRegistry<>(functionRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<Supplier<ObjectTemplate<NoiseSeeded>>> getNormalizerRegistry() {
|
|
||||||
return new CheckedRegistry<>(noiseRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<UserDefinedCarver> getCarverRegistry() {
|
|
||||||
return new CheckedRegistry<>(carverRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<Flora> getFloraRegistry() {
|
|
||||||
return new CheckedRegistry<>(floraRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<LootTable> getLootRegistry() {
|
public CheckedRegistry<LootTable> getLootRegistry() {
|
||||||
return new CheckedRegistry<>(lootRegistry);
|
return new CheckedRegistry<>(lootRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckedRegistry<Ore> getOreRegistry() {
|
|
||||||
return new CheckedRegistry<>(oreRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<Palette<BlockData>> getPaletteRegistry() {
|
public WorldConfig toWorldConfig(TerraWorld world) {
|
||||||
return new CheckedRegistry<>(paletteRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CheckedRegistry<TerraStructure> getStructureRegistry() {
|
|
||||||
return new CheckedRegistry<>(structureRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public WorldConfig toWorldConfig(TerraWorld world){
|
|
||||||
return new WorldConfig(world, this, main);
|
return new WorldConfig(world, this, main);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckedRegistry<ConfigType<?>> getConfigTypeRegistry() {
|
public CheckedRegistry<ConfigType<?, ?>> getConfigTypeRegistry() {
|
||||||
return new CheckedRegistry<ConfigType<?>>(configTypeRegistry) {
|
return new CheckedRegistry<ConfigType<?, ?>>(configTypeRegistry) {
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void addUnchecked(String identifier, ConfigType<?> value) {
|
public void addUnchecked(String identifier, ConfigType<?, ?> value) {
|
||||||
if(contains(identifier)) throw new UnsupportedOperationException("Cannot override values in ConfigTypeRegistry!");
|
if(contains(identifier)) throw new UnsupportedOperationException("Cannot override values in ConfigTypeRegistry!");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.dfsek.terra.config.pack;
|
package com.dfsek.terra.config.pack;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.platform.world.Tree;
|
import com.dfsek.terra.api.platform.world.Tree;
|
||||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
@ -11,6 +10,7 @@ import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
|||||||
import com.dfsek.terra.api.world.flora.Flora;
|
import com.dfsek.terra.api.world.flora.Flora;
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
import com.dfsek.terra.carving.UserDefinedCarver;
|
||||||
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
import com.dfsek.terra.world.TerraWorld;
|
import com.dfsek.terra.world.TerraWorld;
|
||||||
import com.dfsek.terra.world.generation.math.SamplerCache;
|
import com.dfsek.terra.world.generation.math.SamplerCache;
|
||||||
@ -29,7 +29,7 @@ public class WorldConfig {
|
|||||||
private final LockedRegistry<Flora> floraRegistry;
|
private final LockedRegistry<Flora> floraRegistry;
|
||||||
private final LockedRegistry<LootTable> lootRegistry;
|
private final LockedRegistry<LootTable> lootRegistry;
|
||||||
private final LockedRegistry<Ore> oreRegistry;
|
private final LockedRegistry<Ore> oreRegistry;
|
||||||
private final LockedRegistry<Palette<BlockData>> paletteRegistry;
|
private final LockedRegistry<Palette> paletteRegistry;
|
||||||
private final LockedRegistry<TerraStructure> structureRegistry;
|
private final LockedRegistry<TerraStructure> structureRegistry;
|
||||||
|
|
||||||
private final BiomeProvider provider;
|
private final BiomeProvider provider;
|
||||||
@ -44,16 +44,16 @@ public class WorldConfig {
|
|||||||
this.scriptRegistry = new LockedRegistry<>(pack.getScriptRegistry());
|
this.scriptRegistry = new LockedRegistry<>(pack.getScriptRegistry());
|
||||||
|
|
||||||
OpenRegistry<TerraBiome> biomeOpenRegistry = new OpenRegistry<>();
|
OpenRegistry<TerraBiome> biomeOpenRegistry = new OpenRegistry<>();
|
||||||
pack.getBiomeRegistry().forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed())));
|
pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed())));
|
||||||
|
|
||||||
this.biomeRegistry = new LockedRegistry<>(biomeOpenRegistry);
|
this.biomeRegistry = new LockedRegistry<>(biomeOpenRegistry);
|
||||||
this.carverRegistry = new LockedRegistry<>(pack.getCarverRegistry());
|
this.carverRegistry = new LockedRegistry<>(pack.getRegistry(UserDefinedCarver.class));
|
||||||
this.treeRegistry = new LockedRegistry<>(pack.getTreeRegistry());
|
this.treeRegistry = new LockedRegistry<>(pack.getRegistry(Tree.class));
|
||||||
this.floraRegistry = new LockedRegistry<>(pack.getFloraRegistry());
|
this.floraRegistry = new LockedRegistry<>(pack.getRegistry(Flora.class));
|
||||||
this.lootRegistry = new LockedRegistry<>(pack.getLootRegistry());
|
this.lootRegistry = new LockedRegistry<>(pack.getLootRegistry());
|
||||||
this.oreRegistry = new LockedRegistry<>(pack.getOreRegistry());
|
this.oreRegistry = new LockedRegistry<>(pack.getRegistry(Ore.class));
|
||||||
this.paletteRegistry = new LockedRegistry<>(pack.getPaletteRegistry());
|
this.paletteRegistry = new LockedRegistry<>(pack.getRegistry(Palette.class));
|
||||||
this.structureRegistry = new LockedRegistry<>(pack.getStructureRegistry());
|
this.structureRegistry = new LockedRegistry<>(pack.getRegistry(TerraStructure.class));
|
||||||
|
|
||||||
this.provider = pack.getBiomeProviderBuilder().build(world.getWorld().getSeed());
|
this.provider = pack.getBiomeProviderBuilder().build(world.getWorld().getSeed());
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ public class WorldConfig {
|
|||||||
return oreRegistry;
|
return oreRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LockedRegistry<Palette<BlockData>> getPaletteRegistry() {
|
public LockedRegistry<Palette> getPaletteRegistry() {
|
||||||
return paletteRegistry;
|
return paletteRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,16 @@ import com.dfsek.tectonic.config.ConfigTemplate;
|
|||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
|
|
||||||
public interface ConfigType<T extends ConfigTemplate> {
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public interface ConfigType<T extends ConfigTemplate, R> {
|
||||||
T getTemplate(ConfigPack pack, TerraPlugin main);
|
T getTemplate(ConfigPack pack, TerraPlugin main);
|
||||||
|
|
||||||
void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException;
|
void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException;
|
||||||
|
|
||||||
|
Class<R> getTypeClass();
|
||||||
|
|
||||||
|
Supplier<OpenRegistry<R>> registrySupplier();
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,14 @@ public class ProtoConfig implements ConfigTemplate {
|
|||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
@Value("type")
|
@Value("type")
|
||||||
private ConfigType<?> type;
|
private ConfigType<?, ?> type;
|
||||||
|
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConfigType<?> getType() {
|
public ConfigType<?, ?> getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import com.dfsek.terra.api.math.noise.NoiseSampler;
|
|||||||
import com.dfsek.terra.api.math.noise.samplers.noise.ConstantSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.ConstantSampler;
|
||||||
import com.dfsek.terra.api.math.paralithic.BlankFunction;
|
import com.dfsek.terra.api.math.paralithic.BlankFunction;
|
||||||
import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction;
|
import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.platform.block.BlockType;
|
import com.dfsek.terra.api.platform.block.BlockType;
|
||||||
import com.dfsek.terra.api.platform.world.Biome;
|
import com.dfsek.terra.api.platform.world.Biome;
|
||||||
import com.dfsek.terra.api.util.GlueList;
|
import com.dfsek.terra.api.util.GlueList;
|
||||||
@ -124,7 +123,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
@Value("ocean.palette")
|
@Value("ocean.palette")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
private Palette<BlockData> oceanPalette;
|
private Palette oceanPalette;
|
||||||
|
|
||||||
@Value("elevation.equation")
|
@Value("elevation.equation")
|
||||||
@Default
|
@Default
|
||||||
@ -159,12 +158,12 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
@Value("slabs.palettes")
|
@Value("slabs.palettes")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
private Map<BlockType, Palette<BlockData>> slabPalettes;
|
private Map<BlockType, Palette> slabPalettes;
|
||||||
|
|
||||||
@Value("slabs.stair-palettes")
|
@Value("slabs.stair-palettes")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
private Map<BlockType, Palette<BlockData>> stairPalettes;
|
private Map<BlockType, Palette> stairPalettes;
|
||||||
|
|
||||||
@Value("slant.threshold")
|
@Value("slant.threshold")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@ -247,14 +246,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
return doSlabs;
|
return doSlabs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<BlockType, Palette<BlockData>> getSlabPalettes() {
|
|
||||||
return slabPalettes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<BlockType, Palette<BlockData>> getStairPalettes() {
|
|
||||||
return stairPalettes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BiomeTemplate(ConfigPack pack, TerraPlugin main) {
|
public BiomeTemplate(ConfigPack pack, TerraPlugin main) {
|
||||||
this.pack = pack;
|
this.pack = pack;
|
||||||
biomeNoise = new NoiseSeeded() {
|
biomeNoise = new NoiseSeeded() {
|
||||||
@ -268,7 +259,15 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
oceanPalette = new SinglePalette<>(main.getWorldHandle().createBlockData("minecraft:water"));
|
oceanPalette = new SinglePalette(main.getWorldHandle().createBlockData("minecraft:water"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<BlockType, Palette> getSlabPalettes() {
|
||||||
|
return slabPalettes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<BlockType, Palette> getStairPalettes() {
|
||||||
|
return stairPalettes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NoiseSeeded getBiomeNoise() {
|
public NoiseSeeded getBiomeNoise() {
|
||||||
@ -291,7 +290,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
return seaLevel;
|
return seaLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Palette<BlockData> getOceanPalette() {
|
public Palette getOceanPalette() {
|
||||||
return oceanPalette;
|
return oceanPalette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
public class OpenRegistry<T> implements Registry<T> {
|
public class OpenRegistry<T> implements Registry<T> {
|
||||||
private final Map<String, Entry<T>> objects;
|
private final Map<String, Entry<T>> objects;
|
||||||
|
private static final Entry<?> NULL = new Entry<>(null);
|
||||||
|
|
||||||
public OpenRegistry() {
|
public OpenRegistry() {
|
||||||
objects = new HashMap<>();
|
objects = new HashMap<>();
|
||||||
@ -72,9 +73,10 @@ public class OpenRegistry<T> implements Registry<T> {
|
|||||||
return objects.containsKey(identifier);
|
return objects.containsKey(identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public T get(String identifier) {
|
public T get(String identifier) {
|
||||||
return objects.get(identifier).getValue();
|
return objects.getOrDefault(identifier, (Entry<T>) NULL).getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -89,7 +91,7 @@ public class OpenRegistry<T> implements Registry<T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<T> entries() {
|
public Collection<T> entries() {
|
||||||
return objects.values().stream().map(Entry::getRaw).collect(Collectors.toSet());
|
return objects.values().stream().map(Entry::getRaw).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,11 @@ package com.dfsek.terra.registry.config;
|
|||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.platform.world.Tree;
|
||||||
|
import com.dfsek.terra.api.world.flora.Flora;
|
||||||
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
|
import com.dfsek.terra.carving.UserDefinedCarver;
|
||||||
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.config.factories.BiomeFactory;
|
import com.dfsek.terra.config.factories.BiomeFactory;
|
||||||
import com.dfsek.terra.config.factories.CarverFactory;
|
import com.dfsek.terra.config.factories.CarverFactory;
|
||||||
import com.dfsek.terra.config.factories.ConfigFactory;
|
import com.dfsek.terra.config.factories.ConfigFactory;
|
||||||
@ -23,25 +27,36 @@ import com.dfsek.terra.config.templates.PaletteTemplate;
|
|||||||
import com.dfsek.terra.config.templates.StructureTemplate;
|
import com.dfsek.terra.config.templates.StructureTemplate;
|
||||||
import com.dfsek.terra.config.templates.TreeTemplate;
|
import com.dfsek.terra.config.templates.TreeTemplate;
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
|
import com.dfsek.terra.world.population.items.TerraStructure;
|
||||||
|
import com.dfsek.terra.world.population.items.ores.Ore;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.function.Function;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?>> {
|
public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?, ?>> {
|
||||||
public ConfigTypeRegistry(ConfigPack pack, TerraPlugin main) {
|
private final BiConsumer<String, ConfigType<?, ?>> callback;
|
||||||
|
|
||||||
|
public ConfigTypeRegistry(ConfigPack pack, TerraPlugin main, BiConsumer<String, ConfigType<?, ?>> callback) {
|
||||||
super(new LinkedHashMap<>()); // Ordered
|
super(new LinkedHashMap<>()); // Ordered
|
||||||
add("PALETTE", new ConfigBuilder<>(pack.getPaletteRegistry(), new PaletteFactory(), PaletteTemplate::new));
|
this.callback = callback;
|
||||||
add("ORE", new ConfigBuilder<>(pack.getOreRegistry(), new OreFactory(), OreTemplate::new));
|
add("PALETTE", new ConfigBuilder<>(new PaletteFactory(), PaletteTemplate::new, Palette.class, () -> new PaletteRegistry(main)));
|
||||||
add("FLORA", new ConfigBuilder<>(pack.getFloraRegistry(), new FloraFactory(), FloraTemplate::new));
|
add("ORE", new ConfigBuilder<>(new OreFactory(), OreTemplate::new, Ore.class, OreRegistry::new));
|
||||||
add("CARVER", new ConfigBuilder<>(pack.getCarverRegistry(), new CarverFactory(pack), CarverTemplate::new));
|
add("FLORA", new ConfigBuilder<>(new FloraFactory(), FloraTemplate::new, Flora.class, () -> new FloraRegistry(main)));
|
||||||
add("STRUCTURE", new ConfigBuilder<>(pack.getStructureRegistry(), new StructureFactory(), StructureTemplate::new));
|
add("CARVER", new ConfigBuilder<>(new CarverFactory(pack), CarverTemplate::new, UserDefinedCarver.class, CarverRegistry::new));
|
||||||
add("TREE", new ConfigBuilder<>(pack.getTreeRegistry(), new TreeFactory(), TreeTemplate::new));
|
add("STRUCTURE", new ConfigBuilder<>(new StructureFactory(), StructureTemplate::new, TerraStructure.class, StructureRegistry::new));
|
||||||
add("BIOME", new ConfigBuilder<>(pack.getBiomeRegistry(), new BiomeFactory(pack), () -> new BiomeTemplate(pack, main)));
|
add("TREE", new ConfigBuilder<>(new TreeFactory(), TreeTemplate::new, Tree.class, TreeRegistry::new));
|
||||||
|
add("BIOME", new ConfigBuilder<>(new BiomeFactory(pack), () -> new BiomeTemplate(pack, main), BiomeBuilder.class, BiomeRegistry::new));
|
||||||
add("PACK", new PackBuilder());
|
add("PACK", new PackBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class PackBuilder implements ConfigType<ConfigTemplate> {
|
@Override
|
||||||
|
protected boolean add(String identifier, Entry<ConfigType<?, ?>> value) {
|
||||||
|
callback.accept(identifier, value.getValue());
|
||||||
|
return super.add(identifier, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class PackBuilder implements ConfigType<ConfigTemplate, ConfigPack> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConfigTemplate getTemplate(ConfigPack pack, TerraPlugin main) {
|
public ConfigTemplate getTemplate(ConfigPack pack, TerraPlugin main) {
|
||||||
@ -53,17 +68,29 @@ public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?>> {
|
|||||||
public void callback(ConfigPack pack, TerraPlugin main, ConfigTemplate loadedConfig) {
|
public void callback(ConfigPack pack, TerraPlugin main, ConfigTemplate loadedConfig) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ConfigPack> getTypeClass() {
|
||||||
|
return ConfigPack.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class ConfigBuilder<T extends AbstractableTemplate, O> implements ConfigType<T> {
|
@Override
|
||||||
private final CheckedRegistry<O> registry;
|
public Supplier<OpenRegistry<ConfigPack>> registrySupplier() {
|
||||||
|
return OpenRegistry::new;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class ConfigBuilder<T extends AbstractableTemplate, O> implements ConfigType<T, O> {
|
||||||
private final ConfigFactory<T, O> factory;
|
private final ConfigFactory<T, O> factory;
|
||||||
private final Supplier<T> provider;
|
private final Supplier<T> provider;
|
||||||
|
private final Class<O> clazz;
|
||||||
|
private final Supplier<OpenRegistry<O>> registrySupplier;
|
||||||
|
|
||||||
private ConfigBuilder(CheckedRegistry<O> registry, ConfigFactory<T, O> factory, Supplier<T> provider) {
|
private ConfigBuilder(ConfigFactory<T, O> factory, Supplier<T> provider, Class<O> clazz, Supplier<OpenRegistry<O>> registrySupplier) {
|
||||||
this.registry = registry;
|
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
|
this.clazz = clazz;
|
||||||
|
this.registrySupplier = registrySupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -74,7 +101,17 @@ public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?>> {
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException {
|
public void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException {
|
||||||
registry.addUnchecked(loadedConfig.getID(), factory.build(loadedConfig, main));
|
pack.getRegistry(clazz).addUnchecked(loadedConfig.getID(), factory.build(loadedConfig, main));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<O> getTypeClass() {
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Supplier<OpenRegistry<O>> registrySupplier() {
|
||||||
|
return registrySupplier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
package com.dfsek.terra.registry.config;
|
package com.dfsek.terra.registry.config;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.api.world.palette.SinglePalette;
|
import com.dfsek.terra.api.world.palette.SinglePalette;
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
|
|
||||||
public class PaletteRegistry extends OpenRegistry<Palette<BlockData>> {
|
public class PaletteRegistry extends OpenRegistry<Palette> {
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
|
||||||
public PaletteRegistry(TerraPlugin main) {
|
public PaletteRegistry(TerraPlugin main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Palette<BlockData> get(String identifier) {
|
public Palette get(String identifier) {
|
||||||
if(identifier.startsWith("BLOCK:"))
|
if(identifier.startsWith("BLOCK:"))
|
||||||
return new SinglePalette<>(main.getWorldHandle().createBlockData(identifier.substring(6))); // Return single palette for BLOCK: shortcut.
|
return new SinglePalette(main.getWorldHandle().createBlockData(identifier.substring(6))); // Return single palette for BLOCK: shortcut.
|
||||||
return super.get(identifier);
|
return super.get(identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ public class TerraWorld {
|
|||||||
*/
|
*/
|
||||||
public BlockData getUngeneratedBlock(int x, int y, int z) {
|
public BlockData getUngeneratedBlock(int x, int y, int z) {
|
||||||
UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome(x, z);
|
UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome(x, z);
|
||||||
Palette<BlockData> palette = biome.getGenerator(world).getPalette(y);
|
Palette palette = biome.getGenerator(world).getPalette(y);
|
||||||
Sampler sampler = config.getSamplerCache().get(x, z);
|
Sampler sampler = config.getSamplerCache().get(x, z);
|
||||||
int fdX = FastMath.floorMod(x, 16);
|
int fdX = FastMath.floorMod(x, 16);
|
||||||
int fdZ = FastMath.floorMod(z, 16);
|
int fdZ = FastMath.floorMod(z, 16);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.dfsek.terra.world.generation;
|
package com.dfsek.terra.world.generation;
|
||||||
|
|
||||||
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
import com.dfsek.terra.api.math.noise.NoiseSampler;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
|
||||||
import com.dfsek.terra.api.world.biome.Generator;
|
import com.dfsek.terra.api.world.biome.Generator;
|
||||||
import com.dfsek.terra.api.world.palette.Palette;
|
import com.dfsek.terra.api.world.palette.Palette;
|
||||||
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
|
||||||
@ -67,7 +66,7 @@ public class WorldGenerator implements Generator {
|
|||||||
* @return BlockPalette - The biome's palette.
|
* @return BlockPalette - The biome's palette.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Palette<BlockData> getPalette(int y) {
|
public Palette getPalette(int y) {
|
||||||
return palettes.getPalette(y);
|
return palettes.getPalette(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ public class WorldGenerator implements Generator {
|
|||||||
return blendStep;
|
return blendStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Palette<BlockData> getSlantPalette(int y) {
|
public Palette getSlantPalette(int y) {
|
||||||
return slantPalettes.getPalette(y);
|
return slantPalettes.getPalette(y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ public class DefaultChunkGenerator2D implements TerraChunkGenerator {
|
|||||||
TerraBiome b = grid.getBiome(xOrig + x, zOrig + z);
|
TerraBiome b = grid.getBiome(xOrig + x, zOrig + z);
|
||||||
BiomeTemplate c = ((UserDefinedBiome) b).getConfig();
|
BiomeTemplate c = ((UserDefinedBiome) b).getConfig();
|
||||||
|
|
||||||
Palette<BlockData> seaPalette = c.getOceanPalette();
|
Palette seaPalette = c.getOceanPalette();
|
||||||
|
|
||||||
int height = FastMath.min((int) sampler.sample(x, 0, z), world.getMaxHeight() - 1);
|
int height = FastMath.min((int) sampler.sample(x, 0, z), world.getMaxHeight() - 1);
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
private final ConfigPack configPack;
|
private final ConfigPack configPack;
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final BlockType water;
|
private final BlockType water;
|
||||||
private final SinglePalette<BlockData> blank;
|
private final SinglePalette blank;
|
||||||
private final List<TerraBlockPopulator> blockPopulators = new ArrayList<>();
|
private final List<TerraBlockPopulator> blockPopulators = new ArrayList<>();
|
||||||
|
|
||||||
private final Carver carver;
|
private final Carver carver;
|
||||||
@ -63,7 +63,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
|
|
||||||
carver = new NoiseCarver(new Range(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main);
|
carver = new NoiseCarver(new Range(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main);
|
||||||
water = main.getWorldHandle().createBlockData("minecraft:water").getBlockType();
|
water = main.getWorldHandle().createBlockData("minecraft:water").getBlockType();
|
||||||
blank = new SinglePalette<>(main.getWorldHandle().createBlockData("minecraft:air"));
|
blank = new SinglePalette(main.getWorldHandle().createBlockData("minecraft:air"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -124,7 +124,7 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
BiomeTemplate c = ((UserDefinedBiome) b).getConfig();
|
BiomeTemplate c = ((UserDefinedBiome) b).getConfig();
|
||||||
|
|
||||||
int sea = c.getSeaLevel();
|
int sea = c.getSeaLevel();
|
||||||
Palette<BlockData> seaPalette = c.getOceanPalette();
|
Palette seaPalette = c.getOceanPalette();
|
||||||
|
|
||||||
boolean justSet = false;
|
boolean justSet = false;
|
||||||
BlockData data = null;
|
BlockData data = null;
|
||||||
@ -162,11 +162,11 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareBlockPartFloor(BlockData down, BlockData orig, ChunkData chunk, Vector3 block, Map<BlockType, Palette<BlockData>> slabs,
|
private void prepareBlockPartFloor(BlockData down, BlockData orig, ChunkData chunk, Vector3 block, Map<BlockType, Palette> slabs,
|
||||||
Map<BlockType, Palette<BlockData>> stairs, double thresh, Sampler sampler) {
|
Map<BlockType, Palette> stairs, double thresh, Sampler sampler) {
|
||||||
if(sampler.sample(block.getX(), block.getY() - 0.4, block.getZ()) > thresh) {
|
if(sampler.sample(block.getX(), block.getY() - 0.4, block.getZ()) > thresh) {
|
||||||
if(stairs != null) {
|
if(stairs != null) {
|
||||||
Palette<BlockData> stairPalette = stairs.get(down.getBlockType());
|
Palette stairPalette = stairs.get(down.getBlockType());
|
||||||
if(stairPalette != null) {
|
if(stairPalette != null) {
|
||||||
BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone();
|
BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone();
|
||||||
if(stair instanceof Stairs) {
|
if(stair instanceof Stairs) {
|
||||||
@ -183,11 +183,11 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareBlockPartCeiling(BlockData up, BlockData orig, ChunkData chunk, Vector3 block, Map<BlockType, Palette<BlockData>> slabs,
|
private void prepareBlockPartCeiling(BlockData up, BlockData orig, ChunkData chunk, Vector3 block, Map<BlockType, Palette> slabs,
|
||||||
Map<BlockType, Palette<BlockData>> stairs, double thresh, Sampler sampler) {
|
Map<BlockType, Palette> stairs, double thresh, Sampler sampler) {
|
||||||
if(sampler.sample(block.getX(), block.getY() + 0.4, block.getZ()) > thresh) {
|
if(sampler.sample(block.getX(), block.getY() + 0.4, block.getZ()) > thresh) {
|
||||||
if(stairs != null) {
|
if(stairs != null) {
|
||||||
Palette<BlockData> stairPalette = stairs.get(up.getBlockType());
|
Palette stairPalette = stairs.get(up.getBlockType());
|
||||||
if(stairPalette != null) {
|
if(stairPalette != null) {
|
||||||
BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone();
|
BlockData stair = stairPalette.get(0, block.getX(), block.getY(), block.getZ()).clone();
|
||||||
if(stair instanceof Stairs) {
|
if(stair instanceof Stairs) {
|
||||||
|
@ -22,7 +22,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TerraFlora implements Flora {
|
public class TerraFlora implements Flora {
|
||||||
private final Palette<BlockData> floraPalette;
|
private final Palette floraPalette;
|
||||||
private final boolean physics;
|
private final boolean physics;
|
||||||
private final boolean ceiling;
|
private final boolean ceiling;
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ public class TerraFlora implements Flora {
|
|||||||
|
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
|
||||||
public TerraFlora(Palette<BlockData> floraPalette, boolean physics, boolean ceiling, MaterialSet irrigable, MaterialSet spawnable, MaterialSet replaceable, MaterialSet testRotation, int maxPlacements, Search search, boolean spawnBlacklist, int irrigableOffset, TerraPlugin main) {
|
public TerraFlora(Palette floraPalette, boolean physics, boolean ceiling, MaterialSet irrigable, MaterialSet spawnable, MaterialSet replaceable, MaterialSet testRotation, int maxPlacements, Search search, boolean spawnBlacklist, int irrigableOffset, TerraPlugin main) {
|
||||||
this.floraPalette = floraPalette;
|
this.floraPalette = floraPalette;
|
||||||
this.physics = physics;
|
this.physics = physics;
|
||||||
this.testRotation = testRotation;
|
this.testRotation = testRotation;
|
||||||
|
@ -28,6 +28,6 @@ public class BukkitWorldHandle implements WorldHandle {
|
|||||||
@Override
|
@Override
|
||||||
public Pair<Location, Location> getSelectedLocation(Player player) {
|
public Pair<Location, Location> getSelectedLocation(Player player) {
|
||||||
org.bukkit.Location[] locations = WorldEditUtil.getSelectionLocations(BukkitAdapter.adapt(player));
|
org.bukkit.Location[] locations = WorldEditUtil.getSelectionLocations(BukkitAdapter.adapt(player));
|
||||||
return new Pair<>(BukkitAdapter.adapt(locations[0]), BukkitAdapter.adapt(locations[1]));
|
return Pair.of(BukkitAdapter.adapt(locations[0]), BukkitAdapter.adapt(locations[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.dfsek.terra.api.event.EventListener;
|
|||||||
import com.dfsek.terra.api.event.annotations.Global;
|
import com.dfsek.terra.api.event.annotations.Global;
|
||||||
import com.dfsek.terra.api.event.annotations.Priority;
|
import com.dfsek.terra.api.event.annotations.Priority;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
||||||
|
import com.dfsek.terra.api.platform.world.Tree;
|
||||||
import com.dfsek.terra.bukkit.world.BukkitAdapter;
|
import com.dfsek.terra.bukkit.world.BukkitAdapter;
|
||||||
import com.dfsek.terra.bukkit.world.BukkitTree;
|
import com.dfsek.terra.bukkit.world.BukkitTree;
|
||||||
import com.dfsek.terra.registry.exception.DuplicateEntryException;
|
import com.dfsek.terra.registry.exception.DuplicateEntryException;
|
||||||
@ -23,8 +24,8 @@ public class TerraListener implements EventListener {
|
|||||||
for(TreeType value : TreeType.values()) {
|
for(TreeType value : TreeType.values()) {
|
||||||
try {
|
try {
|
||||||
String id = BukkitAdapter.TREE_TRANSFORMER.translate(value);
|
String id = BukkitAdapter.TREE_TRANSFORMER.translate(value);
|
||||||
event.getPack().getTreeRegistry().add(id, new BukkitTree(value, main));
|
event.getPack().getRegistry(Tree.class).add(id, new BukkitTree(value, main));
|
||||||
event.getPack().getTreeRegistry().get(id); // Platform trees should never be marked "dead"
|
event.getPack().getRegistry(Tree.class).get(id); // Platform trees should never be marked "dead"
|
||||||
} catch(DuplicateEntryException ignore) { // If another addon has already registered trees, do nothing.
|
} catch(DuplicateEntryException ignore) { // If another addon has already registered trees, do nothing.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -311,7 +311,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
RegistryKey<ConfiguredFeature<?, ?>> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "flora_populator"));
|
RegistryKey<ConfiguredFeature<?, ?>> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "flora_populator"));
|
||||||
Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE);
|
Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE);
|
||||||
|
|
||||||
registry.forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, id)), createBiome(biome)))); // Register all Terra biomes.
|
registry.forEach(pack -> pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, id)), createBiome(biome)))); // Register all Terra biomes.
|
||||||
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC);
|
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC);
|
||||||
Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC);
|
Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC);
|
||||||
|
|
||||||
@ -408,7 +408,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
@Priority(Priority.LOWEST)
|
@Priority(Priority.LOWEST)
|
||||||
@Global
|
@Global
|
||||||
public void injectTrees(ConfigPackPreLoadEvent event) {
|
public void injectTrees(ConfigPackPreLoadEvent event) {
|
||||||
CheckedRegistry<Tree> treeRegistry = event.getPack().getTreeRegistry();
|
CheckedRegistry<Tree> treeRegistry = event.getPack().getRegistry(Tree.class);
|
||||||
injectTree(treeRegistry, "BROWN_MUSHROOM", ConfiguredFeatures.HUGE_BROWN_MUSHROOM);
|
injectTree(treeRegistry, "BROWN_MUSHROOM", ConfiguredFeatures.HUGE_BROWN_MUSHROOM);
|
||||||
injectTree(treeRegistry, "RED_MUSHROOM", ConfiguredFeatures.HUGE_RED_MUSHROOM);
|
injectTree(treeRegistry, "RED_MUSHROOM", ConfiguredFeatures.HUGE_RED_MUSHROOM);
|
||||||
injectTree(treeRegistry, "JUNGLE", ConfiguredFeatures.MEGA_JUNGLE_TREE);
|
injectTree(treeRegistry, "JUNGLE", ConfiguredFeatures.MEGA_JUNGLE_TREE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user