fix probability collection loading

This commit is contained in:
dfsek 2021-07-05 15:25:05 -07:00
parent dea12d3056
commit d2298240ed
5 changed files with 25 additions and 49 deletions

View File

@ -13,10 +13,22 @@ import java.util.Map;
@SuppressWarnings("unchecked")
public class PaletteLayerLoader implements TypeLoader<PaletteLayerHolder> {
private static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
@SuppressWarnings("unused")
private ProbabilityCollection<BlockState> blockStateProbabilityCollection;
static {
try {
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = PaletteLayerLoader.class.getDeclaredField("blockStateProbabilityCollection").getGenericType();
} catch(NoSuchFieldException e) {
throw new Error("this should never happen. i dont know what you did to make this happen but something is very wrong.", e);
}
}
@Override
public PaletteLayerHolder load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) o;
ProbabilityCollection<BlockState> collection = (ProbabilityCollection<BlockState>) configLoader.loadType(/*Types.BLOCK_DATA_PROBABILITY_COLLECTION_TYPE*/null, map.get("materials"));
ProbabilityCollection<BlockState> collection = (ProbabilityCollection<BlockState>) configLoader.loadType(BLOCK_DATA_PROBABILITY_COLLECTION_TYPE, map.get("materials"));
NoiseSampler sampler = null;
if(map.containsKey("noise")) {

View File

@ -6,6 +6,7 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.stream.Stream;

View File

@ -4,6 +4,7 @@ import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import com.dfsek.terra.api.util.MaterialSet;
import com.dfsek.terra.api.util.ProbabilityCollection;
@ -33,7 +34,8 @@ public class GenericLoaders implements LoaderRegistrar {
if(main != null) {
registry.registerLoader(TerraAddon.class, main.getAddons())
.registerLoader(BlockType.class, (t, object, cf) -> main.getWorldHandle().createBlockData((String) object).getBlockType());
.registerLoader(BlockType.class, (t, object, cf) -> main.getWorldHandle().createBlockData((String) object).getBlockType())
.registerLoader(BlockState.class, (t, object, cf) -> main.getWorldHandle().createBlockData((String) object));
}
}
}

View File

@ -1,44 +0,0 @@
package com.dfsek.terra.config.loaders;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.Flora;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.api.world.biome.TerraBiome;
import java.lang.reflect.Type;
import java.util.Map;
/**
* Class to hold Type instances for types with generics.
*/
@SuppressWarnings("unused")
public final class Types {
public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
public static final Type FLORA_PROBABILITY_COLLECTION_TYPE;
public static final Type TREE_PROBABILITY_COLLECTION_TYPE;
public static final Type TERRA_BIOME_PROBABILITY_COLLECTION_TYPE;
public static final Type TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP;
static {
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockStateProbabilityCollection");
FLORA_PROBABILITY_COLLECTION_TYPE = getType("floraProbabilityCollection");
TREE_PROBABILITY_COLLECTION_TYPE = getType("treeProbabilityCollection");
TERRA_BIOME_PROBABILITY_COLLECTION_TYPE = getType("terraBiomeProbabilityCollection");
TERRA_BIOME_TERRA_BIOME_PROBABILITY_COLLECTION_MAP = getType("terraBiomeProbabilityCollectionMap");
}
private ProbabilityCollection<BlockState> blockStateProbabilityCollection;
private ProbabilityCollection<Flora> floraProbabilityCollection;
private ProbabilityCollection<Tree> treeProbabilityCollection;
private ProbabilityCollection<TerraBiome> terraBiomeProbabilityCollection;
private Map<TerraBiome, ProbabilityCollection<TerraBiome>> terraBiomeProbabilityCollectionMap;
private static Type getType(String dummyFieldName) {
try {
return Types.class.getDeclaredField(dummyFieldName).getGenericType();
} catch(NoSuchFieldException e) {
throw new Error("this should never happen. i dont know what you did to make this happen but something is very wrong.");
}
}
}

View File

@ -30,6 +30,7 @@ import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
import com.dfsek.terra.api.util.seeded.NoiseProvider;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.config.GenericLoaders;
import com.dfsek.terra.config.dummy.DummyWorld;
import com.dfsek.terra.config.fileloaders.FolderLoader;
import com.dfsek.terra.config.fileloaders.ZIPLoader;
@ -100,11 +101,12 @@ public class ConfigPackImpl implements ConfigPack {
long l = System.nanoTime();
register(abstractConfigLoader);
register(selfLoader);
main.register(selfLoader);
main.register(abstractConfigLoader);
register(selfLoader);
main.register(selfLoader);
File pack = new File(folder, "pack.yml");
try {
@ -145,6 +147,9 @@ public class ConfigPackImpl implements ConfigPack {
register(selfLoader);
main.register(selfLoader);
register(abstractConfigLoader);
main.register(abstractConfigLoader);
try {
ZipEntry pack = null;
Enumeration<? extends ZipEntry> entries = file.entries();