From d98bc1ec6301ae2ac57e46692bc31b0d20ceb9a8 Mon Sep 17 00:00:00 2001 From: DanLT Date: Tue, 6 Jul 2021 02:04:39 -0800 Subject: [PATCH] Test carved objects --- .../generator/modifier/IrisCaveModifier.java | 12 +++++++++ .../com/volmit/iris/object/IrisObject.java | 26 +++++++++++++++++++ .../iris/object/IrisObjectPlacement.java | 4 +++ .../engine/EngineParallaxManager.java | 8 +++++- .../com/volmit/iris/util/IObjectPlacer.java | 20 +++++++------- 5 files changed, 60 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java index cf9fb1de1..9346cc922 100644 --- a/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java @@ -259,4 +259,16 @@ public class IrisCaveModifier extends EngineAssignedModifier { 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; + } } diff --git a/src/main/java/com/volmit/iris/object/IrisObject.java b/src/main/java/com/volmit/iris/object/IrisObject.java index ecde1ca35..f822afd56 100644 --- a/src/main/java/com/volmit/iris/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/object/IrisObject.java @@ -474,6 +474,11 @@ public class IrisObject extends IrisRegistrant } 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); } @@ -504,6 +509,11 @@ public class IrisObject extends IrisRegistrant public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData param1TileData) { oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData); } + + @Override + public boolean isCarved(int xx, int j, int zz) { + return oplacer.isCarved(xx,j,zz); + } } : oplacer; 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(config.isCarved() && placer.isCarved(xx, yy, zz)) + { + continue; + } + placer.set(xx, yy, zz, data); if(tile != null) @@ -836,6 +851,11 @@ public class IrisObject extends IrisRegistrant 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); } } @@ -856,6 +876,12 @@ public class IrisObject extends IrisRegistrant if(config.getSnow() > 0) { 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)]); } } diff --git a/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java b/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java index 9e8ad2f2b..9dbdd757d 100644 --- a/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java +++ b/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java @@ -72,6 +72,10 @@ public class IrisObjectPlacement @Desc("When bore is enabled, lower min-y of the cuboid it removes") 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 @Desc("If set to true, objects will place on the terrain height, ignoring the water surface.") private boolean underwater = false; diff --git a/src/main/java/com/volmit/iris/scaffold/engine/EngineParallaxManager.java b/src/main/java/com/volmit/iris/scaffold/engine/EngineParallaxManager.java index 6d33f0cba..42e307319 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/EngineParallaxManager.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/EngineParallaxManager.java @@ -2,6 +2,7 @@ package com.volmit.iris.scaffold.engine; import com.volmit.iris.Iris; import com.volmit.iris.generator.IrisComplex; +import com.volmit.iris.generator.modifier.IrisCaveModifier; import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.*; import com.volmit.iris.object.tile.TileData; @@ -18,7 +19,6 @@ import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; import org.bukkit.block.TileState; import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers; import org.bukkit.util.BlockVector; import org.bukkit.util.Consumer; @@ -41,6 +41,12 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer { 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() { return getEngine().getData(); } diff --git a/src/main/java/com/volmit/iris/util/IObjectPlacer.java b/src/main/java/com/volmit/iris/util/IObjectPlacer.java index 8f96223af..b6d00f885 100644 --- a/src/main/java/com/volmit/iris/util/IObjectPlacer.java +++ b/src/main/java/com/volmit/iris/util/IObjectPlacer.java @@ -6,23 +6,25 @@ import org.bukkit.block.data.BlockData; 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 tile); + + boolean isCarved(int xx, int j, int zz); }