Add a bunch of type loaders

This commit is contained in:
dfsek
2020-11-26 21:26:01 -07:00
parent 06d9fa1d98
commit 16d8d56832
7 changed files with 119 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.terra.Debug;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.CarverPalette;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.builder.BiomeGridBuilder;
import com.dfsek.terra.config.exception.FileMissingException;
@@ -12,13 +13,20 @@ import com.dfsek.terra.config.factories.BiomeFactory;
import com.dfsek.terra.config.factories.BiomeGridFactory;
import com.dfsek.terra.config.factories.CarverFactory;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.config.loaders.GridSpawnLoader;
import com.dfsek.terra.config.loaders.NoiseBuilderLoader;
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
import com.dfsek.terra.config.loaders.RangeLoader;
import com.dfsek.terra.config.loaders.base.CarverPaletteLoader;
import com.dfsek.terra.config.templates.BiomeGridTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;
import com.dfsek.terra.config.templates.StructureTemplate;
import com.dfsek.terra.generation.config.NoiseBuilder;
import com.dfsek.terra.procgen.GridSpawn;
import com.dfsek.terra.util.ConfigUtil;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range;
import java.io.File;
import java.io.FileInputStream;
@@ -58,6 +66,10 @@ public class ConfigPack {
AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
abstractConfigLoader.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
.registerLoader(Range.class, new RangeLoader())
.registerLoader(CarverPalette.class, new CarverPaletteLoader())
.registerLoader(GridSpawn.class, new GridSpawnLoader());
List<StructureTemplate> structureTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "structures/single").toPath()), StructureTemplate::new);
structureTemplates.forEach(structure -> {

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.config.loaders;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.procgen.GridSpawn;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class GridSpawnLoader implements TypeLoader<GridSpawn> {
@Override
public GridSpawn load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Integer> map = (Map<String, Integer>) o;
return new GridSpawn(map.get("width"), map.get("padding"));
}
}

View File

@@ -0,0 +1,30 @@
package com.dfsek.terra.config.loaders;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import org.polydev.gaea.math.ProbabilityCollection;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class ProbabilityCollectionLoader implements TypeLoader<ProbabilityCollection<Object>> {
@Override
public ProbabilityCollection<Object> load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<Object, Integer> map = (Map<Object, Integer>) o;
ProbabilityCollection<Object> collection = new ProbabilityCollection<>();
if(type instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) type;
Type generic = pType.getActualTypeArguments()[0];
for(Map.Entry<Object, Integer> entry : map.entrySet()) {
collection.add(configLoader.loadType(generic, entry.getKey()), entry.getValue());
}
} else throw new LoadException("Unable to load config! Could not retrieve parameterized type: " + type);
return null;
}
}

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.config.loaders;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import org.polydev.gaea.math.Range;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class RangeLoader implements TypeLoader<Range> {
@Override
public Range load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Integer> map = (Map<String, Integer>) o;
return new Range(map.get("min"), map.get("max"));
}
}

View File

@@ -0,0 +1,33 @@
package com.dfsek.terra.config.loaders;
import org.bukkit.Material;
import org.polydev.gaea.math.ProbabilityCollection;
import java.lang.reflect.Type;
import java.util.Set;
/**
* Class to hold Type instances for types with generics.
*/
@SuppressWarnings("unused")
public final class Types {
public static final Type MATERIAL_SET_TYPE;
public static final Type MATERIAL_PROBABILITY_COLLECTION_TYPE;
static {
MATERIAL_SET_TYPE = getType("materialSet");
MATERIAL_PROBABILITY_COLLECTION_TYPE = getType("materialProbabilityCollection");
}
private Set<Material> materialSet;
private ProbabilityCollection<Material> materialProbabilityCollection;
private static Type getType(String dummyFieldName) {
try {
return Types.class.getDeclaredField(dummyFieldName).getGenericType();
} catch(NoSuchFieldException e) {
e.printStackTrace();
return null;
}
}
}

View File

@@ -5,6 +5,7 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.carving.CarverPalette;
import com.dfsek.terra.config.loaders.Types;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.polydev.gaea.math.ProbabilityCollection;
@@ -16,13 +17,15 @@ import java.util.Set;
@SuppressWarnings("unchecked")
public class CarverPaletteLoader implements TypeLoader<CarverPalette> {
@Override
public CarverPalette load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Configuration configuration = new Configuration((Map<String, Object>) o);
CarverPalette palette = new CarverPalette((Set<Material>) configLoader.loadType(Set.class, configuration.get("replace")), (Boolean) configuration.get("replace-blacklist"));
CarverPalette palette = new CarverPalette((Set<Material>) configLoader.loadType(Types.MATERIAL_SET_TYPE, configuration.get("replace")), (Boolean) configuration.get("replace-blacklist"));
for(Map<String, Object> map : (List<Map<String, Object>>) configuration.get("layers")) {
ProbabilityCollection<BlockData> layer = (ProbabilityCollection<BlockData>) configLoader.loadType(ProbabilityCollection.class, map.get("materials"));
ProbabilityCollection<BlockData> layer = (ProbabilityCollection<BlockData>) configLoader.loadType(Types.MATERIAL_PROBABILITY_COLLECTION_TYPE, map.get("materials"));
palette.add(layer, (Integer) map.get("y"));
}
return palette;

View File

@@ -39,15 +39,15 @@ public class CarverTemplate implements ConfigTemplate {
@Abstractable
private double startZ;
@Value("start.radius.x")
@Value("start.radius.multiply.x")
@Abstractable
private double radMX;
@Value("start.radius.y")
@Value("start.radius.multiply.y")
@Abstractable
private double radMY;
@Value("start.radius.z")
@Value("start.radius.multiply.z")
@Abstractable
private double radMZ;