From 354b02612d3fb79a6304f115f5349d93b98c383b Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 28 Aug 2021 11:55:47 -0400 Subject: [PATCH] Forking --- .../object/CommandIrisObjectPaste.java | 5 +++ .../object/CommandIrisObjectPasteMatter.java | 5 +++ .../volmit/iris/core/decrees/DecObject.java | 5 +++ .../com/volmit/iris/core/service/TreeSVC.java | 5 +++ .../placer/HeightmapObjectPlacer.java | 5 +++ .../iris/engine/jigsaw/PlannedPiece.java | 5 +++ .../iris/engine/mantle/EngineMantle.java | 5 +++ .../iris/engine/mantle/MantleWriter.java | 5 +++ .../components/MantleObjectComponent.java | 1 - .../engine/object/carving/IrisRavine.java | 14 +++++- .../engine/object/common/IObjectPlacer.java | 2 + .../engine/object/objects/IrisObject.java | 43 ++++++++++++++++++- 12 files changed, 96 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPaste.java b/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPaste.java index 9238c70ca..247dda859 100644 --- a/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPaste.java +++ b/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPaste.java @@ -252,6 +252,11 @@ public class CommandIrisObjectPaste extends MortarCommand { return false; } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + @Override public boolean isSolid(int x, int y, int z) { return world.getBlockAt(x, y, z).getType().isSolid(); diff --git a/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPasteMatter.java b/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPasteMatter.java index dca4b3d22..618195936 100644 --- a/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPasteMatter.java +++ b/src/main/java/com/volmit/iris/core/command/object/CommandIrisObjectPasteMatter.java @@ -133,6 +133,11 @@ public class CommandIrisObjectPasteMatter extends MortarCommand { return false; } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + @Override public boolean isSolid(int x, int y, int z) { return world.getBlockAt(x, y, z).getType().isSolid(); diff --git a/src/main/java/com/volmit/iris/core/decrees/DecObject.java b/src/main/java/com/volmit/iris/core/decrees/DecObject.java index 136722b60..976703571 100644 --- a/src/main/java/com/volmit/iris/core/decrees/DecObject.java +++ b/src/main/java/com/volmit/iris/core/decrees/DecObject.java @@ -274,6 +274,11 @@ public class DecObject implements DecreeExecutor { return false; } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + @Override public boolean isSolid(int x, int y, int z) { return world.getBlockAt(x, y, z).getType().isSolid(); diff --git a/src/main/java/com/volmit/iris/core/service/TreeSVC.java b/src/main/java/com/volmit/iris/core/service/TreeSVC.java index d9de6c334..5444dde5d 100644 --- a/src/main/java/com/volmit/iris/core/service/TreeSVC.java +++ b/src/main/java/com/volmit/iris/core/service/TreeSVC.java @@ -146,6 +146,11 @@ public class TreeSVC implements IrisService { return true; } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + @Override public boolean isSolid(int x, int y, int z) { return get(x, y, z).getMaterial().isSolid(); diff --git a/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java b/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java index 3a7ce0a98..78985a463 100644 --- a/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java +++ b/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java @@ -57,6 +57,11 @@ public class HeightmapObjectPlacer implements IObjectPlacer { return oplacer.isPreventingDecay(); } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + public boolean isSolid(int param1Int1, int param1Int2, int param1Int3) { return oplacer.isSolid(param1Int1, param1Int2, param1Int3); } diff --git a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedPiece.java b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedPiece.java index cb60cc322..deedc71d1 100644 --- a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedPiece.java +++ b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedPiece.java @@ -208,6 +208,11 @@ public class PlannedPiece { return false; } + @Override + public boolean isCarved(int x, int y, int z) { + return false; + } + @Override public boolean isSolid(int x, int y, int z) { return world.getBlockAt(x, y, z).getType().isSolid(); diff --git a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java index e5277658c..39ce2c08c 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java @@ -84,6 +84,11 @@ public interface EngineMantle extends IObjectPlacer { return getComplex().getTrueHeightStream().get(x, z); } + default boolean isCarved(int x, int h, int z) + { + return getMantle().get(x, h, z, MatterCavern.class) != null; + } + @Override default void set(int x, int y, int z, BlockData d) { getMantle().set(x, y, z, d == null ? AIR : d); diff --git a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index 95780ea38..78b0bc556 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -121,6 +121,11 @@ public class MantleWriter implements IObjectPlacer { return getEngineMantle().isPreventingDecay(); } + @Override + public boolean isCarved(int x, int y, int z) { + return getEngineMantle().isCarved(x, y, z); + } + @Override public boolean isSolid(int x, int y, int z) { return getEngineMantle().isSolid(x, y, z); diff --git a/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java b/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java index d73b4c82f..ae153f2b2 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java +++ b/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java @@ -94,7 +94,6 @@ public class MantleObjectComponent extends IrisMantleComponent { int zz = rng.i(z, z + 15); int id = rng.i(0, Integer.MAX_VALUE); - int h = v.place(xx, -1, zz, writer, objectPlacement, rng, (b) -> writer.setData(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id), null, getData()); diff --git a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java index 3e641785a..f9b00d073 100644 --- a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java +++ b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java @@ -104,11 +104,13 @@ public class IrisRavine extends IrisRegistrant { for(IrisPosition p : pos) { - int rsurface = y == -1 ? engine.getHeight(p.getX(), p.getZ(), true) : y; + int rsurface = y == -1 ? engine.getComplex().getHeightStream().get(x, z).intValue() : y; int depth = (int) Math.round(dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ())); int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ())); int surface = (int) Math.round(rsurface - depth * 0.45); + fork.doCarving(writer, rng, engine, p.getX(), rng.r.i(surface-depth, surface), p.getZ()); + for(int i = surface + depth; i >= surface; i--) { if(i % ribThickness == 0) { @@ -119,6 +121,11 @@ public class IrisRavine extends IrisRegistrant { break; } + if(i <= ribThickness+2) + { + break; + } + writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, CavernMatter.ON); } } @@ -133,6 +140,11 @@ public class IrisRavine extends IrisRegistrant { break; } + if(i <= ribThickness+2) + { + break; + } + writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, CavernMatter.ON); } } diff --git a/src/main/java/com/volmit/iris/engine/object/common/IObjectPlacer.java b/src/main/java/com/volmit/iris/engine/object/common/IObjectPlacer.java index 191c81aeb..877281f7e 100644 --- a/src/main/java/com/volmit/iris/engine/object/common/IObjectPlacer.java +++ b/src/main/java/com/volmit/iris/engine/object/common/IObjectPlacer.java @@ -34,6 +34,8 @@ public interface IObjectPlacer { boolean isPreventingDecay(); + boolean isCarved(int x, int y, int z); + boolean isSolid(int x, int y, int z); boolean isUnderwater(int x, int z); diff --git a/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java index 41b3f53c4..aa4cb2461 100644 --- a/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java @@ -459,10 +459,15 @@ public class IrisObject extends IrisRegistrant { int xx, zz; int yrand = config.getTranslate().getYRandom(); yrand = yrand > 0 ? rng.i(0, yrand) : yrand < 0 ? rng.i(yrand, 0) : yrand; + boolean bail = false; if (yv < 0) { if (config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT)) { y = (c != null ? c.getSurface() : placer.getHighest(x, z, getLoader(), config.isUnderwater())) + rty; + if(placer.isCarved(x, y, z) || placer.isCarved(x, y-1, z)) + { + bail = true; + } } else if (config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); @@ -471,6 +476,12 @@ public class IrisObject extends IrisRegistrant { for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) { int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, j)) + { + bail = true; + break; + } + if (h > y) { y = h; } @@ -484,6 +495,12 @@ public class IrisObject extends IrisRegistrant { for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) { int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, j)) + { + bail = true; + break; + } + if (h > y) { y = h; } @@ -497,7 +514,11 @@ public class IrisObject extends IrisRegistrant { for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) { for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) { int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; - + if(placer.isCarved(i, h, j)) + { + bail = true; + break; + } if (h < y) { y = h; } @@ -511,7 +532,11 @@ public class IrisObject extends IrisRegistrant { for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i += (rotatedDimensions.getBlockX() / 2) + 1) { for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) { int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; - + if(placer.isCarved(i, h, j)) + { + bail = true; + break; + } if (h < y) { y = h; } @@ -519,13 +544,27 @@ public class IrisObject extends IrisRegistrant { } } else if (config.getMode().equals(ObjectPlaceMode.PAINT)) { y = placer.getHighest(x, z, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(x, y, z)) + { + bail = true; + } } } else { y = yv; + if(placer.isCarved(x, y, z)) + { + bail = true; + } } if (yv >= 0 && config.isBottom()) { y += Math.floorDiv(h, 2); + bail = placer.isCarved(x, y, z); + } + + if(bail) + { + return -1; } if (yv < 0) {