Test carved objects

This commit is contained in:
DanLT 2021-07-06 02:04:39 -08:00
parent 74886db10d
commit d98bc1ec63
5 changed files with 60 additions and 10 deletions

View File

@ -259,4 +259,16 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
{ {
return B.isSolid(m) && !m.equals(Material.BEDROCK); return B.isSolid(m) && !m.equals(Material.BEDROCK);
} }
public boolean isCave(int x, int y, int z) {
for(CaveResult i : genCaves(x, z, x&15,z&15, null))
{
if(i.getFloor() < y && i.getCeiling() > y)
{
return true;
}
}
return false;
}
} }

View File

@ -474,6 +474,11 @@ public class IrisObject extends IrisRegistrant
} }
public void set(int param1Int1, int param1Int2, int param1Int3, BlockData param1BlockData) { public void set(int param1Int1, int param1Int2, int param1Int3, BlockData param1BlockData) {
if(config.isCarved() && oplacer.isCarved(param1Int1, param1Int2, param1Int3))
{
return;
}
oplacer.set(param1Int1, param1Int2, param1Int3, param1BlockData); oplacer.set(param1Int1, param1Int2, param1Int3, param1BlockData);
} }
@ -504,6 +509,11 @@ public class IrisObject extends IrisRegistrant
public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData<? extends TileState> param1TileData) { public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData<? extends TileState> param1TileData) {
oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData); oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData);
} }
@Override
public boolean isCarved(int xx, int j, int zz) {
return oplacer.isCarved(xx,j,zz);
}
} : oplacer; } : oplacer;
if(config.isSmartBore()) if(config.isSmartBore())
@ -769,6 +779,11 @@ public class IrisObject extends IrisRegistrant
if(!data.getMaterial().equals(Material.AIR) && !data.getMaterial().equals(Material.CAVE_AIR)) if(!data.getMaterial().equals(Material.AIR) && !data.getMaterial().equals(Material.CAVE_AIR))
{ {
if(config.isCarved() && placer.isCarved(xx, yy, zz))
{
continue;
}
placer.set(xx, yy, zz, data); placer.set(xx, yy, zz, data);
if(tile != null) if(tile != null)
@ -836,6 +851,11 @@ public class IrisObject extends IrisRegistrant
for(int j = lowest + y; j > yg - config.getOverStilt() - 1; j--) for(int j = lowest + y; j > yg - config.getOverStilt() - 1; j--)
{ {
if(config.isCarved() && placer.isCarved(xx, j, zz))
{
continue;
}
placer.set(xx, j, zz, d); placer.set(xx, j, zz, d);
} }
} }
@ -856,6 +876,12 @@ public class IrisObject extends IrisRegistrant
if(config.getSnow() > 0) if(config.getSnow() > 0)
{ {
int height = rngx.i(0, (int) (config.getSnow() * 7)); int height = rngx.i(0, (int) (config.getSnow() * 7));
if(config.isCarved() && placer.isCarved(vx, vy + 1, vz))
{
continue;
}
placer.set(vx, vy + 1, vz, SNOW_LAYERS[Math.max(Math.min(height, 7), 0)]); placer.set(vx, vy + 1, vz, SNOW_LAYERS[Math.max(Math.min(height, 7), 0)]);
} }
} }

View File

@ -72,6 +72,10 @@ public class IrisObjectPlacement
@Desc("When bore is enabled, lower min-y of the cuboid it removes") @Desc("When bore is enabled, lower min-y of the cuboid it removes")
private int boreExtendMinY = 0; private int boreExtendMinY = 0;
@DontObfuscate
@Desc("Allow objects to be carved by caves and carvings. Use this sparingly, there is a performance impact.")
private boolean carved = false;
@DontObfuscate @DontObfuscate
@Desc("If set to true, objects will place on the terrain height, ignoring the water surface.") @Desc("If set to true, objects will place on the terrain height, ignoring the water surface.")
private boolean underwater = false; private boolean underwater = false;

View File

@ -2,6 +2,7 @@ package com.volmit.iris.scaffold.engine;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.generator.IrisComplex; import com.volmit.iris.generator.IrisComplex;
import com.volmit.iris.generator.modifier.IrisCaveModifier;
import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.*; import com.volmit.iris.object.*;
import com.volmit.iris.object.tile.TileData; import com.volmit.iris.object.tile.TileData;
@ -18,7 +19,6 @@ import org.bukkit.Chunk;
import org.bukkit.ChunkSnapshot; import org.bukkit.ChunkSnapshot;
import org.bukkit.block.TileState; import org.bukkit.block.TileState;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import org.bukkit.util.Consumer; import org.bukkit.util.Consumer;
@ -41,6 +41,12 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
return getEngine().getParallax(); return getEngine().getParallax();
} }
default boolean isCarved(int x, int y, int z)
{
return ((IrisCaveModifier)getEngine().getFramework().getCaveModifier()).isCave(x,y,z) ||
getEngine().getDimension().isCarved(x,y,z, getComplex().getRng(), getEngine().getHeight());
}
default IrisDataManager getData() { default IrisDataManager getData() {
return getEngine().getData(); return getEngine().getData();
} }

View File

@ -6,23 +6,25 @@ import org.bukkit.block.data.BlockData;
public interface IObjectPlacer public interface IObjectPlacer
{ {
public int getHighest(int x, int z); int getHighest(int x, int z);
public int getHighest(int x, int z, boolean ignoreFluid); int getHighest(int x, int z, boolean ignoreFluid);
public void set(int x, int y, int z, BlockData d); void set(int x, int y, int z, BlockData d);
public BlockData get(int x, int y, int z); BlockData get(int x, int y, int z);
public boolean isPreventingDecay(); boolean isPreventingDecay();
public boolean isSolid(int x, int y, int z); boolean isSolid(int x, int y, int z);
public boolean isUnderwater(int x, int z); boolean isUnderwater(int x, int z);
public int getFluidHeight(); int getFluidHeight();
public boolean isDebugSmartBore(); boolean isDebugSmartBore();
void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile); void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile);
boolean isCarved(int xx, int j, int zz);
} }