diff --git a/pom.xml b/pom.xml
index 635ed91bc..52035c6d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -147,7 +147,7 @@
ninja.bytecode
Shuriken
- 1.1.1
+ 1.1.14
com.volmit
diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java
index 71024bf29..e31c4f619 100644
--- a/src/main/java/ninja/bytecode/iris/Iris.java
+++ b/src/main/java/ninja/bytecode/iris/Iris.java
@@ -1,10 +1,12 @@
package ninja.bytecode.iris;
import java.io.File;
+import java.util.UUID;
import org.bukkit.Bukkit;
-import org.bukkit.Chunk;
+import org.bukkit.Difficulty;
import org.bukkit.World;
+import org.bukkit.World.Environment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
@@ -13,8 +15,9 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin;
+import mortar.api.rift.PhantomRift;
import mortar.api.rift.Rift;
-import mortar.api.sched.S;
+import mortar.api.rift.RiftException;
import mortar.bukkit.command.Command;
import mortar.bukkit.plugin.Control;
import mortar.bukkit.plugin.MortarPlugin;
@@ -27,7 +30,6 @@ import ninja.bytecode.iris.generator.IrisGenerator;
import ninja.bytecode.iris.util.Direction;
import ninja.bytecode.iris.util.HotswapGenerator;
import ninja.bytecode.iris.util.IrisMetrics;
-import ninja.bytecode.shuriken.execution.J;
import ninja.bytecode.shuriken.logging.L;
public class Iris extends MortarPlugin
@@ -95,6 +97,36 @@ public class Iris extends MortarPlugin
{
instance = this;
packController.compile();
+
+ if(Iris.settings.performance.debugMode)
+ {
+ try
+ {
+ //@builder
+ r = new PhantomRift("Iris-Debug/" + UUID.randomUUID().toString())
+ .setTileTickLimit(0.1)
+ .setEntityTickLimit(0.1)
+ .setAllowBosses(false)
+ .setEnvironment(Environment.NORMAL)
+ .setDifficulty(Difficulty.PEACEFUL)
+ .setRandomLightUpdates(false)
+ .setViewDistance(32)
+ .setHangingTickRate(2000)
+ .setGenerator(IrisGenerator.class)
+ .load();
+
+ for(Player i : Bukkit.getOnlinePlayers())
+ {
+ r.send(i);
+ }
+ //@done
+ }
+
+ catch(RiftException e)
+ {
+ e.printStackTrace();
+ }
+ }
}
@Override
diff --git a/src/main/java/ninja/bytecode/iris/Settings.java b/src/main/java/ninja/bytecode/iris/Settings.java
index d507e39e1..57c86d649 100644
--- a/src/main/java/ninja/bytecode/iris/Settings.java
+++ b/src/main/java/ninja/bytecode/iris/Settings.java
@@ -16,7 +16,7 @@ public class Settings
public ObjectMode objectMode = ObjectMode.PARALLAX;
public int threadPriority = Thread.MAX_PRIORITY;
public int threadCount = 16;
- public boolean debugMode = false;
+ public boolean debugMode = true;
public int decorationAccuracy = 1;
public boolean noObjectFail = false;
public boolean verbose = false;
@@ -26,7 +26,7 @@ public class Settings
public static class GeneratorSettings
{
public InterpolationMode interpolationMode = InterpolationMode.BILINEAR;
- public int interpolationRadius = 64;
+ public int interpolationRadius = 32;
public int blockSmoothing = 1;
public double objectDensity = 1D;
public double horizontalZoom = 2;
@@ -43,7 +43,7 @@ public class Settings
public double heightScale = 0.56;
public double baseHeight = 0.065;
public int seaLevel = 63;
- public double biomeScale = 0.75;
+ public double biomeScale = 1;
public boolean flatBedrock = false;
}
diff --git a/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java b/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java
index 0d5644893..8b8417007 100644
--- a/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java
+++ b/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java
@@ -18,6 +18,7 @@ import ninja.bytecode.iris.generator.atomics.AtomicChunkData;
import ninja.bytecode.iris.generator.genobject.GenObjectDecorator;
import ninja.bytecode.iris.generator.genobject.PlacedObject;
import ninja.bytecode.iris.generator.layer.GenLayerBiome;
+import ninja.bytecode.iris.generator.layer.GenLayerCarving;
import ninja.bytecode.iris.generator.layer.GenLayerCaves;
import ninja.bytecode.iris.generator.layer.GenLayerCliffs;
import ninja.bytecode.iris.generator.layer.GenLayerLayeredNoise;
@@ -75,6 +76,7 @@ public class IrisGenerator extends ParallaxWorldGenerator
private GenLayerSnow glSnow;
private GenLayerCliffs glCliffs;
private GenLayerCaves glCaves;
+ private GenLayerCarving glCarving;
private GenLayerOres glOres;
private RNG rTerrain;
private CompiledDimension dim;
@@ -133,7 +135,8 @@ public class IrisGenerator extends ParallaxWorldGenerator
glSnow = new GenLayerSnow(this, world, random, rTerrain.nextParallelRNG(5));
glCliffs = new GenLayerCliffs(this, world, random, rTerrain.nextParallelRNG(9));
glCaves = new GenLayerCaves(this, world, random, rTerrain.nextParallelRNG(10));
- glOres = new GenLayerOres(this, world, random, rTerrain.nextParallelRNG(11));
+ glCarving = new GenLayerCarving(this, world, random, rTerrain.nextParallelRNG(11));
+ glOres = new GenLayerOres(this, world, random, rTerrain.nextParallelRNG(12));
scatter = new CNG(rTerrain.nextParallelRNG(52), 1, 1).scale(10);
if(Iris.settings.performance.objectMode.equals(ObjectMode.PARALLAX))
@@ -358,6 +361,7 @@ public class IrisGenerator extends ParallaxWorldGenerator
for(int i = surfaceOnly ? max > seaLevel ? max - 2 : height - 2 : 0; i < max; i++)
{
MB mb = ROCK.get(scatterInt(wzx, i, wxx, ROCK.size()));
+ boolean carved = surfaceOnly ? false : glCarving.isCarved(wzx, wxx, x, z, i, data, plan);
boolean underwater = i >= height && i < seaLevel;
boolean underground = i < height;
int dheight = biome.getDirtDepth();
@@ -365,17 +369,26 @@ public class IrisGenerator extends ParallaxWorldGenerator
boolean dirt = (height - 1) - i < (dheight > 0 ? scatterInt(x, i, z, 4) : 0) + dheight;
boolean rocky = i > height - rheight && !dirt;
boolean bedrock = i == 0 || !Iris.settings.gen.flatBedrock ? i <= 2 : i < scatterInt(x, i, z, 3);
- mb = underwater ? FLUID : mb;
- mb = underground && dirt ? biome.getSubSurface(wxx, i, wzx, rTerrain) : mb;
- mb = underground && rocky ? biome.getRock(wxx, i, wzx, rTerrain) : mb;
- mb = bedrock ? BEDROCK : mb;
- if(i == height - 1)
+ if(!carved)
{
- mb = biome.getSurface(wx, wz, rTerrain);
+ mb = underwater ? FLUID : mb;
+ mb = underground && dirt ? biome.getSubSurface(wxx, i, wzx, rTerrain) : mb;
+ mb = underground && rocky ? biome.getRock(wxx, i, wzx, rTerrain) : mb;
+ mb = bedrock ? BEDROCK : mb;
+
+ if(i == height - 1)
+ {
+ mb = biome.getSurface(wx, wz, rTerrain);
+ }
+
+ highest = i > highest ? i : highest;
}
- highest = i > highest ? i : highest;
+ else
+ {
+ mb = MB.of(Material.AIR);
+ }
data.setBlock(x, i, z, mb.material, mb.data);
}
diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCarving.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCarving.java
new file mode 100644
index 000000000..fca30aadc
--- /dev/null
+++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCarving.java
@@ -0,0 +1,64 @@
+package ninja.bytecode.iris.generator.layer;
+
+import java.util.Random;
+
+import org.bukkit.World;
+
+import ninja.bytecode.iris.generator.IrisGenerator;
+import ninja.bytecode.iris.generator.atomics.AtomicChunkData;
+import ninja.bytecode.iris.util.ChunkPlan;
+import ninja.bytecode.iris.util.GenLayer;
+import ninja.bytecode.iris.util.IrisInterpolation;
+import ninja.bytecode.shuriken.math.CNG;
+import ninja.bytecode.shuriken.math.M;
+import ninja.bytecode.shuriken.math.RNG;
+
+public class GenLayerCarving extends GenLayer
+{
+ private CNG scram;
+ private CNG cng;
+ private CNG cngh;
+ private CNG cngo;
+
+ public GenLayerCarving(IrisGenerator iris, World world, Random random, RNG rng)
+ {
+ //@builder
+ super(iris, world, random, rng);
+ cng = new CNG(rng.nextParallelRNG(2339234), 1D, 1).scale(0.02);
+ cngh = new CNG(rng.nextParallelRNG(1939234), 1D, 1).scale(0.027);
+ cngo = new CNG(rng.nextParallelRNG(8939234), 1D, 1).scale(0.002);
+ scram = new CNG(rng.nextParallelRNG(2639634), 1D, 1).scale(0.15);
+
+ //@done
+ }
+
+ @Override
+ public double generateLayer(double gnoise, double dx, double dz)
+ {
+ return gnoise;
+ }
+
+ public boolean isCarved(double vwxxf, double vwzxf, int x, int z, double hl, AtomicChunkData data, ChunkPlan plan)
+ {
+ double a = cngh.noise(vwxxf, vwzxf);
+ double hmax = 99 + (a * 30);
+ double hmin = 68 + (a * 30);
+
+ if(hl > hmax || hl < hmin)
+ {
+ return false;
+ }
+ double wxxf = (scram.noise(vwxxf, vwzxf) * 12) - vwzxf;
+ double wzxf = (scram.noise(vwzxf, vwxxf) * 12) + vwxxf;
+
+ double downrange = M.lerpInverse(hmin, hmax, hl);
+ double opacity = IrisInterpolation.sinCenter(downrange);
+
+ if(cng.noise(wxxf, wzxf, hl / 3) < (opacity / 1.4D) * cngo.noise(wxxf, wzxf))
+ {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCaves.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCaves.java
index 0ca4298ef..19922bab5 100644
--- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCaves.java
+++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerCaves.java
@@ -37,6 +37,11 @@ public class GenLayerCaves extends GenLayer
public void genCaves(double wxxf, double wzxf, int x, int z, AtomicChunkData data, ChunkPlan plan)
{
+ if(true)
+ {
+ return;
+ }
+
PrecisionStopwatch s = PrecisionStopwatch.start();
double itr = 2;
double level = 8;
diff --git a/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java b/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java
index f343bd2b7..cd7bf2888 100644
--- a/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java
+++ b/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java
@@ -27,7 +27,7 @@ public class IrisInterpolation
public static double sinCenter(double f)
{
- return (M.sin((float) ((f * Math.PI * 2D) + 4.745555D)) + 1D) / 2D;
+ return Math.sin(f * Math.PI);
}
public static double lerpCenterSinBezier(double a, double b, double f)
@@ -35,6 +35,11 @@ public class IrisInterpolation
return lerpBezier(a, b, sinCenter(f));
}
+ public static double lerpCenterSin(double a, double b, double f)
+ {
+ return lerpBezier(a, b, sinCenter(f));
+ }
+
public static double lerpParametric(double a, double b, double f, double v)
{
return a + (parametric(f, v) * (b - a));
diff --git a/src/main/java/ninja/bytecode/iris/util/IrisWorldData.java b/src/main/java/ninja/bytecode/iris/util/IrisWorldData.java
index 6a92fa0b2..9b86cb213 100644
--- a/src/main/java/ninja/bytecode/iris/util/IrisWorldData.java
+++ b/src/main/java/ninja/bytecode/iris/util/IrisWorldData.java
@@ -48,14 +48,12 @@ public class IrisWorldData
return;
}
- L.i("Load: " + F.f(getLoadedChunks().size()) + " Chunks in " + F.f(getLoadedRegions().size()) + " Regions");
-
for(SMCAVector i : getLoadedChunks())
{
try
{
AtomicChunkData d = getChunk(i.getX(), i.getZ());
- if(d.getTimeSinceLastUse() > 10000)
+ if(d.getTimeSinceLastUse() > 15000)
{
unloadChunk(i.getX(), i.getZ(), true);
}