From 24ae8d16798c8abad4af78a0aea5e9e904af95ed Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Wed, 4 Nov 2020 18:22:24 -0500 Subject: [PATCH] Support ModX and ModZ --- .../iris/v2/scaffold/engine/Engine.java | 4 ++ .../v2/scaffold/engine/EngineComponent.java | 10 ++++ .../v2/scaffold/engine/EngineFramework.java | 2 + .../v2/scaffold/engine/EngineParallax.java | 46 ++++++++++++++++++- 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/v2/scaffold/engine/Engine.java b/src/main/java/com/volmit/iris/v2/scaffold/engine/Engine.java index 9a01b771a..3048dd181 100644 --- a/src/main/java/com/volmit/iris/v2/scaffold/engine/Engine.java +++ b/src/main/java/com/volmit/iris/v2/scaffold/engine/Engine.java @@ -23,6 +23,10 @@ public interface Engine public int getMinHeight(); + public double modifyX(double x); + + public double modifyZ(double z); + default void save() { getParallax().saveAll(); diff --git a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineComponent.java b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineComponent.java index 91721ab1c..6d7cae24c 100644 --- a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineComponent.java +++ b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineComponent.java @@ -13,6 +13,16 @@ public interface EngineComponent { public String getName(); + default double modX(double x) + { + return getEngine().modifyX(x); + } + + default double modZ(double z) + { + return getEngine().modifyZ(z); + } + public default IrisDataManager getData() { return getEngine().getData(); diff --git a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java index 2b12b30f5..f93797f65 100644 --- a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java +++ b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java @@ -44,4 +44,6 @@ public interface EngineFramework extends DataProvider public EngineModifier getRavineModifier(); public EngineModifier getDepositModifier(); + + public EngineModifier getPostModifier(); } diff --git a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineParallax.java b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineParallax.java index e69ff05b4..05a582585 100644 --- a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineParallax.java +++ b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineParallax.java @@ -6,6 +6,8 @@ import java.util.concurrent.atomic.AtomicInteger; import com.volmit.iris.object.*; import com.volmit.iris.util.*; +import com.volmit.iris.v2.generator.actuator.IrisTerrainActuator; +import com.volmit.iris.v2.generator.modifier.IrisCaveModifier; import com.volmit.iris.v2.scaffold.parallax.ParallaxChunkMeta; import org.bukkit.block.data.BlockData; import org.bukkit.util.BlockVector; @@ -322,7 +324,49 @@ public interface EngineParallax extends DataProvider, IObjectPlacer @Override default int getHighest(int x, int z, boolean ignoreFluid) { - return (int) Math.round(ignoreFluid ? getComplex().getHeightStream().get(x, z) : getComplex().getHeightFluidStream().get(x, z)); + return ignoreFluid ? trueHeight(x, z) : Math.max(trueHeight(x, z), getEngine().getDimension().getFluidHeight()); + } + + default int trueHeight(int x, int z) + { + int rx = (int) Math.round(getEngine().modifyX(x)); + int rz = (int) Math.round(getEngine().modifyZ(z)); + int height = (int) Math.round(getComplex().getHeightStream().get(rx, rz)); + int m = height; + + if(getEngine().getDimension().isCarving()) + { + if(getEngine().getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)getFramework().getTerrainActuator()).getRng(), height)) + { + m--; + + while(getEngine().getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)getFramework().getTerrainActuator()).getRng(), height)) + { + m--; + } + } + } + + if(getEngine().getDimension().isCaves()) + { + KList caves = ((IrisCaveModifier)getFramework().getCaveModifier()).genCaves(rx, rz, 0, 0, null); + boolean again = true; + + while(again) + { + again = false; + for(CaveResult i : caves) + { + if(i.getCeiling() > m && i.getFloor() < m) + { + m = i.getFloor(); + again = true; + } + } + } + } + + return m; } @Override