refactor, cleanup, and perf improvements

This commit is contained in:
dfsek
2021-01-05 19:21:42 -07:00
parent 4ad2db3ca8
commit 47cad8a30b
98 changed files with 178 additions and 305 deletions
@@ -1,4 +0,0 @@
package com.dfsek.terra;
public interface CommandHandler {
}
@@ -13,7 +13,6 @@ public class TerraProfiler extends WorldProfiler {
.addMeasurement(new Measurement(10000000, DataType.PERIOD_MILLISECONDS), "TreeTime") .addMeasurement(new Measurement(10000000, DataType.PERIOD_MILLISECONDS), "TreeTime")
.addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "OreTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "OreTime")
.addMeasurement(new Measurement(5000000, DataType.PERIOD_MILLISECONDS), "CaveTime") .addMeasurement(new Measurement(5000000, DataType.PERIOD_MILLISECONDS), "CaveTime")
.addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructureTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructureTime");
.addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "ElevationTime");
} }
} }
@@ -1,6 +1,7 @@
package com.dfsek.terra.api; package com.dfsek.terra.api;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.math.GridSpawn;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
@@ -22,14 +23,13 @@ import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader; import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
import com.dfsek.terra.config.loaders.palette.PaletteLayerLoader; import com.dfsek.terra.config.loaders.palette.PaletteLayerLoader;
import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.generation.config.NoiseBuilder;
import com.dfsek.terra.generation.items.flora.FloraLayer;
import com.dfsek.terra.generation.items.flora.TerraFlora;
import com.dfsek.terra.generation.items.ores.Ore;
import com.dfsek.terra.generation.items.ores.OreConfig;
import com.dfsek.terra.generation.items.ores.OreHolder;
import com.dfsek.terra.generation.items.tree.TreeLayer;
import com.dfsek.terra.image.ImageLoader; import com.dfsek.terra.image.ImageLoader;
import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.population.items.flora.FloraLayer;
import com.dfsek.terra.population.items.flora.TerraFlora;
import com.dfsek.terra.population.items.ores.Ore;
import com.dfsek.terra.population.items.ores.OreConfig;
import com.dfsek.terra.population.items.ores.OreHolder;
import com.dfsek.terra.population.items.tree.TreeLayer;
import com.dfsek.terra.util.MaterialSet; import com.dfsek.terra.util.MaterialSet;
public class GenericLoaders implements LoaderRegistrar { public class GenericLoaders implements LoaderRegistrar {
@@ -51,7 +51,7 @@ public class GenericLoaders implements LoaderRegistrar {
.registerLoader(Ore.Type.class, (t, o, l) -> Ore.Type.valueOf((String) o)) .registerLoader(Ore.Type.class, (t, o, l) -> Ore.Type.valueOf((String) o))
.registerLoader(OreConfig.class, new OreConfigLoader()) .registerLoader(OreConfig.class, new OreConfigLoader())
.registerLoader(NoiseBuilder.class, new NoiseBuilderLoader()) .registerLoader(NoiseBuilder.class, new NoiseBuilderLoader())
.registerLoader(TreeLayer.class, new TreeLayerLoader(main)) .registerLoader(TreeLayer.class, new TreeLayerLoader())
.registerLoader(MaterialSet.class, new MaterialSetLoader()) .registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(OreHolder.class, new OreHolderLoader()) .registerLoader(OreHolder.class, new OreHolderLoader())
.registerLoader(ImageLoader.class, new ImageLoaderLoader()) .registerLoader(ImageLoader.class, new ImageLoaderLoader())
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.lang; package com.dfsek.terra.api.language;
import com.dfsek.tectonic.config.Configuration; import com.dfsek.tectonic.config.Configuration;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.lang; package com.dfsek.terra.api.language;
import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.CommandSender;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.lang; package com.dfsek.terra.api.language;
import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.CommandSender;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.lang; package com.dfsek.terra.api.language;
import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.CommandSender;
@@ -1,6 +1,5 @@
package com.dfsek.terra.procgen; package com.dfsek.terra.api.math;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
@@ -1,6 +1,7 @@
package com.dfsek.terra.api.math; package com.dfsek.terra.api.math;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.generation.math.Sampler;
import net.jafama.FastMath; import net.jafama.FastMath;
import java.util.Random; import java.util.Random;
@@ -9,7 +10,14 @@ import java.util.Random;
* Utility class for mathematical functions. * Utility class for mathematical functions.
*/ */
public final class MathUtil { public final class MathUtil {
private static final double EPSILON = 0.1E-5; /**
* Epsilon for fuzzy floating point comparisons.
*/
public static final double EPSILON = 1.0E-5;
/**
* Derivative constant.
*/
private static final double DERIVATIVE_DIST = 0.55;
/** /**
* Gets the standard deviation of an array of doubles. * Gets the standard deviation of an array of doubles.
@@ -68,4 +76,17 @@ public final class MathUtil {
public static boolean equals(double a, double b) { public static boolean equals(double a, double b) {
return a == b || FastMath.abs(a - b) < EPSILON; return a == b || FastMath.abs(a - b) < EPSILON;
} }
public static double derivative(Sampler sampler, double x, double y, double z) {
double baseSample = sampler.sample(x, y, z);
double xVal1 = (sampler.sample(x + DERIVATIVE_DIST, y, z) - baseSample) / DERIVATIVE_DIST;
double xVal2 = (sampler.sample(x - DERIVATIVE_DIST, y, z) - baseSample) / DERIVATIVE_DIST;
double zVal1 = (sampler.sample(x, y, z + DERIVATIVE_DIST) - baseSample) / DERIVATIVE_DIST;
double zVal2 = (sampler.sample(x, y, z - DERIVATIVE_DIST) - baseSample) / DERIVATIVE_DIST;
double yVal1 = (sampler.sample(x, y + DERIVATIVE_DIST, z) - baseSample) / DERIVATIVE_DIST;
double yVal2 = (sampler.sample(x, y - DERIVATIVE_DIST, z) - baseSample) / DERIVATIVE_DIST;
return Math.sqrt(((xVal2 - xVal1) * (xVal2 - xVal1)) + ((zVal2 - zVal1) * (zVal2 - zVal1)) + ((yVal2 - yVal1) * (yVal2 - yVal1)));
}
} }
@@ -1,5 +1,6 @@
package com.dfsek.terra.api.math; package com.dfsek.terra.api.math;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.world.biome.NormalizationUtil; import com.dfsek.terra.api.world.biome.NormalizationUtil;
import java.util.HashSet; import java.util.HashSet;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.math;// MIT License package com.dfsek.terra.api.math.noise;// MIT License
import net.jafama.FastMath; import net.jafama.FastMath;
@@ -58,6 +58,7 @@ perform a file-wide replace on the following strings (including / * FNLdouble *
/ *FNLdouble* / double / *FNLdouble* / double
*/ */
@SuppressWarnings("ManualMinMaxCalculation")
public class FastNoiseLite { public class FastNoiseLite {
private static final double[] Gradients2D = { private static final double[] Gradients2D = {
0.130526192220052f, 0.99144486137381f, 0.38268343236509f, 0.923879532511287f, 0.608761429008721f, 0.793353340291235f, 0.130526192220052f, 0.99144486137381f, 0.38268343236509f, 0.923879532511287f, 0.608761429008721f, 0.793353340291235f,
@@ -328,14 +329,14 @@ public class FastNoiseLite {
private TransformType3D mWarpTransformType3D = TransformType3D.DefaultOpenSimplex2; private TransformType3D mWarpTransformType3D = TransformType3D.DefaultOpenSimplex2;
private double mDomainWarpAmp = 1.0f; private double mDomainWarpAmp = 1.0f;
private static final com.dfsek.terra.api.math.FastNoiseLite CELLULAR_LOOKUP_DEFAULT = new com.dfsek.terra.api.math.FastNoiseLite(); private static final FastNoiseLite CELLULAR_LOOKUP_DEFAULT = new FastNoiseLite();
private com.dfsek.terra.api.math.FastNoiseLite cellularNoiseLookup = CELLULAR_LOOKUP_DEFAULT; private FastNoiseLite cellularNoiseLookup = CELLULAR_LOOKUP_DEFAULT;
public com.dfsek.terra.api.math.FastNoiseLite getCellularNoiseLookup() { public FastNoiseLite getCellularNoiseLookup() {
return cellularNoiseLookup; return cellularNoiseLookup;
} }
public void setCellularNoiseLookup(com.dfsek.terra.api.math.FastNoiseLite cellularNoiseLookup) { public void setCellularNoiseLookup(FastNoiseLite cellularNoiseLookup) {
this.cellularNoiseLookup = cellularNoiseLookup; this.cellularNoiseLookup = cellularNoiseLookup;
} }
@@ -1442,7 +1443,6 @@ public class FastNoiseLite {
if (mCellularDistanceFunction == CellularDistanceFunction.Euclidean && mCellularReturnType != CellularReturnType.CellValue) { if (mCellularDistanceFunction == CellularDistanceFunction.Euclidean && mCellularReturnType != CellularReturnType.CellValue) {
distance0 = FastSqrt(distance0); distance0 = FastSqrt(distance0);
//noinspection ConstantConditions
if (mCellularReturnType != CellularReturnType.CellValue) { if (mCellularReturnType != CellularReturnType.CellValue) {
distance1 = FastSqrt(distance1); distance1 = FastSqrt(distance1);
} }
@@ -1593,8 +1593,6 @@ public class FastNoiseLite {
if (mCellularDistanceFunction == CellularDistanceFunction.Euclidean && mCellularReturnType != CellularReturnType.CellValue) { if (mCellularDistanceFunction == CellularDistanceFunction.Euclidean && mCellularReturnType != CellularReturnType.CellValue) {
distance0 = FastSqrt(distance0); distance0 = FastSqrt(distance0);
//noinspection ConstantConditions
if (mCellularReturnType != CellularReturnType.CellValue) { if (mCellularReturnType != CellularReturnType.CellValue) {
distance1 = FastSqrt(distance1); distance1 = FastSqrt(distance1);
} }
@@ -1,4 +1,4 @@
package com.dfsek.terra.math; package com.dfsek.terra.api.math.noise;
import parsii.eval.Function; import parsii.eval.Function;
@@ -1,6 +1,5 @@
package com.dfsek.terra.math; package com.dfsek.terra.api.math.noise;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.generation.config.NoiseBuilder;
import com.dfsek.terra.util.hash.HashMapDoubleDouble; import com.dfsek.terra.util.hash.HashMapDoubleDouble;
import parsii.eval.Expression; import parsii.eval.Expression;
@@ -1,6 +1,5 @@
package com.dfsek.terra.math; package com.dfsek.terra.api.math.noise;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.generation.config.NoiseBuilder;
import parsii.eval.Expression; import parsii.eval.Expression;
@@ -1,4 +1,4 @@
package com.dfsek.terra.math; package com.dfsek.terra.api.math.parsii;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Function; import parsii.eval.Function;
@@ -1,4 +1,4 @@
package com.dfsek.terra.math; package com.dfsek.terra.api.math.parsii;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import parsii.eval.Expression; import parsii.eval.Expression;
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.pixel; package com.dfsek.terra.api.math.pixel;
public class Distribution { public class Distribution {
public Distribution(Rectangle bound, int numPoints, double minRad) { public Distribution(Rectangle bound, int numPoints, double minRad) {
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.pixel; package com.dfsek.terra.api.math.pixel;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.pixel; package com.dfsek.terra.api.math.pixel;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
import net.jafama.FastMath; import net.jafama.FastMath;
@@ -163,6 +163,6 @@ public class Location implements Cloneable {
@Override @Override
public String toString() { public String toString() {
return "(" + getX() + ", " + getY() + ", " + getZ() + ")"; return "[" + world + ": (" + getX() + ", " + getY() + ", " + getZ() + ")]";
} }
} }
@@ -1,5 +1,6 @@
package com.dfsek.terra.api.math.vector; package com.dfsek.terra.api.math.vector;
import com.dfsek.terra.api.math.MathUtil;
import net.jafama.FastMath; import net.jafama.FastMath;
/** /**
@@ -157,11 +158,9 @@ public class Vector2 implements Cloneable {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if(!(obj instanceof Vector2)) { if(!(obj instanceof Vector2)) return false;
return false;
}
Vector2 other = (Vector2) obj; Vector2 other = (Vector2) obj;
return other.x == this.x && other.z == this.z; return MathUtil.equals(this.x, other.x) && MathUtil.equals(this.z, other.z);
} }
@Override @Override
@@ -1,15 +1,12 @@
package com.dfsek.terra.api.math.vector; package com.dfsek.terra.api.math.vector;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.World;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class Vector3 implements Cloneable { public class Vector3 implements Cloneable {
/**
* Threshold for fuzzy equals().
*/
private static final double epsilon = 0.000001;
private double x; private double x;
private double y; private double y;
@@ -21,15 +18,6 @@ public class Vector3 implements Cloneable {
this.z = z; this.z = z;
} }
/**
* Get the threshold used for equals().
*
* @return The epsilon.
*/
public static double getEpsilon() {
return epsilon;
}
public double getZ() { public double getZ() {
return z; return z;
} }
@@ -119,7 +107,7 @@ public class Vector3 implements Cloneable {
* @return whether the vector is normalised * @return whether the vector is normalised
*/ */
public boolean isNormalized() { public boolean isNormalized() {
return Math.abs(this.lengthSquared() - 1) < getEpsilon(); return MathUtil.equals(this.lengthSquared(), 1);
} }
/** /**
@@ -333,12 +321,14 @@ public class Vector3 implements Cloneable {
*/ */
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if(!(obj instanceof Vector3)) { if(!(obj instanceof Vector3)) return false;
return false;
}
Vector3 other = (Vector3) obj; Vector3 other = (Vector3) obj;
return MathUtil.equals(x, other.x) && MathUtil.equals(y, other.y) && MathUtil.equals(x, other.z);
return Math.abs(x - other.x) < epsilon && Math.abs(y - other.y) < epsilon && Math.abs(z - other.z) < epsilon && (this.getClass().equals(obj.getClass()));
} }
@Override
public String toString() {
return "(" + getX() + ", " + getY() + ", " + getZ() + ")";
}
} }
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.api.math.voxel;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
@@ -1,6 +1,6 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.api.math.voxel;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
public class DeformedSphere extends VoxelGeometry { public class DeformedSphere extends VoxelGeometry {
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.api.math.voxel;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.api.math.voxel;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
@@ -1,4 +1,4 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.api.math.voxel;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
@@ -2,7 +2,7 @@ package com.dfsek.terra.api.platform;
import com.dfsek.terra.TerraWorld; import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.LoaderRegistrar; import com.dfsek.terra.api.LoaderRegistrar;
import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.ItemHandle;
import com.dfsek.terra.api.platform.handle.WorldHandle; import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.World;
@@ -15,10 +15,7 @@ public class WorldProfiler {
public WorldProfiler(World w) { public WorldProfiler(World w) {
if(w.getGenerator().getTerraGenerator() == null) if(w.getGenerator().getTerraGenerator() == null)
throw new IllegalArgumentException("Attempted to instantiate profiler on non-Gaea managed world!"); throw new IllegalArgumentException("Attempted to instantiate profiler on non-Gaea managed world!");
this.addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "TotalChunkGenTime") this.addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "TotalChunkGenTime");
.addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "ChunkBaseGenTime")
.addMeasurement(new Measurement(2000000, DataType.PERIOD_MILLISECONDS), "BiomeApplyTime")
.addMeasurement(new Measurement(2000000, DataType.PERIOD_MILLISECONDS), "PopulationManagerTime");
isProfiling = false; isProfiling = false;
this.world = w; this.world = w;
} }
@@ -34,6 +34,7 @@ import org.apache.commons.io.IOUtils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collections;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
@@ -42,7 +43,7 @@ public class StructureScript {
private final Block block; private final Block block;
private final String id; private final String id;
String tempID; String tempID;
private final LinkedHashMap<Location, StructureBuffer> cache; private final Map<Location, StructureBuffer> cache;
public StructureScript(InputStream inputStream, TerraPlugin main, ScriptRegistry registry, LootRegistry lootRegistry, SamplerCache cache) throws ParseException { public StructureScript(InputStream inputStream, TerraPlugin main, ScriptRegistry registry, LootRegistry lootRegistry, SamplerCache cache) throws ParseException {
Parser parser; Parser parser;
@@ -79,12 +80,12 @@ public class StructureScript {
block = parser.parse(); block = parser.parse();
this.id = parser.getID(); this.id = parser.getID();
tempID = id; tempID = id;
this.cache = new LinkedHashMap<Location, StructureBuffer>() { this.cache = Collections.synchronizedMap(new LinkedHashMap<Location, StructureBuffer>() {
@Override @Override
protected boolean removeEldestEntry(Map.Entry<Location, StructureBuffer> eldest) { protected boolean removeEldestEntry(Map.Entry<Location, StructureBuffer> eldest) {
return this.size() > main.getTerraConfig().getStructureCache(); return this.size() > main.getTerraConfig().getStructureCache();
} }
}; });
} }
/** /**
@@ -113,12 +114,14 @@ public class StructureScript {
} }
private StructureBuffer computeBuffer(Location location, Random random, Rotation rotation) { private StructureBuffer computeBuffer(Location location, Random random, Rotation rotation) {
return cache.computeIfAbsent(location, loc -> { synchronized(cache) {
StructureBuffer buf = new StructureBuffer(loc); return cache.computeIfAbsent(location, loc -> {
Block.ReturnInfo<?> level = block.apply(new TerraImplementationArguments(buf, rotation, random, 0)); StructureBuffer buf = new StructureBuffer(loc);
buf.setSucceeded(!level.getLevel().equals(Block.ReturnLevel.FAIL)); Block.ReturnInfo<?> level = block.apply(new TerraImplementationArguments(buf, rotation, random, 0));
return buf; buf.setSucceeded(!level.getLevel().equals(Block.ReturnLevel.FAIL));
}); return buf;
});
}
} }
public boolean executeInBuffer(Buffer buffer, Random random, Rotation rotation, int recursions) { public boolean executeInBuffer(Buffer buffer, Random random, Rotation rotation, int recursions) {
@@ -1,6 +1,6 @@
package com.dfsek.terra.api.world.biome; package com.dfsek.terra.api.world.biome;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.world.generation.GenerationPhase; import com.dfsek.terra.api.world.generation.GenerationPhase;
@@ -1,7 +1,7 @@
package com.dfsek.terra.api.world.palette; package com.dfsek.terra.api.world.palette;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
import java.util.List; import java.util.List;
@@ -1,6 +1,6 @@
package com.dfsek.terra.api.world.palette; package com.dfsek.terra.api.world.palette;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import java.util.List; import java.util.List;
@@ -8,7 +8,7 @@ import com.dfsek.terra.api.structures.structure.Rotation;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -1,6 +1,6 @@
package com.dfsek.terra.biome; package com.dfsek.terra.biome;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.world.biome.BiomeGrid; import com.dfsek.terra.api.world.biome.BiomeGrid;
import com.dfsek.terra.api.world.biome.NormalizationUtil; import com.dfsek.terra.api.world.biome.NormalizationUtil;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
@@ -1,6 +1,6 @@
package com.dfsek.terra.biome.postprocessing; package com.dfsek.terra.biome.postprocessing;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
/** /**
@@ -1,6 +1,6 @@
package com.dfsek.terra.biome.postprocessing; package com.dfsek.terra.biome.postprocessing;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import net.jafama.FastMath; import net.jafama.FastMath;
/** /**
@@ -1,6 +1,7 @@
package com.dfsek.terra.carving; package com.dfsek.terra.carving;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.parsii.RandomFunction;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.World;
@@ -11,7 +12,6 @@ import com.dfsek.terra.api.world.generation.GenerationPhase;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate; import com.dfsek.terra.config.templates.CarverTemplate;
import com.dfsek.terra.math.RandomFunction;
import net.jafama.FastMath; import net.jafama.FastMath;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Parser; import parsii.eval.Parser;
@@ -1,5 +0,0 @@
package com.dfsek.terra.command;
public class Command {
}
@@ -40,9 +40,9 @@ import com.dfsek.terra.config.templates.OreTemplate;
import com.dfsek.terra.config.templates.PaletteTemplate; import com.dfsek.terra.config.templates.PaletteTemplate;
import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.config.templates.StructureTemplate;
import com.dfsek.terra.config.templates.TreeTemplate; import com.dfsek.terra.config.templates.TreeTemplate;
import com.dfsek.terra.generation.items.TerraStructure;
import com.dfsek.terra.generation.items.ores.Ore;
import com.dfsek.terra.generation.math.SamplerCache; import com.dfsek.terra.generation.math.SamplerCache;
import com.dfsek.terra.population.items.TerraStructure;
import com.dfsek.terra.population.items.ores.Ore;
import com.dfsek.terra.registry.BiomeGridRegistry; import com.dfsek.terra.registry.BiomeGridRegistry;
import com.dfsek.terra.registry.BiomeRegistry; import com.dfsek.terra.registry.BiomeRegistry;
import com.dfsek.terra.registry.CarverRegistry; import com.dfsek.terra.registry.CarverRegistry;
@@ -8,7 +8,7 @@ import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.palette.RandomPalette; import com.dfsek.terra.api.world.palette.RandomPalette;
import com.dfsek.terra.biome.palette.PaletteLayer; import com.dfsek.terra.biome.palette.PaletteLayer;
import com.dfsek.terra.config.templates.FloraTemplate; import com.dfsek.terra.config.templates.FloraTemplate;
import com.dfsek.terra.generation.items.flora.TerraFlora; import com.dfsek.terra.population.items.flora.TerraFlora;
public class FloraFactory implements TerraFactory<FloraTemplate, Flora> { public class FloraFactory implements TerraFactory<FloraTemplate, Flora> {
@Override @Override
@@ -3,9 +3,9 @@ package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.config.templates.OreTemplate; import com.dfsek.terra.config.templates.OreTemplate;
import com.dfsek.terra.generation.items.ores.DeformedSphereOre; import com.dfsek.terra.population.items.ores.DeformedSphereOre;
import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.population.items.ores.Ore;
import com.dfsek.terra.generation.items.ores.VanillaOre; import com.dfsek.terra.population.items.ores.VanillaOre;
public class OreFactory implements TerraFactory<OreTemplate, Ore> { public class OreFactory implements TerraFactory<OreTemplate, Ore> {
@Override @Override
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
@@ -1,13 +1,12 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.config.templates.StructureTemplate;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
public class StructureFactory implements TerraFactory<StructureTemplate, TerraStructure> { public class StructureFactory implements TerraFactory<StructureTemplate, TerraStructure> {
@Override @Override
public TerraStructure build(StructureTemplate config, TerraPlugin main) throws LoadException { public TerraStructure build(StructureTemplate config, TerraPlugin main) {
return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn(), config); return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn(), config);
} }
} }
@@ -1,14 +1,13 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.world.tree.Tree; import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.config.templates.TreeTemplate; import com.dfsek.terra.config.templates.TreeTemplate;
import com.dfsek.terra.generation.items.tree.TerraTree; import com.dfsek.terra.population.items.tree.TerraTree;
public class TreeFactory implements TerraFactory<TreeTemplate, Tree> { public class TreeFactory implements TerraFactory<TreeTemplate, Tree> {
@Override @Override
public Tree build(TreeTemplate config, TerraPlugin main) throws LoadException { public Tree build(TreeTemplate config, TerraPlugin main) {
return new TerraTree(config.getSpawnable(), config.getyOffset(), config.getStructures()); return new TerraTree(config.getSpawnable(), config.getyOffset(), config.getStructures());
} }
} }
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.lang; package com.dfsek.terra.config.lang;
import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.CommandSender;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.debug.Debug; import com.dfsek.terra.debug.Debug;
@@ -18,8 +18,7 @@ public class MaterialSetLoader implements TypeLoader<MaterialSet> {
for(String string : stringData) { for(String string : stringData) {
try { try {
if(string.startsWith("#")) set.addTag(string.substring(1)); set.add((MaterialData) configLoader.loadType(MaterialData.class, string));
else set.add((MaterialData) configLoader.loadType(MaterialData.class, string));
} catch(NullPointerException e) { } catch(NullPointerException e) {
throw new LoadException("Invalid data identifier \"" + string + "\"", e); throw new LoadException("Invalid data identifier \"" + string + "\"", e);
} }
@@ -3,12 +3,12 @@ package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.world.flora.Flora; import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.config.loaders.Types; import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.generation.items.flora.FloraLayer; import com.dfsek.terra.population.items.flora.FloraLayer;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@@ -2,7 +2,7 @@ package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.api.math.GridSpawn;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@@ -5,7 +5,7 @@ import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.generation.config.NoiseBuilder;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@@ -1,10 +1,9 @@
package com.dfsek.terra.config.loaders.config; package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.generation.items.ores.OreConfig; import com.dfsek.terra.population.items.ores.OreConfig;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@@ -12,7 +11,7 @@ import java.util.Map;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class OreConfigLoader implements TypeLoader<OreConfig> { public class OreConfigLoader implements TypeLoader<OreConfig> {
@Override @Override
public OreConfig load(Type type, Object o, ConfigLoader configLoader) throws LoadException { public OreConfig load(Type type, Object o, ConfigLoader configLoader) {
Map<String, Integer> map = (Map<String, Integer>) o; Map<String, Integer> map = (Map<String, Integer>) o;
Range amount = new Range(map.get("min"), map.get("max")); Range amount = new Range(map.get("min"), map.get("max"));
Range height = new Range(map.get("min-height"), map.get("max-height")); Range height = new Range(map.get("min-height"), map.get("max-height"));
@@ -3,9 +3,9 @@ package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.population.items.ores.Ore;
import com.dfsek.terra.generation.items.ores.OreConfig; import com.dfsek.terra.population.items.ores.OreConfig;
import com.dfsek.terra.generation.items.ores.OreHolder; import com.dfsek.terra.population.items.ores.OreHolder;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@@ -3,23 +3,20 @@ package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.world.tree.Tree; import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.config.loaders.Types; import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.generation.items.tree.TreeLayer; import com.dfsek.terra.population.items.tree.TreeLayer;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class TreeLayerLoader implements TypeLoader<TreeLayer> { public class TreeLayerLoader implements TypeLoader<TreeLayer> {
private final TerraPlugin main;
public TreeLayerLoader(TerraPlugin main) { public TreeLayerLoader() {
this.main = main;
} }
@Override @Override
@@ -5,6 +5,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ValidatedConfigTemplate; import com.dfsek.tectonic.config.ValidatedConfigTemplate;
import com.dfsek.tectonic.exception.ValidationException; import com.dfsek.tectonic.exception.ValidationException;
import com.dfsek.terra.api.math.parsii.BlankFunction;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.block.MaterialData;
@@ -15,11 +16,10 @@ import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.biome.palette.SinglePalette; import com.dfsek.terra.biome.palette.SinglePalette;
import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import com.dfsek.terra.generation.items.flora.FloraLayer; import com.dfsek.terra.population.items.flora.FloraLayer;
import com.dfsek.terra.generation.items.ores.OreHolder; import com.dfsek.terra.population.items.ores.OreHolder;
import com.dfsek.terra.generation.items.tree.TreeLayer; import com.dfsek.terra.population.items.tree.TreeLayer;
import com.dfsek.terra.math.BlankFunction;
import parsii.eval.Parser; import parsii.eval.Parser;
import parsii.eval.Scope; import parsii.eval.Scope;
import parsii.tokenizer.ParseException; import parsii.tokenizer.ParseException;
@@ -4,7 +4,7 @@ import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.biome.palette.PaletteLayer; import com.dfsek.terra.biome.palette.PaletteLayer;
import com.dfsek.terra.generation.items.flora.TerraFlora; import com.dfsek.terra.population.items.flora.TerraFlora;
import com.dfsek.terra.util.MaterialSet; import com.dfsek.terra.util.MaterialSet;
import java.util.List; import java.util.List;
@@ -5,7 +5,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.population.items.ores.Ore;
import com.dfsek.terra.util.MaterialSet; import com.dfsek.terra.util.MaterialSet;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
@@ -4,11 +4,11 @@ import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.api.math.GridSpawn;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.procgen.GridSpawn;
import java.util.List; import java.util.List;
@@ -90,7 +90,6 @@ public class MasterChunkGenerator implements TerraChunkGenerator {
TerraWorld tw = main.getWorld(world); TerraWorld tw = main.getWorld(world);
com.dfsek.terra.api.world.biome.BiomeGrid grid = tw.getGrid(); com.dfsek.terra.api.world.biome.BiomeGrid grid = tw.getGrid();
try(ProfileFuture ignore = tw.getProfiler().measure("TotalChunkGenTime")) { try(ProfileFuture ignore = tw.getProfiler().measure("TotalChunkGenTime")) {
try(ProfileFuture ignored = tw.getProfiler().measure("ChunkBaseGenTime")) {
if(!tw.isSafe()) return chunk; if(!tw.isSafe()) return chunk;
int xOrig = (chunkX << 4); int xOrig = (chunkX << 4);
int zOrig = (chunkZ << 4); int zOrig = (chunkZ << 4);
@@ -139,8 +138,6 @@ public class MasterChunkGenerator implements TerraChunkGenerator {
} }
} }
} }
}
return chunk; return chunk;
} }
} }
@@ -3,7 +3,7 @@ package com.dfsek.terra.generation.config;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
public class NoiseBuilder implements ConfigTemplate { public class NoiseBuilder implements ConfigTemplate {
@Value("type") @Value("type")
@@ -1,12 +1,12 @@
package com.dfsek.terra.generation.config; package com.dfsek.terra.generation.config;
import com.dfsek.terra.api.math.noise.NoiseFunction2;
import com.dfsek.terra.api.math.noise.NoiseFunction3;
import com.dfsek.terra.api.math.parsii.RandomFunction;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.biome.palette.PaletteHolder; import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.math.NoiseFunction2;
import com.dfsek.terra.math.NoiseFunction3;
import com.dfsek.terra.math.RandomFunction;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Parser; import parsii.eval.Parser;
import parsii.eval.Scope; import parsii.eval.Scope;
@@ -3,6 +3,7 @@ package com.dfsek.terra.generation.math;
import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.generation.math.interpolation.ChunkInterpolator; import com.dfsek.terra.generation.math.interpolation.ChunkInterpolator;
import com.dfsek.terra.generation.math.interpolation.ElevationInterpolator;
import net.jafama.FastMath; import net.jafama.FastMath;
public class Sampler { public class Sampler {
@@ -1,10 +1,9 @@
package com.dfsek.terra.generation.math; package com.dfsek.terra.generation.math.interpolation;
import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.world.biome.BiomeGrid; import com.dfsek.terra.api.world.biome.BiomeGrid;
import com.dfsek.terra.api.world.generation.GenerationPhase; import com.dfsek.terra.api.world.generation.GenerationPhase;
import com.dfsek.terra.generation.config.WorldGenerator; import com.dfsek.terra.generation.config.WorldGenerator;
import com.dfsek.terra.generation.math.interpolation.Interpolator;
import net.jafama.FastMath; import net.jafama.FastMath;
public class ElevationInterpolator { public class ElevationInterpolator {
@@ -1,20 +0,0 @@
package com.dfsek.terra.math;
import com.dfsek.terra.generation.math.Sampler;
public final class MathUtil {
private static final double CONST = 0.55;
public static double derivative(Sampler sampler, double x, double y, double z) {
double baseSample = sampler.sample(x, y, z);
double xVal1 = (sampler.sample(x + CONST, y, z) - baseSample) / CONST;
double xVal2 = (sampler.sample(x - CONST, y, z) - baseSample) / CONST;
double zVal1 = (sampler.sample(x, y, z + CONST) - baseSample) / CONST;
double zVal2 = (sampler.sample(x, y, z - CONST) - baseSample) / CONST;
double yVal1 = (sampler.sample(x, y + CONST, z) - baseSample) / CONST;
double yVal2 = (sampler.sample(x, y - CONST, z) - baseSample) / CONST;
return Math.sqrt(((xVal2 - xVal1) * (xVal2 - xVal1)) + ((zVal2 - zVal1) * (zVal2 - zVal1)) + ((yVal2 - yVal1) * (yVal2 - yVal1)));
}
}
@@ -10,7 +10,7 @@ import com.dfsek.terra.api.world.generation.GenerationPhase;
import com.dfsek.terra.api.world.generation.TerraBlockPopulator; import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.generation.items.flora.FloraLayer; import com.dfsek.terra.population.items.flora.FloraLayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
@@ -13,7 +13,7 @@ import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -10,7 +10,7 @@ import com.dfsek.terra.api.world.generation.GenerationPhase;
import com.dfsek.terra.api.world.generation.TerraBlockPopulator; import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.generation.items.tree.TreeLayer; import com.dfsek.terra.population.items.tree.TreeLayer;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -1,8 +1,8 @@
package com.dfsek.terra.generation.items; package com.dfsek.terra.population.items;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.Chunk;
@@ -1,10 +1,10 @@
package com.dfsek.terra.generation.items; package com.dfsek.terra.population.items;
import com.dfsek.terra.api.math.GridSpawn;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.config.templates.StructureTemplate;
import com.dfsek.terra.procgen.GridSpawn;
public class TerraStructure { public class TerraStructure {
private final ProbabilityCollection<StructureScript> structure; private final ProbabilityCollection<StructureScript> structure;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.flora; package com.dfsek.terra.population.items.flora;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Location;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.flora; package com.dfsek.terra.population.items.flora;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Location;
@@ -1,12 +1,12 @@
package com.dfsek.terra.generation.items.flora; package com.dfsek.terra.population.items.flora;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.world.flora.Flora; import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.generation.items.PlaceableLayer; import com.dfsek.terra.population.items.PlaceableLayer;
import java.util.Random; import java.util.Random;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.flora; package com.dfsek.terra.population.items.flora;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Location;
@@ -1,7 +1,7 @@
package com.dfsek.terra.generation.items.ores; package com.dfsek.terra.population.items.ores;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.Block;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.ores; package com.dfsek.terra.population.items.ores;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.ores; package com.dfsek.terra.population.items.ores;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.ores; package com.dfsek.terra.population.items.ores;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.ores; package com.dfsek.terra.population.items.ores;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
@@ -1,4 +1,4 @@
package com.dfsek.terra.generation.items.tree; package com.dfsek.terra.population.items.tree;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Location;
@@ -1,14 +1,14 @@
package com.dfsek.terra.generation.items.tree; package com.dfsek.terra.population.items.tree;
import com.dfsek.terra.api.math.FastNoiseLite;
import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector2; import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.BlockFace;
import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.world.tree.Tree; import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.generation.items.PlaceableLayer; import com.dfsek.terra.population.items.PlaceableLayer;
import java.util.Random; import java.util.Random;
@@ -4,7 +4,7 @@ import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.world.flora.Flora; import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.generation.items.flora.ConstantFlora; import com.dfsek.terra.population.items.flora.ConstantFlora;
import com.dfsek.terra.util.MaterialSet; import com.dfsek.terra.util.MaterialSet;
import java.util.Arrays; import java.util.Arrays;
@@ -1,6 +1,6 @@
package com.dfsek.terra.registry; package com.dfsek.terra.registry;
import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.population.items.ores.Ore;
public class OreRegistry extends TerraRegistry<Ore> { public class OreRegistry extends TerraRegistry<Ore> {
} }
@@ -1,6 +1,6 @@
package com.dfsek.terra.registry; package com.dfsek.terra.registry;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
public class StructureRegistry extends TerraRegistry<TerraStructure> { public class StructureRegistry extends TerraRegistry<TerraStructure> {
} }
@@ -21,10 +21,6 @@ public class MaterialSet extends HashSet<MaterialData> {
return set; return set;
} }
public void addTag(String tag) {
this.addAll(TagUtil.getTag(tag));
}
private void add(BlockData data) { private void add(BlockData data) {
add(data.getMaterial()); add(data.getMaterial());
} }
@@ -1,11 +1,11 @@
package com.dfsek.terra.util; package com.dfsek.terra.util;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.biome.palette.PaletteHolder; import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.generation.math.Sampler; import com.dfsek.terra.generation.math.Sampler;
import com.dfsek.terra.math.MathUtil;
public final class PaletteUtil { public final class PaletteUtil {
public static Palette<BlockData> getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) { public static Palette<BlockData> getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) {
@@ -1,14 +0,0 @@
package com.dfsek.terra.util;
public final class StringUtils {
/**
* Strip Minecraft namespace from string
*
* @param in String to strip namespace of
* @return Stripped string/
*/
public static String stripMinecraftNamespace(String in) {
if(!in.startsWith("minecraft:")) return in;
return in.substring(10);
}
}
@@ -1,77 +0,0 @@
package com.dfsek.terra.util;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.debug.Debug;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@SuppressWarnings("unchecked")
public final class TagUtil {
private static final Map<String, Set<MaterialData>> tagMap;
static {
Debug.info("Loading tags...");
tagMap = new HashMap<>();
/*
Field[] tags = Tag.class.getFields(); // Add Bukkit tags
for(Field field : tags) {
if(Modifier.isStatic(field.getModifiers())) {
try {
Tag<Material> tag = (Tag<Material>) field.get(new Object());
tagMap.put(tag.getKey().toString(), tag.getValues());
} catch(IllegalAccessException e) {
e.printStackTrace();
} catch(ClassCastException ignore) {
}
}
}
putCustomSet("minecraft:base_stone_nether", Material.NETHERRACK, Material.BASALT, Material.BLACKSTONE);
putCustomSet("minecraft:base_stone_overworld", Material.STONE, Material.GRANITE, Material.DIORITE, Material.ANDESITE);
Set<Material> snow = new HashSet<>();
Set<Material> solid = new HashSet<>();
for(Material m : Material.values()) {
if(m.isSolid()) solid.add(m);
String name = m.toString().toLowerCase();
if(name.contains("slab")
|| name.contains("stair")
|| name.contains("wall")
|| name.contains("fence")
|| name.contains("lantern")
|| name.contains("chest")
|| name.contains("door")
|| name.contains("repeater")
|| name.equals("lily_pad")
|| name.equals("snow")
|| name.equals("pane")
|| !m.isSolid()) snow.add(m);
}
tagMap.put("com.dfsek.terra:snow_blacklist", snow);
tagMap.put("com.dfsek.terra:solid", solid);
Debug.info("Added " + snow.size() + " materials to snow blacklist");
Debug.info("Added " + solid.size() + " materials to solid list");
Debug.info("Loaded " + tagMap.size() + " tags.");
*/
}
private static Set<MaterialData> getSet(MaterialData... materials) {
return Stream.of(materials).collect(Collectors.toSet());
}
private static void putCustomSet(String key, MaterialData... materials) {
tagMap.put(key, getSet(materials));
}
@NotNull
public static Set<MaterialData> getTag(String tag) {
return Objects.requireNonNull(tagMap.get(tag));
}
}
@@ -3,7 +3,7 @@ package com.dfsek.terra.bukkit;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.TerraWorld; import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.GenericLoaders; import com.dfsek.terra.api.GenericLoaders;
import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.block.MaterialData;
@@ -30,7 +30,6 @@ import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.debug.Debug; import com.dfsek.terra.debug.Debug;
import com.dfsek.terra.generation.MasterChunkGenerator; import com.dfsek.terra.generation.MasterChunkGenerator;
import com.dfsek.terra.registry.ConfigRegistry; import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.util.StringUtils;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.TreeType; import org.bukkit.TreeType;
@@ -107,7 +106,7 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
.add("OAK", new BukkitTree(TreeType.TREE, this)) .add("OAK", new BukkitTree(TreeType.TREE, this))
.add("MEGA_SPRUCE", new BukkitTree(TreeType.MEGA_REDWOOD, this)) .add("MEGA_SPRUCE", new BukkitTree(TreeType.MEGA_REDWOOD, this))
.add("SWAMP_OAK", new BukkitTree(TreeType.SWAMP, this))) .add("SWAMP_OAK", new BukkitTree(TreeType.SWAMP, this)))
.addTransform(id -> new BukkitTree(TreeType.valueOf(StringUtils.stripMinecraftNamespace(id)), this)) // Finally, try stripping minecraft namespace. .addTransform(id -> new BukkitTree(TreeType.valueOf(id), this)) // Finally, try stripping minecraft namespace.
.build()); .build());
saveDefaultConfig(); saveDefaultConfig();
@@ -9,7 +9,7 @@ import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -1,13 +1,13 @@
package com.dfsek.terra.bukkit.command.command.geometry; package com.dfsek.terra.bukkit.command.command.geometry;
import com.dfsek.terra.api.math.FastNoiseLite; import com.dfsek.terra.api.math.noise.FastNoiseLite;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.math.voxel.DeformedSphere;
import com.dfsek.terra.bukkit.BukkitCommandSender; import com.dfsek.terra.bukkit.BukkitCommandSender;
import com.dfsek.terra.bukkit.BukkitPlayer; import com.dfsek.terra.bukkit.BukkitPlayer;
import com.dfsek.terra.bukkit.command.PlayerCommand; import com.dfsek.terra.bukkit.command.PlayerCommand;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.procgen.voxel.DeformedSphere;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -1,12 +1,12 @@
package com.dfsek.terra.bukkit.command.command.geometry; package com.dfsek.terra.bukkit.command.command.geometry;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.math.voxel.Sphere;
import com.dfsek.terra.bukkit.BukkitCommandSender; import com.dfsek.terra.bukkit.BukkitCommandSender;
import com.dfsek.terra.bukkit.BukkitPlayer; import com.dfsek.terra.bukkit.BukkitPlayer;
import com.dfsek.terra.bukkit.command.PlayerCommand; import com.dfsek.terra.bukkit.command.PlayerCommand;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.procgen.voxel.Sphere;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -1,13 +1,13 @@
package com.dfsek.terra.bukkit.command.command.geometry; package com.dfsek.terra.bukkit.command.command.geometry;
import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.math.voxel.Tube;
import com.dfsek.terra.bukkit.BukkitCommandSender; import com.dfsek.terra.bukkit.BukkitCommandSender;
import com.dfsek.terra.bukkit.command.PlayerCommand; import com.dfsek.terra.bukkit.command.PlayerCommand;
import com.dfsek.terra.bukkit.structure.WorldEditUtil; import com.dfsek.terra.bukkit.structure.WorldEditUtil;
import com.dfsek.terra.bukkit.util.BukkitConversions; import com.dfsek.terra.bukkit.util.BukkitConversions;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.procgen.voxel.Tube;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -7,7 +7,7 @@ import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import com.dfsek.terra.bukkit.command.WorldCommand; import com.dfsek.terra.bukkit.command.WorldCommand;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
@@ -32,7 +32,7 @@ public class LocateCommand extends WorldCommand {
super(parent); super(parent);
} }
@SuppressWarnings("DuplicatedCode") @SuppressWarnings({"DuplicatedCode", "deprecation"})
@Override @Override
public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
String id = args[0]; String id = args[0];
@@ -5,7 +5,7 @@ import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.async.AsyncStructureFinder; import com.dfsek.terra.async.AsyncStructureFinder;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.debug.Debug; import com.dfsek.terra.debug.Debug;
import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.population.items.TerraStructure;
import org.bukkit.entity.EnderSignal; import org.bukkit.entity.EnderSignal;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@@ -99,4 +99,9 @@ public class BukkitWorld implements World {
public int hashCode() { public int hashCode() {
return delegate.hashCode(); return delegate.hashCode();
} }
@Override
public String toString() {
return delegate.toString();
}
} }
@@ -97,7 +97,7 @@ public class BukkitMobSpawner extends BukkitBlockState implements MobSpawner {
SerialState.parse(state).forEach((k, v) -> { SerialState.parse(state).forEach((k, v) -> {
switch(k) { switch(k) {
case "type": case "type":
setSpawnedType(new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(v))); setSpawnedType(new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(v.toUpperCase())));
return; return;
case "delay": case "delay":
setDelay(Integer.parseInt(v)); setDelay(Integer.parseInt(v));
@@ -6,6 +6,6 @@ biome-search-resolution: 4
cache: cache:
carver: 512 carver: 512
structure: 32 structure: 32
sampler: 512 sampler: 128
master-disable: master-disable:
caves: false caves: false
@@ -3,7 +3,7 @@ package com.dfsek.terra.fabric;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.TerraWorld; import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.GenericLoaders; import com.dfsek.terra.api.GenericLoaders;
import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.block.MaterialData;
@@ -25,7 +25,6 @@ import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.features.PopulatorFeature; import com.dfsek.terra.fabric.world.features.PopulatorFeature;
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
import com.dfsek.terra.registry.ConfigRegistry; import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.util.StringUtils;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
@@ -82,7 +81,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
private File config; private File config;
private static final Transformer<String, ConfiguredFeature<?, ?>> TREE_TRANSFORMER = new Transformer.Builder<String, ConfiguredFeature<?, ?>>() private static final Transformer<String, ConfiguredFeature<?, ?>> TREE_TRANSFORMER = new Transformer.Builder<String, ConfiguredFeature<?, ?>>()
.addTransform(TerraFabricPlugin::getFeature) .addTransform(TerraFabricPlugin::getFeature)
.addTransform(id -> getFeature(StringUtils.stripMinecraftNamespace(id)))
.addTransform(new MapTransform<String, ConfiguredFeature<?, ?>>() .addTransform(new MapTransform<String, ConfiguredFeature<?, ?>>()
.add("BROWN_MUSHROOM", ConfiguredFeatures.BROWN_MUSHROOM_GIANT) .add("BROWN_MUSHROOM", ConfiguredFeatures.BROWN_MUSHROOM_GIANT)
.add("RED_MUSHROOM", ConfiguredFeatures.RED_MUSHROOM_GIANT) .add("RED_MUSHROOM", ConfiguredFeatures.RED_MUSHROOM_GIANT)
@@ -2,7 +2,7 @@ package com.dfsek.terra;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.GenericLoaders; import com.dfsek.terra.api.GenericLoaders;
import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.TerraPlugin; import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.block.MaterialData;