Add Validator API & cleanup Fabric

This commit is contained in:
dfsek
2020-12-16 00:26:05 -07:00
parent 7a83584317
commit b12079694c
17 changed files with 110 additions and 59 deletions

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.translator;
package com.dfsek.terra.api.transform;
public class AttemptsFailedException extends RuntimeException {
public AttemptsFailedException() {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.translator;
package com.dfsek.terra.api.transform;
import java.util.HashMap;
import java.util.Map;

View File

@@ -0,0 +1,8 @@
package com.dfsek.terra.api.transform;
public class NotNullValidator<T> implements Validator<T> {
@Override
public boolean validate(T value) {
return !(value == null);
}
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.translator;
package com.dfsek.terra.api.transform;
/**
* Interface to transform data from one type to another.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.translator;
package com.dfsek.terra.api.transform;
public class TransformException extends Exception {
public TransformException() {

View File

@@ -1,7 +1,10 @@
package com.dfsek.terra.api.translator;
package com.dfsek.terra.api.transform;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Class to translate types from one style/platform to another.
@@ -10,10 +13,10 @@ import java.util.List;
* @param <T> Data type to transform to.
*/
public class Transformer<F, T> {
private final List<Transform<F, T>> transformer;
private final LinkedHashMap<Transform<F, T>, List<Validator<T>>> transformers;
private Transformer(List<Transform<F, T>> transformer) {
this.transformer = transformer;
private Transformer(LinkedHashMap<Transform<F, T>, List<Validator<T>>> transformer) {
this.transformers = transformer;
}
/**
@@ -24,9 +27,15 @@ public class Transformer<F, T> {
*/
public T translate(F from) {
List<Exception> exceptions = new ArrayList<>();
for(Transform<F, T> transform : transformer) {
for(Map.Entry<Transform<F, T>, List<Validator<T>>> transform : transformers.entrySet()) {
try {
return transform.transform(from);
T result = transform.getKey().transform(from);
for(Validator<T> validator : transform.getValue()) {
if(!validator.validate(result)) {
throw new TransformException("Failed to validate result: " + result.toString());
}
}
return result;
} catch(Exception exception) {
exceptions.add(exception);
}
@@ -45,15 +54,16 @@ public class Transformer<F, T> {
* @param <T>
* @param <F>
*/
public static class Builder<T, F> {
private final List<Transform<T, F>> transforms = new ArrayList<>();
public static final class Builder<F, T> {
private final LinkedHashMap<Transform<F, T>, List<Validator<T>>> transforms = new LinkedHashMap<>();
public Builder<T, F> addTransform(Transform<T, F> transform) {
transforms.add(transform);
@SafeVarargs
public final Builder<F, T> addTransform(Transform<F, T> transform, Validator<T>... validators) {
transforms.put(transform, Arrays.asList(validators));
return this;
}
public Transformer<T, F> build() {
public final Transformer<F, T> build() {
return new Transformer<>(transforms);
}
}

View File

@@ -0,0 +1,6 @@
package com.dfsek.terra.api.transform;
public interface Validator<T> {
boolean validate(T value) throws TransformException;
}

View File

@@ -35,7 +35,7 @@ public class OrePopulator implements TerraBlockPopulator {
Random random = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX() + cx, chunk.getZ() + cz, world.getSeed()));
int originX = ((chunk.getX() + cx) << 4);
int originZ = ((chunk.getZ() + cz) << 4);
Biome b = main.getWorld(world).getGrid().getBiome(originX + 8, originZ + 8, GenerationPhase.POPULATE);
Biome b = tw.getGrid().getBiome(originX + 8, originZ + 8, GenerationPhase.POPULATE);
BiomeTemplate config = ((UserDefinedBiome) b).getConfig();
int finalCx = cx;
int finalCz = cz;