Support ModX and ModZ

This commit is contained in:
Daniel Mills 2020-11-04 18:22:24 -05:00
parent adb7b13599
commit 24ae8d1679
4 changed files with 61 additions and 1 deletions

View File

@ -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();

View File

@ -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();

View File

@ -44,4 +44,6 @@ public interface EngineFramework extends DataProvider
public EngineModifier<BlockData> getRavineModifier();
public EngineModifier<BlockData> getDepositModifier();
public EngineModifier<BlockData> getPostModifier();
}

View File

@ -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<CaveResult> 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