put vector3 in class in API

This commit is contained in:
dfsek
2021-06-30 10:39:03 -07:00
parent abd3683a49
commit bf5e8d903c
107 changed files with 552 additions and 544 deletions

View File

@@ -0,0 +1,104 @@
package com.dfsek.terra.addons.noise;
import com.dfsek.terra.addons.noise.config.NoiseSamplerBuilderLoader;
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate;
import com.dfsek.terra.addons.noise.config.templates.KernelTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.CellularNoiseTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.ConstantNoiseTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.ExpressionFunctionTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.GaborNoiseTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.SimpleNoiseTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.fractal.BrownianMotionTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.fractal.PingPongTemplate;
import com.dfsek.terra.addons.noise.config.templates.noise.fractal.RidgedFractalTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.ClampNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearNormalizerTemplate;
import com.dfsek.terra.addons.noise.config.templates.normalizer.NormalNormalizerTemplate;
import com.dfsek.terra.addons.noise.samplers.ImageSampler;
import com.dfsek.terra.addons.noise.samplers.noise.CellularSampler;
import com.dfsek.terra.addons.noise.samplers.noise.random.GaussianNoiseSampler;
import com.dfsek.terra.addons.noise.samplers.noise.random.WhiteNoiseSampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.OpenSimplex2SSampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.OpenSimplex2Sampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.PerlinSampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.SimplexSampler;
import com.dfsek.terra.addons.noise.samplers.noise.value.ValueCubicSampler;
import com.dfsek.terra.addons.noise.samplers.noise.value.ValueSampler;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.annotations.Global;
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.util.seeded.NoiseProvider;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate;
@Addon("noise")
@Author("Terra")
@Version("1.0.0")
public class NoiseAddon extends TerraAddon {
@Inject
private TerraPlugin plugin;
@Override
public void initialize() {
plugin.applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)
.applyLoader(DomainWarpTemplate.class, DomainWarpTemplate::new)
.applyLoader(LinearNormalizerTemplate.class, LinearNormalizerTemplate::new)
.applyLoader(NormalNormalizerTemplate.class, NormalNormalizerTemplate::new)
.applyLoader(ImageSampler.Channel.class, (t, object, cf) -> ImageSampler.Channel.valueOf((String) object))
.applyLoader(ClampNormalizerTemplate.class, ClampNormalizerTemplate::new)
.applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)
.applyLoader(CellularSampler.ReturnType.class, (t, object, cf) -> CellularSampler.ReturnType.valueOf((String) object))
.applyLoader(CellularSampler.DistanceFunction.class, (t, object, cf) -> CellularSampler.DistanceFunction.valueOf((String) object))
;
}
@SuppressWarnings("deprecation")
@Global
public void packPreLoad(ConfigPackPreLoadEvent event) {
event.getPack()
.applyLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(event.getPack().getRegistry(NoiseProvider.class)));
CheckedRegistry<NoiseProvider> noiseRegistry = event.getPack().getRegistry(NoiseProvider.class);
noiseRegistry.addUnchecked("LINEAR", LinearNormalizerTemplate::new);
noiseRegistry.addUnchecked("NORMAL", NormalNormalizerTemplate::new);
noiseRegistry.addUnchecked("CLAMP", ClampNormalizerTemplate::new);
noiseRegistry.addUnchecked("EXPRESSION", ExpressionFunctionTemplate::new);
noiseRegistry.addUnchecked("IMAGE", ImageSamplerTemplate::new);
noiseRegistry.addUnchecked("DOMAINWARP", DomainWarpTemplate::new);
noiseRegistry.addUnchecked("FBM", BrownianMotionTemplate::new);
noiseRegistry.addUnchecked("PINGPONG", PingPongTemplate::new);
noiseRegistry.addUnchecked("RIDGED", RidgedFractalTemplate::new);
noiseRegistry.addUnchecked("OPENSIMPLEX2", () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new));
noiseRegistry.addUnchecked("OPENSIMPLEX2S", () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new));
noiseRegistry.addUnchecked("PERLIN", () -> new SimpleNoiseTemplate(PerlinSampler::new));
noiseRegistry.addUnchecked("SIMPLEX", () -> new SimpleNoiseTemplate(SimplexSampler::new));
noiseRegistry.addUnchecked("GABOR", GaborNoiseTemplate::new);
noiseRegistry.addUnchecked("VALUE", () -> new SimpleNoiseTemplate(ValueSampler::new));
noiseRegistry.addUnchecked("VALUECUBIC", () -> new SimpleNoiseTemplate(ValueCubicSampler::new));
noiseRegistry.addUnchecked("CELLULAR", CellularNoiseTemplate::new);
noiseRegistry.addUnchecked("WHITENOISE", () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new));
noiseRegistry.addUnchecked("GAUSSIAN", () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new));
noiseRegistry.addUnchecked("CONSTANT", ConstantNoiseTemplate::new);
noiseRegistry.addUnchecked("KERNEL", KernelTemplate::new);
}
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.config.loaders.config.sampler;
package com.dfsek.terra.addons.noise.config;
import com.dfsek.tectonic.config.Configuration;
import com.dfsek.tectonic.exception.ConfigException;

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.config.loaders.config.sampler.templates;
package com.dfsek.terra.addons.noise.config.templates;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.samplers.DomainWarpedSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.noise.samplers.DomainWarpedSampler;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class DomainWarpTemplate extends SamplerTemplate<DomainWarpedSampler> {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.config.loaders.config.function;
package com.dfsek.terra.addons.noise.config.templates;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.config.loaders.config.sampler.templates;
package com.dfsek.terra.addons.noise.config.templates;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.samplers.ImageSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.ImageSampler;
import java.awt.image.BufferedImage;

View File

@@ -1,12 +1,12 @@
package com.dfsek.terra.config.loaders.config.sampler.templates;
package com.dfsek.terra.addons.noise.config.templates;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ValidatedConfigTemplate;
import com.dfsek.tectonic.exception.ValidationException;
import com.dfsek.terra.addons.noise.samplers.KernelSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.noise.samplers.KernelSampler;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.config.loaders.config.sampler.templates;
package com.dfsek.terra.addons.noise.config.templates;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;

View File

@@ -1,11 +1,11 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.samplers.noise.CellularSampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.OpenSimplex2Sampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.noise.samplers.noise.CellularSampler;
import com.dfsek.terra.noise.samplers.noise.simplex.OpenSimplex2Sampler;
@SuppressWarnings("FieldMayBeFinal")
public class CellularNoiseTemplate extends NoiseTemplate<CellularSampler> {

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.samplers.noise.ConstantSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate;
import com.dfsek.terra.noise.samplers.noise.ConstantSampler;
@SuppressWarnings("FieldMayBeFinal")
public class ConstantNoiseTemplate extends SamplerTemplate<ConstantSampler> {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.paralithic.eval.parser.Parser;
import com.dfsek.paralithic.eval.parser.Scope;
@@ -8,14 +8,14 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ValidatedConfigTemplate;
import com.dfsek.tectonic.exception.ValidationException;
import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction;
import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction2;
import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction3;
import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.paralithic.defined.UserDefinedFunction;
import com.dfsek.terra.addons.noise.paralithic.noise.NoiseFunction2;
import com.dfsek.terra.addons.noise.paralithic.noise.NoiseFunction3;
import com.dfsek.terra.addons.noise.samplers.noise.ExpressionFunction;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate;
import com.dfsek.terra.noise.samplers.noise.ExpressionFunction;
import java.util.HashMap;
import java.util.LinkedHashMap;

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.samplers.noise.GaborNoiseSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.GaborNoiseSampler;
public class GaborNoiseTemplate extends NoiseTemplate<GaborNoiseSampler> {
@Value("rotation")

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public abstract class NoiseTemplate<T extends NoiseFunction> extends SamplerTemplate<T> {

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise;
package com.dfsek.terra.addons.noise.config.templates.noise;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import java.util.function.Function;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal;
package com.dfsek.terra.addons.noise.config.templates.noise.fractal;
import com.dfsek.terra.addons.noise.samplers.noise.fractal.BrownianMotionSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.fractal.BrownianMotionSampler;
public class BrownianMotionTemplate extends FractalTemplate<BrownianMotionSampler> {
@Override

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal;
package com.dfsek.terra.addons.noise.config.templates.noise.fractal;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.samplers.noise.fractal.FractalNoiseFunction;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate;
import com.dfsek.terra.noise.samplers.noise.fractal.FractalNoiseFunction;
public abstract class FractalTemplate<T extends FractalNoiseFunction> extends SamplerTemplate<T> {
@Value("octaves")

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal;
package com.dfsek.terra.addons.noise.config.templates.noise.fractal;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.samplers.noise.fractal.PingPongSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.fractal.PingPongSampler;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class PingPongTemplate extends FractalTemplate<PingPongSampler> {

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal;
package com.dfsek.terra.addons.noise.config.templates.noise.fractal;
import com.dfsek.terra.addons.noise.samplers.noise.fractal.RidgedFractalSampler;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.fractal.RidgedFractalSampler;
public class RidgedFractalTemplate extends FractalTemplate<RidgedFractalSampler> {
@Override

View File

@@ -1,12 +1,11 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.normalizer;
package com.dfsek.terra.addons.noise.config.templates.normalizer;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.normalizer.ClampNormalizer;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.normalizer.ClampNormalizer;
import com.dfsek.terra.noise.normalizer.LinearNormalizer;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class ClampNormalizerTemplate extends NormalizerTemplate<LinearNormalizer> {
public class ClampNormalizerTemplate extends NormalizerTemplate<ClampNormalizer> {
@Value("max")
private double max;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.normalizer;
package com.dfsek.terra.addons.noise.config.templates.normalizer;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.normalizer.LinearNormalizer;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.normalizer.LinearNormalizer;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class LinearNormalizerTemplate extends NormalizerTemplate<LinearNormalizer> {

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.normalizer;
package com.dfsek.terra.addons.noise.config.templates.normalizer;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.normalizer.NormalNormalizer;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.normalizer.NormalNormalizer;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class NormalNormalizerTemplate extends NormalizerTemplate<NormalNormalizer> {

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.sampler.templates.normalizer;
package com.dfsek.terra.addons.noise.config.templates.normalizer;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.normalizer.Normalizer;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate;
import com.dfsek.terra.noise.normalizer.Normalizer;
public abstract class NormalizerTemplate<T extends Normalizer> extends SamplerTemplate<T> {
@Value("function")

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.normalizer;
package com.dfsek.terra.addons.noise.normalizer;
import com.dfsek.terra.api.noise.NoiseSampler;
import net.jafama.FastMath;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.normalizer;
package com.dfsek.terra.addons.noise.normalizer;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.normalizer;
package com.dfsek.terra.addons.noise.normalizer;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.MathUtil;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.normalizer;
package com.dfsek.terra.addons.noise.normalizer;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.math.paralithic;
package com.dfsek.terra.addons.noise.paralithic;
import com.dfsek.paralithic.functions.dynamic.DynamicFunction;

View File

@@ -1,11 +1,11 @@
package com.dfsek.terra.api.math.paralithic.defined;
package com.dfsek.terra.addons.noise.paralithic.defined;
import com.dfsek.paralithic.Expression;
import com.dfsek.paralithic.eval.parser.Parser;
import com.dfsek.paralithic.eval.parser.Scope;
import com.dfsek.paralithic.eval.tokenizer.ParseException;
import com.dfsek.paralithic.functions.dynamic.DynamicFunction;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate;
public class UserDefinedFunction implements DynamicFunction {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.math.paralithic.noise;
package com.dfsek.terra.addons.noise.paralithic.noise;
import com.dfsek.paralithic.functions.dynamic.DynamicFunction;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.api.math.paralithic.noise;
package com.dfsek.terra.addons.noise.paralithic.noise;
import com.dfsek.terra.addons.noise.util.HashMapDoubleDouble;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.hash.HashMapDoubleDouble;
public class NoiseFunction2 implements NoiseFunction {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.math.paralithic.noise;
package com.dfsek.terra.addons.noise.paralithic.noise;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers;
package com.dfsek.terra.addons.noise.samplers;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers;
package com.dfsek.terra.addons.noise.samplers;
import com.dfsek.paralithic.Expression;
import com.dfsek.paralithic.eval.parser.Parser;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers;
package com.dfsek.terra.addons.noise.samplers;
import com.dfsek.terra.api.noise.NoiseSampler;
import net.jafama.FastMath;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers;
package com.dfsek.terra.addons.noise.samplers;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.noise.samplers.noise;
package com.dfsek.terra.addons.noise.samplers.noise;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.noise.samplers.noise.simplex.OpenSimplex2Sampler;
import com.dfsek.terra.addons.noise.samplers.noise.simplex.OpenSimplex2Sampler;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
@@ -384,7 +384,7 @@ public class CellularSampler extends NoiseFunction {
int yPrimedBase = (yr - 1) * PRIME_Y;
int zPrimedBase = (zr - 1) * PRIME_Z;
Vector3 center = new Vector3Impl(x, y, z);
Vector3 center = new Vector3(x, y, z);
switch(distanceFunction) {
case Euclidean:

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise;
package com.dfsek.terra.addons.noise.samplers.noise;
/**
* Sampler3D implementation that returns a constant.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise;
package com.dfsek.terra.addons.noise.samplers.noise;
import com.dfsek.paralithic.Expression;
import com.dfsek.paralithic.eval.parser.Parser;

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.noise.samplers.noise;
package com.dfsek.terra.addons.noise.samplers.noise;
import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler;
import com.dfsek.terra.addons.noise.samplers.noise.random.WhiteNoiseSampler;
import net.jafama.FastMath;
public class GaborNoiseSampler extends NoiseFunction {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise;
package com.dfsek.terra.addons.noise.samplers.noise;
import com.dfsek.terra.api.noise.NoiseSampler;
import net.jafama.FastMath;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.fractal;
package com.dfsek.terra.addons.noise.samplers.noise.fractal;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.noise.samplers.noise.fractal;
package com.dfsek.terra.addons.noise.samplers.noise.fractal;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
public abstract class FractalNoiseFunction extends NoiseFunction {
protected final NoiseSampler input;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.fractal;
package com.dfsek.terra.addons.noise.samplers.noise.fractal;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.fractal;
package com.dfsek.terra.addons.noise.samplers.noise.fractal;
import com.dfsek.terra.api.noise.NoiseSampler;

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.noise.samplers.noise.random;
package com.dfsek.terra.addons.noise.samplers.noise.random;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
/**
* NoiseSampler implementation to provide random, normally distributed (Gaussian) noise.

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.noise.samplers.noise.random;
package com.dfsek.terra.addons.noise.samplers.noise.random;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
/**
* NoiseSampler implementation to produce random, uniformly distributed (white) noise.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.simplex;
package com.dfsek.terra.addons.noise.samplers.noise.simplex;
/**
* NoiseSampler implementation to provide OpenSimplex2 (Smooth Variant) noise.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.simplex;
package com.dfsek.terra.addons.noise.samplers.noise.simplex;
/**
* NoiseSampler implementation to provide OpenSimplex2 noise.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.simplex;
package com.dfsek.terra.addons.noise.samplers.noise.simplex;
/**
* NoiseSampler implementation to provide Perlin Noise.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.simplex;
package com.dfsek.terra.addons.noise.samplers.noise.simplex;
public class SimplexSampler extends SimplexStyleSampler {
private static final Double2[] GRAD_2D = {

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.noise.samplers.noise.simplex;
package com.dfsek.terra.addons.noise.samplers.noise.simplex;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
/**
* Abstract NoiseSampler implementation for simplex-style noise functions.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.value;
package com.dfsek.terra.addons.noise.samplers.noise.value;
public class ValueCubicSampler extends ValueStyleNoise {
public ValueCubicSampler(int seed) {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.noise.samplers.noise.value;
package com.dfsek.terra.addons.noise.samplers.noise.value;
public class ValueSampler extends ValueStyleNoise {
public ValueSampler(int seed) {

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.noise.samplers.noise.value;
package com.dfsek.terra.addons.noise.samplers.noise.value;
import com.dfsek.terra.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
public abstract class ValueStyleNoise extends NoiseFunction {
public ValueStyleNoise(int seed) {

View File

@@ -31,7 +31,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
package com.dfsek.terra.api.util.hash;
package com.dfsek.terra.addons.noise.util;
import java.io.Serializable;

View File

@@ -31,7 +31,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
package com.dfsek.terra.api.util.hash;
package com.dfsek.terra.addons.noise.util;
import java.io.Serializable;
import java.util.NoSuchElementException;

View File

@@ -10,6 +10,8 @@ import com.dfsek.terra.api.lang.Language;
import com.dfsek.terra.api.profiler.Profiler;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.tectonic.LoaderHolder;
import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import com.dfsek.terra.api.util.JarUtil;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.World;
@@ -22,7 +24,7 @@ import java.util.jar.JarFile;
/**
* Represents a Terra mod/plugin instance.
*/
public interface TerraPlugin extends LoaderRegistrar {
public interface TerraPlugin extends LoaderRegistrar, LoaderHolder {
WorldHandle getWorldHandle();
TerraWorld getWorld(World world);

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.api.config;
import com.dfsek.terra.api.LoaderRegistrar;
import com.dfsek.terra.api.tectonic.LoaderHolder;
import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.world.TerraWorld;
@@ -9,8 +10,7 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import java.util.Map;
import java.util.Set;
public interface ConfigPack extends LoaderRegistrar {
@SuppressWarnings("unchecked")
public interface ConfigPack extends LoaderRegistrar, LoaderHolder {
<T> CheckedRegistry<T> getRegistry(Class<T> clazz);
BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder();

View File

@@ -30,4 +30,28 @@ public interface NoiseSampler {
double getNoiseSeeded(int seed, double x, double y);
double getNoiseSeeded(int seed, double x, double y, double z);
static NoiseSampler zero() {
return new NoiseSampler() {
@Override
public double getNoise(double x, double y) {
return 0;
}
@Override
public double getNoise(double x, double y, double z) {
return 0;
}
@Override
public double getNoiseSeeded(int seed, double x, double y) {
return 0;
}
@Override
public double getNoiseSeeded(int seed, double x, double y, double z) {
return 0;
}
};
}
}

View File

@@ -0,0 +1,20 @@
package com.dfsek.terra.api.tectonic;
import com.dfsek.tectonic.abstraction.TemplateProvider;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import java.lang.reflect.Type;
import java.util.function.Supplier;
public interface LoaderHolder {
<T> LoaderHolder applyLoader(Type type, TypeLoader<T> loader);
default <T> LoaderHolder applyLoader(Class<? extends T> type, TypeLoader<T> loader) {
return applyLoader((Type) type, loader);
}
<T> LoaderHolder applyLoader(Type type, TemplateProvider<ObjectTemplate<T>> loader);
default <T> LoaderHolder applyLoader(Class<? extends T> type, TemplateProvider<ObjectTemplate<T>> loader) {
return applyLoader((Type) type, loader);
}
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api;
package com.dfsek.terra.api.tectonic;
import com.dfsek.tectonic.loading.TypeRegistry;

View File

@@ -1,47 +1,115 @@
package com.dfsek.terra.api.vector;
import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.world.World;
import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull;
public interface Vector3 extends Cloneable {
double getZ();
public class Vector3 implements Cloneable {
private double x;
private double y;
private double z;
Vector3 setZ(double z);
public Vector3(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
double getX();
public double getZ() {
return z;
}
Vector3 setX(double x);
public Vector3 setZ(double z) {
this.z = z;
return this;
}
double getY();
public double getX() {
return x;
}
Vector3 setY(double y);
public Vector3 setX(double x) {
this.x = x;
return this;
}
int getBlockX();
public double getY() {
return y;
}
int getBlockY();
public Vector3 setY(double y) {
this.y = y;
return this;
}
int getBlockZ();
public int getBlockX() {
return FastMath.floorToInt(x);
}
Vector3 multiply(double m);
public int getBlockY() {
return FastMath.floorToInt(y);
}
Vector3 add(double x, double y, double z);
public int getBlockZ() {
return FastMath.floorToInt(z);
}
Vector3 add(Vector3 other);
public Vector3 multiply(double m) {
x *= m;
y *= m;
z *= m;
return this;
}
Vector3 add(Vector2 other);
public Vector3 add(double x, double y, double z) {
this.x += x;
this.y += y;
this.z += z;
return this;
}
double lengthSquared();
public Vector3 add(Vector3 other) {
this.x += other.getX();
this.y += other.getY();
this.z += other.getZ();
return this;
}
double length();
public Vector3 add(Vector2 other) {
this.x += other.getX();
this.z += other.getZ();
return this;
}
double inverseLength();
public double lengthSquared() {
return x * x + y * y + z * z;
}
public Vector3 clone() {
try {
return (Vector3) super.clone();
} catch(CloneNotSupportedException e) {
throw new Error(e);
}
}
public double length() {
return FastMath.sqrt(lengthSquared());
}
public double inverseLength() {
return FastMath.invSqrtQuick(lengthSquared());
}
/**
* Returns if a vector is normalized
*
* @return whether the vector is normalised
*/
boolean isNormalized();
public boolean isNormalized() {
return MathUtil.equals(this.lengthSquared(), 1);
}
/**
* Rotates the vector around the x axis.
@@ -55,7 +123,15 @@ public interface Vector3 extends Cloneable {
* in radians
* @return the same vector
*/
@NotNull Vector3 rotateAroundX(double angle);
@NotNull
public Vector3 rotateAroundX(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double y = angleCos * getY() - angleSin * getZ();
double z = angleSin * getY() + angleCos * getZ();
return setY(y).setZ(z);
}
/**
* Rotates the vector around the y axis.
@@ -69,7 +145,15 @@ public interface Vector3 extends Cloneable {
* in radians
* @return the same vector
*/
@NotNull Vector3 rotateAroundY(double angle);
@NotNull
public Vector3 rotateAroundY(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double x = angleCos * getX() + angleSin * getZ();
double z = -angleSin * getX() + angleCos * getZ();
return setX(x).setZ(z);
}
/**
* Rotates the vector around the z axis
@@ -83,7 +167,15 @@ public interface Vector3 extends Cloneable {
* in radians
* @return the same vector
*/
@NotNull Vector3 rotateAroundZ(double angle);
@NotNull
public Vector3 rotateAroundZ(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double x = angleCos * getX() - angleSin * getY();
double y = angleSin * getX() + angleCos * getY();
return setX(x).setY(y);
}
/**
* Get the distance between this vector and another. The value of this
@@ -95,7 +187,9 @@ public interface Vector3 extends Cloneable {
* @param o The other vector
* @return the distance
*/
double distance(@NotNull Vector3 o);
public double distance(@NotNull Vector3 o) {
return FastMath.sqrt(FastMath.pow2(x - o.getX()) + FastMath.pow2(y - o.getY()) + FastMath.pow2(z - o.getZ()));
}
/**
* Get the squared distance between this vector and another.
@@ -103,7 +197,9 @@ public interface Vector3 extends Cloneable {
* @param o The other vector
* @return the distance
*/
double distanceSquared(@NotNull Vector3 o);
public double distanceSquared(@NotNull Vector3 o) {
return FastMath.pow2(x - o.getX()) + FastMath.pow2(y - o.getY()) + FastMath.pow2(z - o.getZ());
}
/**
* Rotates the vector around a given arbitrary axis in 3 dimensional space.
@@ -124,7 +220,10 @@ public interface Vector3 extends Cloneable {
* @throws IllegalArgumentException if the provided axis vector instance is
* null
*/
@NotNull Vector3 rotateAroundAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException;
@NotNull
public Vector3 rotateAroundAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException {
return rotateAroundNonUnitAxis(axis.isNormalized() ? axis : axis.clone().normalize(), angle);
}
/**
* Rotates the vector around a given arbitrary axis in 3 dimensional space.
@@ -144,7 +243,27 @@ public interface Vector3 extends Cloneable {
* @throws IllegalArgumentException if the provided axis vector instance is
* null
*/
@NotNull Vector3 rotateAroundNonUnitAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException;
@NotNull
public Vector3 rotateAroundNonUnitAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException {
double x = getX(), y = getY(), z = getZ();
double x2 = axis.getX(), y2 = axis.getY(), z2 = axis.getZ();
double cosTheta = Math.cos(angle);
double sinTheta = Math.sin(angle);
double dotProduct = this.dot(axis);
double xPrime = x2 * dotProduct * (1d - cosTheta)
+ x * cosTheta
+ (-z2 * y + y2 * z) * sinTheta;
double yPrime = y2 * dotProduct * (1d - cosTheta)
+ y * cosTheta
+ (z2 * x - x2 * z) * sinTheta;
double zPrime = z2 * dotProduct * (1d - cosTheta)
+ z * cosTheta
+ (-y2 * x + x2 * y) * sinTheta;
return setX(xPrime).setY(yPrime).setZ(zPrime);
}
/**
* Calculates the dot product of this vector with another. The dot product
@@ -153,13 +272,59 @@ public interface Vector3 extends Cloneable {
* @param other The other vector
* @return dot product
*/
double dot(@NotNull Vector3 other);
public double dot(@NotNull Vector3 other) {
return x * other.getX() + y * other.getY() + z * other.getZ();
}
Vector3 normalize();
public Vector3 normalize() {
return this.multiply(this.inverseLength());
}
Vector3 subtract(int x, int y, int z);
public Vector3 subtract(int x, int y, int z) {
this.x -= x;
this.y -= y;
this.z -= z;
return this;
}
Vector3 subtract(Vector3 end);
public Vector3 subtract(Vector3 end) {
x -= end.getX();
y -= end.getY();
z -= end.getZ();
return this;
}
Vector3 clone();
/**
* Returns a hash code for this vector
*
* @return hash code
*/
@Override
public int hashCode() {
int hash = 7;
hash = 79 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32));
return hash;
}
/**
* Checks to see if two objects are equal.
* <p>
* Only two Vectors can ever return true. This method uses a fuzzy match
* to account for floating point errors. The epsilon can be retrieved
* with epsilon.
*/
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Vector3)) return false;
Vector3 other = (Vector3) obj;
return MathUtil.equals(x, other.getX()) && MathUtil.equals(y, other.getY()) && MathUtil.equals(z, other.getZ());
}
@Override
public String toString() {
return "(" + getX() + ", " + getY() + ", " + getZ() + ")";
}
}

View File

@@ -4,7 +4,6 @@ import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector3Impl;
import java.util.List;
import java.util.Random;
@@ -41,7 +40,7 @@ public class GridSpawn {
}
}
Vector3 shortest = zones.get(0);
Vector3 compare = new Vector3Impl(x, 0, z);
Vector3 compare = new Vector3(x, 0, z);
for(Vector3 v : zones) {
if(compare.distanceSquared(shortest) > compare.distanceSquared(v)) shortest = v.clone();
}
@@ -62,7 +61,7 @@ public class GridSpawn {
int offsetZ = r.nextInt(width);
int sx = structureChunkX * (width + 2 * separation) + offsetX;
int sz = structureChunkZ * (width + 2 * separation) + offsetZ;
return new Vector3Impl(sx, 0, sz);
return new Vector3(sx, 0, sz);
}
public int getWidth() {

View File

@@ -11,8 +11,8 @@ import com.dfsek.terra.api.structures.structure.buffer.items.BufferedBlock;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -40,7 +40,7 @@ public abstract class AbstractBlockFunction implements Function<Void> {
RotationUtil.rotateVector(xz, arguments.getRotation());
RotationUtil.rotateBlockData(rot, arguments.getRotation().inverse());
arguments.getBuffer().addItem(new BufferedBlock(rot, overwrite.apply(implementationArguments, variableMap), main, arguments.isWaterlog()), new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
arguments.getBuffer().addItem(new BufferedBlock(rot, overwrite.apply(implementationArguments, variableMap), main, arguments.isWaterlog()), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
}
@Override

View File

@@ -9,9 +9,9 @@ import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -41,7 +41,7 @@ public class BiomeFunction implements Function<String> {
BiomeProvider grid = main.getWorld(arguments.getWorld()).getBiomeProvider();
return grid.getBiome(arguments.getBuffer().getOrigin().clone().add(new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())))).getID();
return grid.getBiome(arguments.getBuffer().getOrigin().clone().add(new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())))).getID();
}

View File

@@ -8,8 +8,8 @@ import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -34,7 +34,7 @@ public class CheckBlockFunction implements Function<String> {
RotationUtil.rotateVector(xz, arguments.getRotation());
String data = arguments.getWorld().getBlockData(arguments.getBuffer().getOrigin().clone().add(new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())))).getAsString();
String data = arguments.getWorld().getBlockData(arguments.getBuffer().getOrigin().clone().add(new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())))).getAsString();
if(data.contains("[")) return data.substring(0, data.indexOf('[')); // Strip properties
else return data;
}

View File

@@ -17,7 +17,6 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.SamplerCache;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -47,7 +46,7 @@ public class CheckFunction implements Function<String> {
RotationUtil.rotateVector(xz, arguments.getRotation());
Vector3 location = arguments.getBuffer().getOrigin().clone().add(new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
Vector3 location = arguments.getBuffer().getOrigin().clone().add(new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ())));
return apply(location, arguments.getWorld());
}

View File

@@ -13,8 +13,8 @@ import com.dfsek.terra.api.structures.structure.buffer.items.BufferedEntity;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import java.util.Map;
@@ -42,7 +42,7 @@ public class EntityFunction implements Function<Void> {
RotationUtil.rotateVector(xz, arguments.getRotation());
arguments.getBuffer().addItem(new BufferedEntity(data, main), new Vector3Impl(xz.getX(), y.apply(implementationArguments, variableMap).doubleValue(), xz.getZ()));
arguments.getBuffer().addItem(new BufferedEntity(data, main), new Vector3(xz.getX(), y.apply(implementationArguments, variableMap).doubleValue(), xz.getZ()));
return null;
}

View File

@@ -8,8 +8,8 @@ import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -31,7 +31,7 @@ public class GetMarkFunction implements Function<String> {
Vector2 xz = new Vector2Impl(x.apply(implementationArguments, variableMap).doubleValue(), z.apply(implementationArguments, variableMap).doubleValue());
RotationUtil.rotateVector(xz, arguments.getRotation());
String mark = arguments.getBuffer().getMark(new Vector3Impl(FastMath.floorToInt(xz.getX()), FastMath.floorToInt(y.apply(implementationArguments, variableMap).doubleValue()), FastMath.floorToInt(xz.getZ())));
String mark = arguments.getBuffer().getMark(new Vector3(FastMath.floorToInt(xz.getX()), FastMath.floorToInt(y.apply(implementationArguments, variableMap).doubleValue()), FastMath.floorToInt(xz.getZ())));
return mark == null ? "" : mark;
}

View File

@@ -13,8 +13,8 @@ import com.dfsek.terra.api.structures.structure.buffer.items.BufferedLootApplica
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -53,7 +53,7 @@ public class LootFunction implements Function<Void> {
return null;
}
arguments.getBuffer().addItem(new BufferedLootApplication(table, main, script), new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
arguments.getBuffer().addItem(new BufferedLootApplication(table, main, script), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
return null;
}

View File

@@ -13,8 +13,8 @@ import com.dfsek.terra.api.structures.structure.buffer.items.BufferedPulledBlock
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -42,7 +42,7 @@ public class PullFunction implements Function<Void> {
RotationUtil.rotateVector(xz, arguments.getRotation());
BlockState rot = data.clone();
RotationUtil.rotateBlockData(rot, arguments.getRotation().inverse());
arguments.getBuffer().addItem(new BufferedPulledBlock(rot), new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
arguments.getBuffer().addItem(new BufferedPulledBlock(rot), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
return null;
}

View File

@@ -8,8 +8,8 @@ import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -34,7 +34,7 @@ public class SetMarkFunction implements Function<Void> {
RotationUtil.rotateVector(xz, arguments.getRotation());
arguments.getBuffer().setMark(mark.apply(implementationArguments, variableMap), new Vector3Impl(FastMath.floorToInt(xz.getX()), FastMath.floorToInt(y.apply(implementationArguments, variableMap).doubleValue()), FastMath.floorToInt(xz.getZ())));
arguments.getBuffer().setMark(mark.apply(implementationArguments, variableMap), new Vector3(FastMath.floorToInt(xz.getX()), FastMath.floorToInt(y.apply(implementationArguments, variableMap).doubleValue()), FastMath.floorToInt(xz.getZ())));
return null;
}

View File

@@ -10,8 +10,8 @@ import com.dfsek.terra.api.structures.structure.buffer.items.BufferedStateManipu
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Map;
@@ -37,7 +37,7 @@ public class StateFunction implements Function<Void> {
Vector2 xz = new Vector2Impl(x.apply(implementationArguments, variableMap).doubleValue(), z.apply(implementationArguments, variableMap).doubleValue());
RotationUtil.rotateVector(xz, arguments.getRotation());
arguments.getBuffer().addItem(new BufferedStateManipulator(main, data.apply(implementationArguments, variableMap)), new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
arguments.getBuffer().addItem(new BufferedStateManipulator(main, data.apply(implementationArguments, variableMap)), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())));
return null;
}

View File

@@ -15,7 +15,6 @@ import com.dfsek.terra.api.util.RotationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector2Impl;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.List;
@@ -72,7 +71,7 @@ public class StructureFunction implements Function<Boolean> {
return null;
}
Vector3 offset = new Vector3Impl(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ()));
Vector3 offset = new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).doubleValue(), FastMath.roundToInt(xz.getZ()));
return script.generate(new IntermediateBuffer(arguments.getBuffer(), offset), arguments.getWorld(), arguments.getRandom(), arguments.getRotation().rotate(rotation1), arguments.getRecursions() + 1);
}

View File

@@ -2,7 +2,6 @@ package com.dfsek.terra.api.world.carving;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.Random;
@@ -98,12 +97,12 @@ public abstract class Worm {
for(int z = -zRad - 1; z <= zRad + 1; z++) {
if(!(FastMath.floorDiv(origin.getBlockZ() + z, 16) == chunkZ)) continue;
for(int y = -yRad - 1; y <= yRad + 1; y++) {
Vector3 position = origin.clone().add(new Vector3Impl(x, y, z));
Vector3 position = origin.clone().add(new Vector3(x, y, z));
if(position.getY() < world.getMinHeight() || position.getY() > world.getMaxHeight()) continue;
double eq = ellipseEquation(x, y, z, xRad, yRad, zRad);
if(eq <= 1 &&
y >= -yRad - 1 + bottomCut && y <= yRad + 1 - topCut) {
consumer.accept(new Vector3Impl(position.getBlockX() - originX, position.getBlockY(), position.getBlockZ() - originZ), Carver.CarvingType.CENTER);
consumer.accept(new Vector3(position.getBlockX() - originX, position.getBlockY(), position.getBlockZ() - originZ), Carver.CarvingType.CENTER);
} else if(eq <= 1.5) {
Carver.CarvingType type = Carver.CarvingType.WALL;
if(y <= -yRad - 1 + bottomCut) {
@@ -111,7 +110,7 @@ public abstract class Worm {
} else if(y >= yRad + 1 - topCut) {
type = Carver.CarvingType.TOP;
}
consumer.accept(new Vector3Impl(position.getBlockX() - originX, position.getBlockY(), position.getBlockZ() - originZ), type);
consumer.accept(new Vector3(position.getBlockX() - originX, position.getBlockY(), position.getBlockZ() - originZ), type);
}
}
}

View File

@@ -4,7 +4,6 @@ import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.vector.Vector3Impl;
import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer;
@@ -66,7 +65,7 @@ public abstract class AsyncFeatureFinder<T> implements Runnable {
run++;
toggle = !toggle;
}
Vector3 finalSpawn = found ? finalizeVector(new Vector3Impl(x, 0, z)) : null;
Vector3 finalSpawn = found ? finalizeVector(new Vector3(x, 0, z)) : null;
callback.accept(finalSpawn);
}

View File

@@ -5,12 +5,12 @@ import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.carving.Worm;
import com.dfsek.terra.vector.Vector3Impl;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -37,7 +37,7 @@ public class CarverCache {
if(CarverCache.this.carver.isChunkCarved(w, chunkX, chunkZ, new FastRandom(PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed() + CarverCache.this.carver.hashCode())))) {
long seed = PopulationUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed());
Random r = new FastRandom(seed);
Worm carving = CarverCache.this.carver.getWorm(seed, new Vector3Impl((chunkX << 4) + r.nextInt(16), CarverCache.this.carver.getConfig().getHeight().get(r), (chunkZ << 4) + r.nextInt(16)));
Worm carving = CarverCache.this.carver.getWorm(seed, new Vector3((chunkX << 4) + r.nextInt(16), CarverCache.this.carver.getConfig().getHeight().get(r), (chunkZ << 4) + r.nextInt(16)));
List<Worm.WormPoint> points = new GlueList<>();
for(int i = 0; i < carving.getLength(); i++) {
carving.step();

View File

@@ -20,7 +20,6 @@ import com.dfsek.terra.api.world.carving.Worm;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.List;
@@ -156,7 +155,7 @@ public class UserDefinedCarver extends Carver {
this.seed = seed;
super.setTopCut(topCut);
super.setBottomCut(bottomCut);
direction = new Vector3Impl((r.nextDouble() - 0.5D) * start[0], (r.nextDouble() - 0.5D) * start[1], (r.nextDouble() - 0.5D) * start[2]).normalize().multiply(step);
direction = new Vector3((r.nextDouble() - 0.5D) * start[0], (r.nextDouble() - 0.5D) * start[1], (r.nextDouble() - 0.5D) * start[2]).normalize().multiply(step);
double[] args = {origin.getX(), origin.getY(), origin.getZ(), length, 0, seed};
setRadius(new int[] {(int) (xRad.evaluate(args)), (int) (yRad.evaluate(args)), (int) (zRad.evaluate(args))});
}

View File

@@ -13,12 +13,12 @@ import com.dfsek.terra.api.command.arg.IntegerArgumentParser;
import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.entity.Player;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.locate.AsyncBiomeFinder;
import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser;
import com.dfsek.terra.commands.biome.tab.BiomeTabCompleter;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.vector.Vector3Impl;
import java.util.Locale;
@@ -66,9 +66,9 @@ public class BiomeLocateCommand implements CommandTemplate {
new Thread(new AsyncBiomeFinder(main.getWorld(player.world()).getBiomeProvider(), biome, player.position().clone().multiply((1D / main.getTerraConfig().getBiomeSearchResolution())), player.world(), 0, radius, location -> {
if(location != null) {
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", biome.getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3Impl(0, player.position().getY(), 0)).distance(player.position())));
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", biome.getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3(0, player.position().getY(), 0)).distance(player.position())));
if(teleport) {
main.runPossiblyUnsafeTask(() -> player.position(new Vector3Impl(location.getX(), player.position().getY(), location.getZ())));
main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ())));
}
} else LangUtil.send("command.biome.unable-to-locate", sender);
}, main), "Biome Location Thread").start();

View File

@@ -17,7 +17,6 @@ import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.vector.Vector3Impl;
import java.util.HashMap;
@@ -41,7 +40,7 @@ public class SpawnCommand implements CommandTemplate {
Position dummy = new Position(0, 0);
String check = new CheckFunction(main, new NumericConstant(0, dummy), new NumericConstant(0, dummy), new NumericConstant(0, dummy), dummy).apply(new TerraImplementationArguments(new StructureBuffer(
new Vector3Impl(x, y, z)
new Vector3(x, y, z)
), Rotation.NONE, new FastRandom(), player.world(), 0), new HashMap<>());
sender.sendMessage("Found: " + check);

View File

@@ -13,11 +13,11 @@ import com.dfsek.terra.api.command.arg.IntegerArgumentParser;
import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.entity.Player;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.locate.AsyncStructureFinder;
import com.dfsek.terra.commands.structure.argument.StructureArgumentParser;
import com.dfsek.terra.commands.structure.completer.StructureCompleter;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.vector.Vector3Impl;
import com.dfsek.terra.world.population.items.TerraStructure;
import java.util.Locale;
@@ -64,9 +64,9 @@ public class StructureLocateCommand implements CommandTemplate {
new Thread(new AsyncStructureFinder(main.getWorld(player.world()).getBiomeProvider(), structure, player.position().clone().multiply((1D / main.getTerraConfig().getBiomeSearchResolution())), player.world(), 0, radius, location -> {
if(location != null) {
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", structure.getTemplate().getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3Impl(0, player.position().getY(), 0)).distance(player.position())));
sender.sendMessage(String.format("The nearest %s is at [%d, ~, %d] (%.1f blocks away)", structure.getTemplate().getID().toLowerCase(Locale.ROOT), location.getBlockX(), location.getBlockZ(), location.add(new Vector3(0, player.position().getY(), 0)).distance(player.position())));
if(teleport) {
main.runPossiblyUnsafeTask(() -> player.position(new Vector3Impl(location.getX(), player.position().getY(), location.getZ())));
main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ())));
}
} else LangUtil.send("command.biome.unable-to-locate", sender);
}, main), "Biome Location Thread").start();

View File

@@ -1,11 +1,11 @@
package com.dfsek.terra.config;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.LoaderRegistrar;
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.math.GridSpawn;
import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.collections.MaterialSet;
@@ -40,17 +40,10 @@ import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.Repla
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.SmoothMutatorTemplate;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.DomainWarpTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.ClampNormalizerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.LinearNormalizerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.NormalNormalizerTemplate;
import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
import com.dfsek.terra.config.loaders.palette.PaletteLayerLoader;
import com.dfsek.terra.config.loaders.palette.slant.SlantHolderLoader;
import com.dfsek.terra.noise.samplers.ImageSampler;
import com.dfsek.terra.noise.samplers.noise.CellularSampler;
import com.dfsek.terra.world.population.items.flora.FloraLayer;
import com.dfsek.terra.world.population.items.flora.TerraFlora;
import com.dfsek.terra.world.population.items.ores.OreConfig;
@@ -79,11 +72,6 @@ public class GenericLoaders implements LoaderRegistrar {
.registerLoader(TreeLayer.class, new TreeLayerLoader())
.registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(OreHolder.class, new OreHolderLoader())
.registerLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)
.registerLoader(DomainWarpTemplate.class, DomainWarpTemplate::new)
.registerLoader(LinearNormalizerTemplate.class, LinearNormalizerTemplate::new)
.registerLoader(NormalNormalizerTemplate.class, NormalNormalizerTemplate::new)
.registerLoader(ClampNormalizerTemplate.class, ClampNormalizerTemplate::new)
.registerLoader(ReplaceMutatorTemplate.class, ReplaceMutatorTemplate::new)
.registerLoader(ExpanderStageTemplate.class, ExpanderStageTemplate::new)
.registerLoader(SmoothMutatorTemplate.class, SmoothMutatorTemplate::new)
@@ -97,14 +85,11 @@ public class GenericLoaders implements LoaderRegistrar {
.registerLoader(SourceSeeded.class, new SourceBuilderLoader())
.registerLoader(StageSeeded.class, new StageBuilderLoader())
.registerLoader(BiomeProvider.BiomeProviderBuilder.class, new BiomeProviderBuilderLoader())
.registerLoader(ImageSampler.Channel.class, (t, object, cf) -> ImageSampler.Channel.valueOf((String) object))
.registerLoader(BiomeProvider.Type.class, (t, object, cf) -> BiomeProvider.Type.valueOf((String) object))
.registerLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object))
.registerLoader(ImageBiomeProvider.Align.class, (t, object, cf) -> ImageBiomeProvider.Align.valueOf((String) object))
.registerLoader(ExpanderStage.Type.class, (t, object, cf) -> ExpanderStage.Type.valueOf((String) object))
.registerLoader(MutatorStage.Type.class, (t, object, cf) -> MutatorStage.Type.valueOf((String) object))
.registerLoader(CellularSampler.ReturnType.class, (t, object, cf) -> CellularSampler.ReturnType.valueOf((String) object))
.registerLoader(CellularSampler.DistanceFunction.class, (t, object, cf) -> CellularSampler.DistanceFunction.valueOf((String) object))
.registerLoader(TerraFlora.Search.class, (t, o, l) -> TerraFlora.Search.valueOf(o.toString()));
if(main != null) {

View File

@@ -11,7 +11,6 @@ import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.pack.ConfigPackImpl;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.noise.samplers.ExpressionSampler;
import com.dfsek.terra.noise.samplers.noise.ConstantSampler;
import com.dfsek.terra.world.generation.WorldGenerator;
import java.util.LinkedHashMap;
@@ -48,7 +47,7 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder {
try {
noise = new ExpressionSampler(template.getNoiseEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap);
elevation = template.getElevationEquation() == null ? new ConstantSampler(0) : new ExpressionSampler(template.getElevationEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap);
elevation = template.getElevationEquation() == null ? NoiseSampler.zero() : new ExpressionSampler(template.getElevationEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap);
carving = new ExpressionSampler(template.getCarvingEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap);
} catch(ParseException e) {
throw new RuntimeException(e);

View File

@@ -17,7 +17,7 @@ public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvi
protected NoiseSeeded blend = new NoiseSeeded() {
@Override
public NoiseSampler apply(Long seed) {
return new ConstantSampler(0);
return NoiseSampler.zero();
}
@Override

View File

@@ -2,12 +2,15 @@ package com.dfsek.terra.config.pack;
import com.dfsek.paralithic.eval.parser.Scope;
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
import com.dfsek.tectonic.abstraction.TemplateProvider;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.tectonic.config.Configuration;
import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.config.ConfigPack;
@@ -24,7 +27,6 @@ import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
import com.dfsek.terra.api.util.seeded.NoiseProvider;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.config.builder.BiomeBuilder;
@@ -36,8 +38,6 @@ import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
import com.dfsek.terra.config.loaders.config.biome.templates.provider.BiomePipelineTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.provider.ImageProviderTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.provider.SingleBiomeProviderTemplate;
import com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
import com.dfsek.terra.config.prototype.ProtoConfig;
import com.dfsek.terra.registry.CheckedRegistryImpl;
import com.dfsek.terra.registry.OpenRegistryImpl;
@@ -54,6 +54,7 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
@@ -72,6 +73,9 @@ import java.util.zip.ZipFile;
public class ConfigPackImpl implements ConfigPack {
private final ConfigPackTemplate template = new ConfigPackTemplate();
private final Map<Type, TypeLoader<?>> loaders = new HashMap<>();
private final Map<Type, TemplateProvider<ObjectTemplate<?>>> objectLoaders = new HashMap<>();
private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
private final ConfigLoader selfLoader = new ConfigLoader();
private final Scope varScope = new Scope();
@@ -205,6 +209,18 @@ public class ConfigPackImpl implements ConfigPack {
private void checkDeadEntries(TerraPlugin main) {
registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl<?>) pair.getLeft()).getDeadEntries().forEach((id, value) -> main.getDebugLogger().warning("Dead entry in '" + clazz + "' registry: '" + id + "'")));
}
@Override
public <T> ConfigPackImpl applyLoader(Type type, TypeLoader<T> loader) {
loaders.put(type, loader);
return this;
}
@SuppressWarnings("unchecked")
@Override
public <T> ConfigPackImpl applyLoader(Type type, TemplateProvider<ObjectTemplate<T>> loader) {
objectLoaders.put(type, (TemplateProvider<ObjectTemplate<?>>) ((Object) loader));
return this;
}
protected Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> getRegistryMap() {
return registryMap;
@@ -282,6 +298,7 @@ public class ConfigPackImpl implements ConfigPack {
}
@SuppressWarnings("unchecked")
@Override
public void register(TypeRegistry registry) {
registry
@@ -289,9 +306,9 @@ public class ConfigPackImpl implements ConfigPack {
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader))
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main))
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
.registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(getOpenRegistry(NoiseProvider.class)));
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)));
loaders.forEach(registry::registerLoader);
objectLoaders.forEach((t, l) -> registry.registerLoader(t, (TemplateProvider<ObjectTemplate<Object>>) ((Object) l)));
}
@Override

View File

@@ -7,8 +7,6 @@ import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;

View File

@@ -25,7 +25,6 @@ import com.dfsek.terra.api.world.palette.slant.SlantHolder;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.pack.ConfigPackImpl;
import com.dfsek.terra.noise.samplers.noise.ConstantSampler;
import com.dfsek.terra.world.population.items.TerraStructure;
import com.dfsek.terra.world.population.items.flora.FloraLayer;
import com.dfsek.terra.world.population.items.ores.OreHolder;
@@ -248,7 +247,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
biomeNoise = new NoiseSeeded() {
@Override
public NoiseSampler apply(Long seed) {
return new ConstantSampler(0);
return NoiseSampler.zero();
}
@Override

View File

@@ -1,62 +1,10 @@
package com.dfsek.terra.registry.config;
import com.dfsek.terra.api.util.seeded.NoiseProvider;
import com.dfsek.terra.config.loaders.config.sampler.templates.DomainWarpTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.KernelTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.CellularNoiseTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.ConstantNoiseTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.ExpressionFunctionTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.GaborNoiseTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.SimpleNoiseTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal.BrownianMotionTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal.PingPongTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.noise.fractal.RidgedFractalTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.ClampNormalizerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.LinearNormalizerTemplate;
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.NormalNormalizerTemplate;
import com.dfsek.terra.noise.samplers.noise.random.GaussianNoiseSampler;
import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler;
import com.dfsek.terra.noise.samplers.noise.simplex.OpenSimplex2SSampler;
import com.dfsek.terra.noise.samplers.noise.simplex.OpenSimplex2Sampler;
import com.dfsek.terra.noise.samplers.noise.simplex.PerlinSampler;
import com.dfsek.terra.noise.samplers.noise.simplex.SimplexSampler;
import com.dfsek.terra.noise.samplers.noise.value.ValueCubicSampler;
import com.dfsek.terra.noise.samplers.noise.value.ValueSampler;
import com.dfsek.terra.registry.OpenRegistryImpl;
public class NoiseRegistry extends OpenRegistryImpl<NoiseProvider> {
public NoiseRegistry() {
add("LINEAR", LinearNormalizerTemplate::new);
add("NORMAL", NormalNormalizerTemplate::new);
add("CLAMP", ClampNormalizerTemplate::new);
add("EXPRESSION", ExpressionFunctionTemplate::new);
add("IMAGE", ImageSamplerTemplate::new);
add("DOMAINWARP", DomainWarpTemplate::new);
add("FBM", BrownianMotionTemplate::new);
add("PINGPONG", PingPongTemplate::new);
add("RIDGED", RidgedFractalTemplate::new);
add("OPENSIMPLEX2", () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new));
add("OPENSIMPLEX2S", () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new));
add("PERLIN", () -> new SimpleNoiseTemplate(PerlinSampler::new));
add("SIMPLEX", () -> new SimpleNoiseTemplate(SimplexSampler::new));
add("GABOR", GaborNoiseTemplate::new);
add("VALUE", () -> new SimpleNoiseTemplate(ValueSampler::new));
add("VALUECUBIC", () -> new SimpleNoiseTemplate(ValueCubicSampler::new));
add("CELLULAR", CellularNoiseTemplate::new);
add("WHITENOISE", () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new));
add("GAUSSIAN", () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new));
add("CONSTANT", ConstantNoiseTemplate::new);
add("KERNEL", KernelTemplate::new);
}
}

View File

@@ -144,7 +144,7 @@ public class Vector2Impl implements Vector2 {
@Override
public Vector3 extrude(double y) {
return new Vector3Impl(this.x, y, this.z);
return new Vector3(this.x, y, this.z);
}
@Override

View File

@@ -1,263 +0,0 @@
package com.dfsek.terra.vector;
import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull;
/**
* 3D Mutable Vector
*/
public class Vector3Impl implements Vector3 {
private double x;
private double y;
private double z;
public Vector3Impl(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public double getZ() {
return z;
}
@Override
public Vector3 setZ(double z) {
this.z = z;
return this;
}
@Override
public double getX() {
return x;
}
@Override
public Vector3 setX(double x) {
this.x = x;
return this;
}
@Override
public double getY() {
return y;
}
@Override
public Vector3 setY(double y) {
this.y = y;
return this;
}
@Override
public int getBlockX() {
return FastMath.floorToInt(x);
}
@Override
public int getBlockY() {
return FastMath.floorToInt(y);
}
@Override
public int getBlockZ() {
return FastMath.floorToInt(z);
}
@Override
public Vector3 multiply(double m) {
x *= m;
y *= m;
z *= m;
return this;
}
@Override
public Vector3 add(double x, double y, double z) {
this.x += x;
this.y += y;
this.z += z;
return this;
}
@Override
public Vector3 add(Vector3 other) {
this.x += other.getX();
this.y += other.getY();
this.z += other.getZ();
return this;
}
@Override
public Vector3 add(Vector2 other) {
this.x += other.getX();
this.z += other.getZ();
return this;
}
@Override
public double lengthSquared() {
return x * x + y * y + z * z;
}
@Override
public Vector3Impl clone() {
try {
return (Vector3Impl) super.clone();
} catch(CloneNotSupportedException e) {
throw new Error(e);
}
}
@Override
public double length() {
return FastMath.sqrt(lengthSquared());
}
@Override
public double inverseLength() {
return FastMath.invSqrtQuick(lengthSquared());
}
@Override
public boolean isNormalized() {
return MathUtil.equals(this.lengthSquared(), 1);
}
@Override
@NotNull
public Vector3 rotateAroundX(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double y = angleCos * getY() - angleSin * getZ();
double z = angleSin * getY() + angleCos * getZ();
return setY(y).setZ(z);
}
@Override
@NotNull
public Vector3 rotateAroundY(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double x = angleCos * getX() + angleSin * getZ();
double z = -angleSin * getX() + angleCos * getZ();
return setX(x).setZ(z);
}
@Override
@NotNull
public Vector3 rotateAroundZ(double angle) {
double angleCos = Math.cos(angle);
double angleSin = Math.sin(angle);
double x = angleCos * getX() - angleSin * getY();
double y = angleSin * getX() + angleCos * getY();
return setX(x).setY(y);
}
@Override
public double distance(@NotNull Vector3 o) {
return FastMath.sqrt(FastMath.pow2(x - o.getX()) + FastMath.pow2(y - o.getY()) + FastMath.pow2(z - o.getZ()));
}
@Override
public double distanceSquared(@NotNull Vector3 o) {
return FastMath.pow2(x - o.getX()) + FastMath.pow2(y - o.getY()) + FastMath.pow2(z - o.getZ());
}
@Override
@NotNull
public Vector3 rotateAroundAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException {
return rotateAroundNonUnitAxis(axis.isNormalized() ? axis : axis.clone().normalize(), angle);
}
@Override
@NotNull
public Vector3 rotateAroundNonUnitAxis(@NotNull Vector3 axis, double angle) throws IllegalArgumentException {
double x = getX(), y = getY(), z = getZ();
double x2 = axis.getX(), y2 = axis.getY(), z2 = axis.getZ();
double cosTheta = Math.cos(angle);
double sinTheta = Math.sin(angle);
double dotProduct = this.dot(axis);
double xPrime = x2 * dotProduct * (1d - cosTheta)
+ x * cosTheta
+ (-z2 * y + y2 * z) * sinTheta;
double yPrime = y2 * dotProduct * (1d - cosTheta)
+ y * cosTheta
+ (z2 * x - x2 * z) * sinTheta;
double zPrime = z2 * dotProduct * (1d - cosTheta)
+ z * cosTheta
+ (-y2 * x + x2 * y) * sinTheta;
return setX(xPrime).setY(yPrime).setZ(zPrime);
}
@Override
public double dot(@NotNull Vector3 other) {
return x * other.getX() + y * other.getY() + z * other.getZ();
}
@Override
public Vector3 normalize() {
return this.multiply(this.inverseLength());
}
@Override
public Vector3 subtract(int x, int y, int z) {
this.x -= x;
this.y -= y;
this.z -= z;
return this;
}
@Override
public Vector3 subtract(Vector3 end) {
x -= end.getX();
y -= end.getY();
z -= end.getZ();
return this;
}
/**
* Returns a hash code for this vector
*
* @return hash code
*/
@Override
public int hashCode() {
int hash = 7;
hash = 79 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32));
return hash;
}
/**
* Checks to see if two objects are equal.
* <p>
* Only two Vectors can ever return true. This method uses a fuzzy match
* to account for floating point errors. The epsilon can be retrieved
* with epsilon.
*/
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Vector3)) return false;
Vector3 other = (Vector3) obj;
return MathUtil.equals(x, other.getX()) && MathUtil.equals(y, other.getY()) && MathUtil.equals(z, other.getZ());
}
@Override
public String toString() {
return "(" + getX() + ", " + getY() + ", " + getZ() + ")";
}
}

