From da464f99d43f14c1e35ff1392abf743a16277a7b Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 12 Oct 2019 02:52:14 -0400 Subject: [PATCH] Push --- .classpath | 32 ++++ .gitignore | 1 + .project | 23 +++ .settings/org.eclipse.core.resources.prefs | 4 + .settings/org.eclipse.jdt.core.prefs | 8 + .settings/org.eclipse.m2e.core.prefs | 4 + dependency-reduced-pom.xml | 109 +++++++++++ pom.xml | 93 +++++++++ scripts/copy.bat | 3 + src/main/java/ninja/bytecode/iris/Iris.java | 22 +++ .../ninja/bytecode/iris/IrisGenerator.java | 178 ++++++++++++++++++ src/main/java/ninja/bytecode/iris/MB.java | 20 ++ .../bytecode/iris/ParallelChunkGenerator.java | 91 +++++++++ src/main/resources/plugin.yml | 3 + 14 files changed, 591 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 dependency-reduced-pom.xml create mode 100644 pom.xml create mode 100644 scripts/copy.bat create mode 100644 src/main/java/ninja/bytecode/iris/Iris.java create mode 100644 src/main/java/ninja/bytecode/iris/IrisGenerator.java create mode 100644 src/main/java/ninja/bytecode/iris/MB.java create mode 100644 src/main/java/ninja/bytecode/iris/ParallelChunkGenerator.java create mode 100644 src/main/resources/plugin.yml diff --git a/.classpath b/.classpath new file mode 100644 index 000000000..cd04a794b --- /dev/null +++ b/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/.project b/.project new file mode 100644 index 000000000..320b5b4ac --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + Iris + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..abdea9ac0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..2f5cc74c3 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000..f897a7f1c --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 000000000..eb36f61bc --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,109 @@ + + + 4.0.0 + bytecode.ninja + Iris + Iris + 1.0 + + + + true + src/main/resources + + **/*.xml + **/*.yml + **/*.txt + **/*.properties + **/*.html + + + + + + maven-shade-plugin + 3.1.0 + + + package + + shade + + + true + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2 + + + runbatchfile + package + + exec + + + + + ${skip.copy} + ${project.basedir}/scripts/copy.bat + + ${project.basedir}\target\${project.name}-${project.version}.jar + ${development.location} + + + + + + + + pub + http://nexus.mpm.care/content/repositories/pub + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + org.spigotmc + spigot-api + 1.12.2-R0.1-SNAPSHOT + provided + + + commons-lang + commons-lang + + + json-simple + com.googlecode.json-simple + + + guava + com.google.guava + + + snakeyaml + org.yaml + + + bungeecord-chat + net.md-5 + + + + + + ${user.home}\Documents\development\server\plugins\${project.name}.jar + UTF-8 + 1.8 + 1.8 + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..5defd6cd9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,93 @@ + + 4.0.0 + bytecode.ninja + Iris + 1.0 + Iris + + 1.8 + 1.8 + UTF-8 + ${user.home}\Documents\development\server\plugins\${project.name}.jar + + + + + src/main/resources + true + + **/*.xml + **/*.yml + **/*.txt + **/*.properties + **/*.html + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + true + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2 + + + runbatchfile + package + + exec + + + + + ${skip.copy} + ${project.basedir}/scripts/copy.bat + + ${project.basedir}\target\${project.name}-${project.version}.jar + ${development.location} + + + + + + + + pub + http://nexus.mpm.care/content/repositories/pub + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + ninja.bytecode + Shuriken + 1.0 + + + org.spigotmc + spigot-api + 1.12.2-R0.1-SNAPSHOT + provided + + + \ No newline at end of file diff --git a/scripts/copy.bat b/scripts/copy.bat new file mode 100644 index 000000000..4b510459c --- /dev/null +++ b/scripts/copy.bat @@ -0,0 +1,3 @@ +@Echo off +echo Apply Script: COPY +echo F|xcopy /y /s /f /q "%1" "%2" diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java new file mode 100644 index 000000000..b8eba5a43 --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/Iris.java @@ -0,0 +1,22 @@ +package ninja.bytecode.iris; + +import org.bukkit.generator.ChunkGenerator; +import org.bukkit.plugin.java.JavaPlugin; + +import ninja.bytecode.shuriken.execution.TaskExecutor; + +public class Iris extends JavaPlugin +{ + public static TaskExecutor executor; + + public void onEnable() + { + executor = new TaskExecutor(-1, Thread.MIN_PRIORITY, "Iris Generator"); + } + + @Override + public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) + { + return new IrisGenerator(); + } +} diff --git a/src/main/java/ninja/bytecode/iris/IrisGenerator.java b/src/main/java/ninja/bytecode/iris/IrisGenerator.java new file mode 100644 index 000000000..e74d1a3bb --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/IrisGenerator.java @@ -0,0 +1,178 @@ +package ninja.bytecode.iris; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.World; + +import ninja.bytecode.shuriken.math.CNG; +import ninja.bytecode.shuriken.math.M; +import ninja.bytecode.shuriken.math.RNG; + +public class IrisGenerator extends ParallelChunkGenerator +{ + private static final MB water = new MB(Material.STATIONARY_WATER); + private static final MB bedrock = new MB(Material.BEDROCK); + private static final MB air = new MB(Material.AIR); + private static final MB grass = new MB(Material.GRASS); + private static final MB[] earth = {new MB(Material.DIRT), new MB(Material.DIRT, 1), + }; + private static final MB[] sand = {new MB(Material.SAND), new MB(Material.SAND), new MB(Material.SAND, 1), + }; + private static final MB[] sandygrass = {new MB(Material.GRASS), new MB(Material.SAND, 1), + }; + private static final MB[] rock = {new MB(Material.STONE), new MB(Material.STONE, 5), new MB(Material.COBBLESTONE), + }; + private double[][][] scatterCache; + private CNG gen; + private CNG fracture; + private CNG basegen; + private CNG faultline; + private RNG rng; + + @Override + public void onInit(World world, Random random) + { + //@builder + rng = new RNG(world.getSeed()); + CNG scatter = new CNG(rng.nextRNG(), 1, 1) + .scale(10); + basegen = new CNG(rng.nextRNG(), 0.46, 3) + .scale(0.00295) + .fractureWith(new CNG(rng.nextRNG(), 1, 2) + .scale(0.025), 70); + gen = new CNG(rng.nextRNG(), 0.19D, 4) + .scale(0.012) + .amp(0.5) + .freq(1.1) + .fractureWith(new CNG(rng.nextRNG(), 1, 2) + .scale(0.018) + .fractureWith(new CNG(rng.nextRNG(), 1, 1) + .scale(0.15), 24), 44); + fracture = new CNG(rng.nextRNG(), 0.6D, 4) + .scale(0.118); + faultline = new CNG(rng.nextRNG(), 1D, 1) + .scale(0.005) + .child(new CNG(rng.nextRNG(), 1D, 1) + .scale(0.012)) + .injectWith(CNG.MULTIPLY) + .fractureWith(new CNG(rng.nextRNG(), 1, 1) + .scale(0.07), 200); + //@done + + scatterCache = new double[16][][]; + + for(int i = 0; i < 16; i++) + { + scatterCache[i] = new double[16][]; + + for(int j = 0; j < 16; j++) + { + scatterCache[i][j] = new double[16]; + + for(int k = 0; k < 16; k++) + { + scatterCache[i][j][k] = scatter.noise(i, j, k); + } + } + } + } + + @Override + public void genColumn(int wx, int wz, int x, int z) + { + int height = getHeight(wx, wz); + MB mb = rock[0]; + + for(int i = 0; i < Math.max(height, 63); i++) + { + int surfdepth = i < height ? height - i : 0; + double scatter = scatterCache[x][z][i % 16]; + + if(i == 0) + { + mb = bedrock; + } + + else + { + if(scatter > 0.4 && i == 2) + { + mb = bedrock; + } + + if(scatter > 0.6 && i == 1) + { + mb = bedrock; + } + + if(i > height) + { + mb = water; + } + + else if(i == height) + { + mb = pick(sand, scatter); + } + + else if(i == height + 1 + scatter) + { + mb = pick(sandygrass, scatter); + } + + else if(i == height - 1) + { + mb = grass; + } + + else if(i > height - ((scatter * 2) + 1)) + { + mb = pick(earth, scatter); + } + + else + { + mb = pick(rock, scatter); + } + + if(mb.data < 0) + { + mb = new MB(mb.material, pick(Math.abs(mb.data), scatter)); + } + } + + setBlock(x, i, z, mb.material, mb.data); + } + } + + public int getHeight(double dx, double dz) + { + double fnoise = fracture.noise(dx, dz); + double fault = faultline.noise(dx, dz); + dx += (fnoise * 12); + dz -= (fnoise * 12); + double base = basegen.noise(dx, dz); + double noise = base + gen.noise(dx, dz); + double n = noise * 250; + n = n > 255 ? 255 : n; + n = n < 0 ? 0 : n; + + if(n > 75 && fault > 0.35) + { + n += (fault * (n / 19.5)); + } + + return (int) n; + } + + public int pick(int max, double noise) + { + return (int) (noise * max); + } + + public MB pick(MB[] array, double noise) + { + return array[pick(array.length, noise)]; + } +} \ No newline at end of file diff --git a/src/main/java/ninja/bytecode/iris/MB.java b/src/main/java/ninja/bytecode/iris/MB.java new file mode 100644 index 000000000..148cc449e --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/MB.java @@ -0,0 +1,20 @@ +package ninja.bytecode.iris; + +import org.bukkit.Material; + +public class MB +{ + public final Material material; + public final byte data; + + public MB(Material material, int data) + { + this.material = material; + this.data = (byte) data; + } + + public MB(Material material) + { + this(material, 0); + } +} diff --git a/src/main/java/ninja/bytecode/iris/ParallelChunkGenerator.java b/src/main/java/ninja/bytecode/iris/ParallelChunkGenerator.java new file mode 100644 index 000000000..dd93e48ce --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/ParallelChunkGenerator.java @@ -0,0 +1,91 @@ +package ninja.bytecode.iris; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.generator.ChunkGenerator; + +import ninja.bytecode.shuriken.Shuriken; +import ninja.bytecode.shuriken.execution.ChronoLatch; +import ninja.bytecode.shuriken.execution.J; +import ninja.bytecode.shuriken.execution.TaskExecutor.TaskGroup; +import ninja.bytecode.shuriken.format.F; + +public abstract class ParallelChunkGenerator extends ChunkGenerator +{ + private int i; + private int j; + private int wx; + private int wz; + private ChunkData data; + private TaskGroup tg; + private boolean ready = false; + private ChronoLatch cl = new ChronoLatch(5000); + + public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome) + { + Shuriken.profiler.start("chunkgen-" + world.getName()); + + if(!ready) + { + onInit(world, random); + ready = true; + } + + data = createChunkData(world); + tg = Iris.executor.startWork(); + + for(i = 0; i < 16; i++) + { + wx = (x * 16) + i; + + for(j = 0; j < 16; j++) + { + wz = (z * 16) + j; + int a = wx; + int b = wz; + int c = i; + int d = j; + tg.queue(() -> genColumn(a, b, c, d)); + } + } + + tg.execute(); + Shuriken.profiler.stop("chunkgen-" + world.getName()); + + if(cl.flip()) + { + J.a(() -> System.out.print("Gen: " + F.duration(Shuriken.profiler.getResult("chunkgen-" + world.getName()).getAverage(), 2))); + } + + return data; + } + + public abstract void onInit(World world, Random random); + + public abstract void genColumn(int wx, int wz, int x, int z); + + @SuppressWarnings("deprecation") + protected void setBlock(int x, int y, int z, Material b) + { + setBlock(x, y, z, b.getId(), (byte) 0); + } + + @SuppressWarnings("deprecation") + protected void setBlock(int x, int y, int z, Material b, byte d) + { + setBlock(x, y, z, b.getId(), d); + } + + protected void setBlock(int x, int y, int z, int b) + { + setBlock(x, y, z, b, (byte) 0); + } + + @SuppressWarnings("deprecation") + protected void setBlock(int x, int y, int z, int b, byte d) + { + data.setBlock(x, y, z, b, d); + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 000000000..9c9773c6f --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,3 @@ +name: ${project.name} +version: ${project.version} +main: ninja.bytecode.iris.Iris \ No newline at end of file