diff --git a/.gitignore b/.gitignore index 909ef81d5..6d85c9383 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,5 @@ build .idea/**.xml .idea/modules/**.iml -!lib/*.jar \ No newline at end of file +!lib/*.jar +.idea/Terra.iml diff --git a/build.gradle.kts b/build.gradle.kts index 4c4334e23..9b1740852 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,16 +39,23 @@ dependencies { compileOnly(name = "Gaea-${gaeaVersion}", group = "") testImplementation(name = "Gaea-${gaeaVersion}", group = "") - compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:20.1.0") + implementation("commons-io:commons-io:2.4") implementation("org.apache.commons:commons-imaging:1.0-alpha2") + implementation("org.apache.commons:commons-math3:3.6.1") + compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") implementation("org.bstats:bstats-bukkit:1.7") + compileOnly("com.googlecode.json-simple:json-simple:1.1") - implementation(name = "parsii-1.2", group = "") + + implementation(name = "parsii-1.2.1", group = "") + + compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") + // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") diff --git a/lib/parsii-1.2-javadoc.jar b/lib/parsii-1.2-javadoc.jar deleted file mode 100644 index 4e637a838..000000000 Binary files a/lib/parsii-1.2-javadoc.jar and /dev/null differ diff --git a/lib/parsii-1.2-sources.jar b/lib/parsii-1.2-sources.jar deleted file mode 100644 index c23d356b5..000000000 Binary files a/lib/parsii-1.2-sources.jar and /dev/null differ diff --git a/lib/parsii-1.2.jar b/lib/parsii-1.2.1.jar similarity index 53% rename from lib/parsii-1.2.jar rename to lib/parsii-1.2.1.jar index cdf63f92a..f41d64924 100644 Binary files a/lib/parsii-1.2.jar and b/lib/parsii-1.2.1.jar differ diff --git a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java index 35e55ba96..2052659dd 100644 --- a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java +++ b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java @@ -1,5 +1,6 @@ package com.dfsek.terra.biome.postprocessing; +import org.apache.commons.math3.util.FastMath; import org.polydev.gaea.math.FastNoiseLite; /** @@ -27,7 +28,7 @@ public class ErosionNoise { * @return Whether location is eroded */ public boolean isEroded(int x, int z) { - double abs = Math.pow(noise.getNoise(x, z), 2); + double abs = FastMath.pow(noise.getNoise(x, z), 2); return abs < thresh; } } diff --git a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java index e88984a5c..2f86e573d 100644 --- a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java +++ b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java @@ -1,5 +1,6 @@ package com.dfsek.terra.carving; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.math.FastNoiseLite; @@ -15,7 +16,7 @@ public class SimplexCarver extends Carver { private final FastNoiseLite height; private final FastNoiseLite column; private final FastNoiseLite hasCaves; - private final double root2inverse = 1D / Math.sqrt(2); + private final double root2inverse = 1D / FastMath.sqrt(2); public SimplexCarver(int minY, int maxY) { super(minY, maxY); @@ -41,7 +42,7 @@ public class SimplexCarver extends Carver { } private static double acot(double x) { - return Math.PI / 2 - Math.atan(x); + return FastMath.PI / 2 - FastMath.atan(x); } @Override @@ -53,15 +54,15 @@ public class SimplexCarver extends Carver { for(int z = oz; z < oz + 16; z++) { double heightNoise = height.getNoise(x, z); double mainNoise = noise.getNoise(x, z) * 2; - double columnNoise = Math.pow(Math.max(column.getNoise(x, z), 0) * 2, 3); - double hc = (acot(16 * (hasCaves.getNoise(x, z) - 0.2)) / Math.PI) - 0.1; + double columnNoise = FastMath.pow(FastMath.max(column.getNoise(x, z), 0) * 2, 3); + double hc = (acot(16 * (hasCaves.getNoise(x, z) - 0.2)) / FastMath.PI) - 0.1; CarvingData.CarvingType type = CarvingData.CarvingType.BOTTOM; - double simplex = (Math.pow(mainNoise + root2inverse, 3) / 2 + columnNoise) * hc; + double simplex = (FastMath.pow(mainNoise + root2inverse, 3) / 2 + columnNoise) * hc; for(int y = 0; y < 64; y++) { - double finalNoise = (-0.05 * Math.abs(y - (heightNoise * 16 + 24)) + 1 - simplex) * hc; + double finalNoise = (-0.05 * FastMath.abs(y - (heightNoise * 16 + 24)) + 1 - simplex) * hc; if(finalNoise > 0.5) { c.carve(x - ox, y, z - oz, type); - double finalNoiseUp = (-0.05 * Math.abs((y + 1) - (heightNoise * 16 + 24)) + 1 - simplex) * hc; + double finalNoiseUp = (-0.05 * FastMath.abs((y + 1) - (heightNoise * 16 + 24)) + 1 - simplex) * hc; if(finalNoiseUp > 0.5) { type = CarvingData.CarvingType.CENTER; } else type = CarvingData.CarvingType.TOP; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index ab50ba1a3..b9fcc35cb 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,6 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.generation.GenerationPhase; @@ -81,9 +82,9 @@ public class UserDefinedCarver extends Carver { @Override public void step() { if(steps == nextDirection) { - direction.rotateAroundX(Math.toRadians((getRandom().nextGaussian()) * mutate[0] * recalcMagnitude)); - direction.rotateAroundY(Math.toRadians((getRandom().nextGaussian()) * mutate[1] * recalcMagnitude)); - direction.rotateAroundZ(Math.toRadians((getRandom().nextGaussian()) * mutate[2] * recalcMagnitude)); + direction.rotateAroundX(FastMath.toRadians((getRandom().nextGaussian()) * mutate[0] * recalcMagnitude)); + direction.rotateAroundY(FastMath.toRadians((getRandom().nextGaussian()) * mutate[1] * recalcMagnitude)); + direction.rotateAroundZ(FastMath.toRadians((getRandom().nextGaussian()) * mutate[2] * recalcMagnitude)); currentRotation = new double[] {(getRandom().nextGaussian()) * mutate[0], (getRandom().nextGaussian()) * mutate[1], (getRandom().nextGaussian()) * mutate[2]}; @@ -92,10 +93,10 @@ public class UserDefinedCarver extends Carver { steps++; setRadius(new int[] {(int) (runningRadius * radiusMultiplier[0]), (int) (runningRadius * radiusMultiplier[1]), (int) (runningRadius * radiusMultiplier[2])}); runningRadius += (getRandom().nextDouble() - 0.5) * mutate[3]; - runningRadius = Math.max(Math.min(runningRadius, maxRad), 1); - direction.rotateAroundX(Math.toRadians(currentRotation[0] * mutate[0])); - direction.rotateAroundY(Math.toRadians(currentRotation[1] * mutate[1])); - direction.rotateAroundZ(Math.toRadians(currentRotation[2] * mutate[2])); + runningRadius = FastMath.max(FastMath.min(runningRadius, maxRad), 1); + direction.rotateAroundX(FastMath.toRadians(currentRotation[0] * mutate[0])); + direction.rotateAroundY(FastMath.toRadians(currentRotation[1] * mutate[1])); + direction.rotateAroundZ(FastMath.toRadians(currentRotation[2] * mutate[2])); getRunning().add(direction); } } diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index 5ced28b1d..fdc6db1f2 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,6 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.Command; @@ -34,7 +35,7 @@ public class OreCommand extends WorldCommand { LangUtil.send("command.ore.out-of-range", sender); return true; } - Vector source = new Vector(Math.floorMod(bl.getX(), 16), bl.getY(), Math.floorMod(bl.getZ(), 16)); + Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); ore.doVein(source, bl.getChunk(), new Random()); } else { LangUtil.send("command.ore.main-menu", sender); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 3b0fb7dd1..dab183643 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -95,12 +96,12 @@ public class FloraConfig extends TerraConfig implements Flora { public boolean plant(Location location) { int size = floraPalette.getSize(); int c = ceiling ? -1 : 1; - for(int i = 0; Math.abs(i) < size; i += c) { // Down if ceiling, up if floor + for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor if(i + 1 > 255) return false; if(!replaceable.contains(location.clone().add(0, i + c, 0).getBlock().getType())) return false; } - for(int i = 0; Math.abs(i) < size; i += c) { // Down if ceiling, up if floor - int lvl = (Math.abs(i)); + for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor + int lvl = (FastMath.abs(i)); location.clone().add(0, i + c, 0).getBlock().setBlockData(floraPalette.get((ceiling ? lvl : size - lvl - 1), location.getBlockX(), location.getBlockZ()), physics); } return true; diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java index 8ebea851c..a642539ab 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Material; @@ -80,9 +81,9 @@ public class OreConfig extends TerraConfig { Vector source = l.clone().add(new Vector(x, y, z)); if(oreLoc.getBlockY() > 255 || oreLoc.getBlockY() < 0) continue; if(source.distance(l) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) { - ChunkCoordinate coord = new ChunkCoordinate(Math.floorDiv(oreLoc.getBlockX(), 16), Math.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID()); + ChunkCoordinate coord = new ChunkCoordinate(FastMath.floorDiv(oreLoc.getBlockX(), 16), FastMath.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID()); Block b = chunks.computeIfAbsent(coord, k -> chunk.getWorld().getChunkAt(oreLoc.toLocation(chunk.getWorld()))) - .getBlock(Math.floorMod(source.getBlockX(), 16), source.getBlockY(), Math.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation + .getBlock(FastMath.floorMod(source.getBlockX(), 16), source.getBlockY(), FastMath.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation if(replaceable.contains(b.getType()) && b.getLocation().getY() >= 0) b.setBlockData(oreData, update); } diff --git a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java index fdad86db2..055fd261c 100644 --- a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java +++ b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java @@ -4,6 +4,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.generation.TerraChunkGenerator; import com.dfsek.terra.image.ImageLoader; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.polydev.gaea.generation.GenerationPhase; @@ -33,12 +34,12 @@ public class DebugFrame extends JFrame implements ActionListener { super.paintComponents(g); for(Player p : Bukkit.getOnlinePlayers()) { if(!(p.getWorld().getGenerator() instanceof TerraChunkGenerator)) break; - int xp = (int) (((double) Math.floorMod(p.getLocation().getBlockX() - (img.getWidth() / 2), x) / x) * getWidth()); - int zp = (int) (((double) Math.floorMod(p.getLocation().getBlockZ() - (img.getHeight() / 2), z) / z) * getHeight()); + int xp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockX() - (img.getWidth() / 2), x) / x) * getWidth()); + int zp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockZ() - (img.getHeight() / 2), z) / z) * getHeight()); ImageLoader loader = TerraWorld.getWorld(p.getWorld()).getWorldConfig().imageLoader; if(loader != null && loader.getAlign().equals(ImageLoader.Align.NONE)) { - xp = (int) (((double) Math.floorMod(p.getLocation().getBlockX(), x) / x) * getWidth()); - zp = (int) (((double) Math.floorMod(p.getLocation().getBlockZ(), z) / z) * getHeight()); + xp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockX(), x) / x) * getWidth()); + zp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockZ(), z) / z) * getHeight()); } String str = TerraWorld.getWorld(p.getWorld()).getConfig().getBiome((UserDefinedBiome) TerraWorld.getWorld(p.getWorld()).getGrid().getBiome(p.getLocation(), GenerationPhase.POPULATE)).getID(); g.setColor(new Color(255, 255, 255, 128)); diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index e0865a5bb..4f248a1f7 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -5,6 +5,7 @@ import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.debug.gui.DebugGUI; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.polydev.gaea.biome.NormalizationUtil; @@ -108,12 +109,12 @@ public class ImageLoader { NONE { @Override public int getRGB(BufferedImage image, int x, int y) { - return image.getRGB(Math.floorMod(x, image.getWidth()), Math.floorMod(y, image.getHeight())); + return image.getRGB(FastMath.floorMod(x, image.getWidth()), FastMath.floorMod(y, image.getHeight())); } }; private static int getRGBNoAlign(BufferedImage image, int x, int y) { - return image.getRGB(Math.floorMod(x, image.getWidth()), Math.floorMod(y, image.getHeight())); + return image.getRGB(FastMath.floorMod(x, image.getWidth()), FastMath.floorMod(y, image.getHeight())); } public abstract int getRGB(BufferedImage image, int x, int y); diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index bc9b37c71..fedc69bc1 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -9,6 +9,7 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; import com.dfsek.terra.event.TreeGenerateEvent; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -57,7 +58,7 @@ public class FloraPopulator extends GaeaBlockPopulator { } private static int offset(Random r, int i) { - return Math.min(Math.max(i + r.nextInt(3) - 1, 0), 15); + return FastMath.min(FastMath.max(i + r.nextInt(3) - 1, 0), 15); } @SuppressWarnings("try") diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 886096082..f3e14fa40 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,6 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -48,15 +49,15 @@ public class StructurePopulator extends BlockPopulator { spawn.setY(y); if(!struc.checkSpawns(spawn, rotation)) continue; double horizontal = struc.getStructureInfo().getMaxHorizontal(); - if(Math.abs((cx + 8) - spawn.getBlockX()) <= horizontal && Math.abs((cz + 8) - spawn.getBlockZ()) <= horizontal) { + if(FastMath.abs((cx + 8) - spawn.getBlockX()) <= horizontal && FastMath.abs((cz + 8) - spawn.getBlockZ()) <= horizontal) { struc.paste(spawn, chunk, rotation); for(StructureContainedInventory i : struc.getInventories()) { try { Debug.info("Attempting to populate loot: " + i.getUid()); Vector2 lootCoords = RotationUtil.getRotatedCoords(new Vector2(i.getX() - struc.getStructureInfo().getCenterX(), i.getZ() - struc.getStructureInfo().getCenterZ()), rotation.inverse()); Location inv = spawn.clone().add(lootCoords.getX(), i.getY(), lootCoords.getZ()); - Debug.info(Math.floorDiv(inv.getBlockX(), 16) + ":" + chunk.getX() + ", " + Math.floorDiv(inv.getBlockZ(), 16) + ":" + chunk.getZ()); - if(Math.floorDiv(inv.getBlockX(), 16) != chunk.getX() || Math.floorDiv(inv.getBlockZ(), 16) != chunk.getZ()) + Debug.info(FastMath.floorDiv(inv.getBlockX(), 16) + ":" + chunk.getX() + ", " + FastMath.floorDiv(inv.getBlockZ(), 16) + ":" + chunk.getZ()); + if(FastMath.floorDiv(inv.getBlockX(), 16) != chunk.getX() || FastMath.floorDiv(inv.getBlockZ(), 16) != chunk.getZ()) continue; Debug.info("Target is in chunk."); Debug.info(spawn.toString() + " became: " + inv.toString() + " (" + rotation + ", " + inv.getBlock().getType() + ")"); diff --git a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java index d7d296455..3de79ec05 100644 --- a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java +++ b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java @@ -1,5 +1,7 @@ package com.dfsek.terra.procgen.math; +import org.apache.commons.math3.util.FastMath; + /** * oh yeah */ @@ -111,7 +113,7 @@ public class Vector2 implements Cloneable { * @return length */ public double length() { - return Math.sqrt(lengthSquared()); + return FastMath.sqrt(lengthSquared()); } /** @@ -130,7 +132,7 @@ public class Vector2 implements Cloneable { * @return Distance between vectors */ public double distance(Vector2 other) { - return Math.sqrt(distanceSquared(other)); + return FastMath.sqrt(distanceSquared(other)); } /** diff --git a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java index e2769aa6b..78a075e33 100644 --- a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java +++ b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java @@ -1,6 +1,7 @@ package com.dfsek.terra.procgen.pixel; import com.dfsek.terra.procgen.math.Vector2; +import org.apache.commons.math3.util.FastMath; import java.util.HashSet; import java.util.Set; @@ -11,8 +12,8 @@ public class Rectangle extends Polygon { private final Vector2 max; public Rectangle(Vector2 min, Vector2 max) { - this.max = new Vector2(Math.min(min.getX(), max.getX()), Math.min(min.getZ(), max.getZ())); - this.min = new Vector2(Math.max(min.getX(), max.getX()), Math.max(min.getZ(), max.getZ())); + this.max = new Vector2(FastMath.min(min.getX(), max.getX()), FastMath.min(min.getZ(), max.getZ())); + this.min = new Vector2(FastMath.max(min.getX(), max.getX()), FastMath.max(min.getZ(), max.getZ())); } public Rectangle(Vector2 center, double xRadius, double zRadius) { diff --git a/src/main/java/com/dfsek/terra/structure/Rotation.java b/src/main/java/com/dfsek/terra/structure/Rotation.java index f1a91d212..cf4d02081 100644 --- a/src/main/java/com/dfsek/terra/structure/Rotation.java +++ b/src/main/java/com/dfsek/terra/structure/Rotation.java @@ -1,5 +1,7 @@ package com.dfsek.terra.structure; +import org.apache.commons.math3.util.FastMath; + public enum Rotation { CW_90(90), CW_180(180), CCW_90(270), NONE(0); private final int degrees; @@ -9,7 +11,7 @@ public enum Rotation { } public static Rotation fromDegrees(int deg) { - switch(Math.floorMod(deg, 360)) { + switch(FastMath.floorMod(deg, 360)) { case 0: return Rotation.NONE; case 90: diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index ad8b08d16..2e26b7451 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -3,6 +3,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.Debug; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.util.structure.RotationUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -198,7 +199,7 @@ public class Structure implements Serializable { } int offset = block.getPullOffset(); if(offset != 0) - worldBlock = worldBlock.getRelative((offset > 0) ? BlockFace.UP : BlockFace.DOWN, Math.abs(offset)); + worldBlock = worldBlock.getRelative((offset > 0) ? BlockFace.UP : BlockFace.DOWN, FastMath.abs(offset)); RotationUtil.rotateBlockData(data, r); @@ -265,9 +266,9 @@ public class Structure implements Serializable { Vector2 max = getRotatedCoords(new Vector2(x.getMax(), z.getMax()).subtract(center), r.inverse()).add(center); if(a.equals(Rotation.Axis.X)) - return new Range((int) Math.floor(Math.min(min.getX(), max.getX())), (int) Math.ceil(Math.max(min.getX(), max.getX())) + 1); + return new Range((int) FastMath.floor(FastMath.min(min.getX(), max.getX())), (int) FastMath.ceil(FastMath.max(min.getX(), max.getX())) + 1); else - return new Range((int) Math.floor(Math.min(min.getZ(), max.getZ())), (int) Math.ceil(Math.max(min.getZ(), max.getZ())) + 1); + return new Range((int) FastMath.floor(FastMath.min(min.getZ(), max.getZ())), (int) FastMath.ceil(FastMath.max(min.getZ(), max.getZ())) + 1); } @NotNull diff --git a/src/main/java/com/dfsek/terra/structure/StructureInfo.java b/src/main/java/com/dfsek/terra/structure/StructureInfo.java index eceab039f..1abcbcc09 100644 --- a/src/main/java/com/dfsek/terra/structure/StructureInfo.java +++ b/src/main/java/com/dfsek/terra/structure/StructureInfo.java @@ -1,6 +1,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.procgen.math.Vector2; +import org.apache.commons.math3.util.FastMath; import java.io.Serializable; @@ -41,6 +42,6 @@ public class StructureInfo implements Serializable { } public double getMaxHorizontal() { - return Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeZ, 2)); + return FastMath.sqrt(FastMath.pow(sizeX, 2) + FastMath.pow(sizeZ, 2)); } } diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 931a717ef..2fd2162d7 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -35,7 +36,7 @@ public class EntityFeature implements Feature { } private static boolean isInChunk(Chunk c, Location l) { - return Math.floorDiv(l.getBlockX(), 16) == c.getX() && Math.floorDiv(l.getBlockZ(), 16) == c.getZ(); + return FastMath.floorDiv(l.getBlockX(), 16) == c.getX() && FastMath.floorDiv(l.getBlockZ(), 16) == c.getZ(); } private static List getLocations(Structure structure, Rotation r, Location origin, Random random, int number) { diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index 9a97c0aa0..4edc5153b 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -2,6 +2,7 @@ package com.dfsek.terra.util.structure; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; +import org.apache.commons.math3.util.FastMath; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; @@ -107,7 +108,7 @@ public final class RotationUtil { * @return BlockFace represented by integer. */ public static BlockFace fromRotation(int r) { - switch(Math.floorMod(r, 16)) { + switch(FastMath.floorMod(r, 16)) { case 0: return BlockFace.NORTH; case 1: diff --git a/src/test/java/DistributionTest.java b/src/test/java/DistributionTest.java index 0c25823e8..da3a348d8 100644 --- a/src/test/java/DistributionTest.java +++ b/src/test/java/DistributionTest.java @@ -26,8 +26,8 @@ class DistributionTest { long l = System.nanoTime(); for(int i = 0; i < 1000000; i++) { double n = noise.getNoise(0, i); - max = Math.max(max, n); - min = Math.min(min, n); + max = FastMath.max(max, n); + min = FastMath.min(min, n); numbers[normalize(n, attempts)]++; } long l2 = System.nanoTime() - l; @@ -36,8 +36,8 @@ class DistributionTest { l = System.nanoTime(); for(int i = 0; i < 1000000; i++) { double n = noise.getNoise(0, i); - max = Math.max(max, n); - min = Math.min(min, n); + max = FastMath.max(max, n); + min = FastMath.min(min, n); } l2 = System.nanoTime() - l; System.out.println("Took " + (double) l2 / 1000000 + "ms (" + ((double) l2 / 1000000) + "ns per."); @@ -67,8 +67,8 @@ class DistributionTest { end = mid; } } - double left = Math.abs(normalMap[start] - d); - double right = Math.abs(normalMap[end] - d); + double left = FastMath.abs(normalMap[start] - d); + double right = FastMath.abs(normalMap[end] - d); if (left <= right) { return start * (num) / (normalMap.length); } @@ -76,7 +76,7 @@ class DistributionTest { } public static int normal(double d, int max) { - double ranged = Math.max(0, Math.min((d + 1) / 2D, 1)); + double ranged = FastMath.max(0, FastMath.min((d + 1) / 2D, 1)); return (int) (ranged * max); } } diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index fe15ca665..db245f544 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -100,8 +100,8 @@ class LookupGenerator { public static int normalize(double i, int n) { i *= 1.42; // Magic simplex value (sqrt(2) plus a little) - i = Math.min(Math.max(i, -1), 1); - return Math.min((int) Math.floor((i + 1) * ((double) n / 2)), n - 1); + i = FastMath.min(FastMath.max(i, -1), 1); + return FastMath.min((int) FastMath.floor((i + 1) * ((double) n / 2)), n - 1); } private static class Worker extends Thread {