View File

@@ -24,7 +24,6 @@ import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
import com.dfsek.terra.api.world.palette.PaletteImpl;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.vector.Vector3Impl;
import com.dfsek.terra.world.Carver;
import com.dfsek.terra.world.carving.NoiseCarver;
import com.dfsek.terra.world.generation.math.samplers.Sampler3D;
@@ -108,20 +107,20 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
data = PaletteUtil.getPalette(x, y, z, c, sampler).get(paletteLevel, cx, y, cz);
chunk.setBlock(x, y, z, data);
if(paletteLevel == 0 && c.doSlabs() && y < 255) {
prepareBlockPartFloor(data, chunk.getBlock(x, y + 1, z), chunk, new Vector3Impl(x, y + 1, z), c.getSlabPalettes(),
prepareBlockPartFloor(data, chunk.getBlock(x, y + 1, z), chunk, new Vector3(x, y + 1, z), c.getSlabPalettes(),
c.getStairPalettes(), c.getSlabThreshold(), sampler);
}
paletteLevel++;
} else if(y <= sea) {
chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, y, z + zOrig));
if(justSet && c.doSlabs()) {
prepareBlockPartCeiling(data, chunk.getBlock(x, y, z), chunk, new Vector3Impl(x, y, z), c.getSlabPalettes(), c.getStairPalettes(), c.getSlabThreshold(), sampler);
prepareBlockPartCeiling(data, chunk.getBlock(x, y, z), chunk, new Vector3(x, y, z), c.getSlabPalettes(), c.getStairPalettes(), c.getSlabThreshold(), sampler);
}
justSet = false;
paletteLevel = 0;
} else {
if(justSet && c.doSlabs()) {
prepareBlockPartCeiling(data, chunk.getBlock(x, y, z), chunk, new Vector3Impl(x, y, z), c.getSlabPalettes(), c.getStairPalettes(), c.getSlabThreshold(), sampler);
prepareBlockPartCeiling(data, chunk.getBlock(x, y, z), chunk, new Vector3(x, y, z), c.getSlabPalettes(), c.getStairPalettes(), c.getSlabThreshold(), sampler);
}
justSet = false;
paletteLevel = 0;

View File

@@ -5,7 +5,6 @@ import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.HashMap;
@@ -68,7 +67,7 @@ public class ChunkInterpolator2D implements ChunkInterpolator {
}
public double computeNoise(Generator generator, double x, double y, double z) {
return noiseGetter.apply(generator, new Vector3Impl(x, y, z));
return noiseGetter.apply(generator, new Vector3(x, y, z));
}
/**

View File

@@ -5,7 +5,6 @@ import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.HashMap;
@@ -83,7 +82,7 @@ public class ChunkInterpolator3D implements ChunkInterpolator {
}
public double computeNoise(Generator generator, double x, double y, double z) {
return noiseGetter.apply(generator, new Vector3Impl(x, y, z));
return noiseGetter.apply(generator, new Vector3(x, y, z));
}
private static int reRange(int value, int high) {

View File

@@ -4,6 +4,7 @@ import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.World;
@@ -11,7 +12,6 @@ import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.vector.Vector3Impl;
import org.jetbrains.annotations.NotNull;
import java.util.Random;
@@ -44,7 +44,7 @@ public class OrePopulator implements TerraBlockPopulator {
try(ProfileFrame ignored = main.getProfiler().profile("ore:" + id)) {
int amount = orePair.getRight().getAmount().get(random);
for(int i = 0; i < amount; i++) {
Vector3Impl location = new Vector3Impl(random.nextInt(16) + 16 * finalCx, orePair.getRight().getHeight().get(random), random.nextInt(16) + 16 * finalCz);
Vector3 location = new Vector3(random.nextInt(16) + 16 * finalCx, orePair.getRight().getHeight().get(random), random.nextInt(16) + 16 * finalCz);
orePair.getLeft().generate(location, chunk, random);
}
}

View File

@@ -12,7 +12,6 @@ import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.Flora;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.generator.Palette;
import com.dfsek.terra.vector.Vector3Impl;
import net.jafama.FastMath;
import java.util.ArrayList;
@@ -59,7 +58,7 @@ public class TerraFlora implements Flora {
@Override
public List<Vector3> getValidSpawnsAt(Chunk chunk, int x, int z, Range range) {
int size = floraPalette.getSize();
Vector3 current = new Vector3Impl(x, search.equals(Search.UP) ? range.getMin() : range.getMax(), z);
Vector3 current = new Vector3(x, search.equals(Search.UP) ? range.getMin() : range.getMax(), z);
List<Vector3> blocks = new ArrayList<>();
int cx = chunk.getX() << 4;
int cz = chunk.getZ() << 4;

View File

@@ -4,8 +4,8 @@ import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.util.collections.MaterialSet;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.vector.Vector3Impl;
import java.util.Map;
import java.util.Random;
@@ -26,7 +26,7 @@ public abstract class Ore {
this.materials = materials;
}
public abstract void generate(Vector3Impl origin, Chunk c, Random r);
public abstract void generate(Vector3 origin, Chunk c, Random r);
public BlockState getMaterial(BlockType replace) {
return materials.getOrDefault(replace, material);

Some files were not shown because too many files have changed in this diff Show More