From d2fde4a510dc6401740b5b7d9a50949031dec471 Mon Sep 17 00:00:00 2001 From: Josephine Rueckert Date: Sun, 13 Dec 2020 22:04:44 +0100 Subject: [PATCH 1/4] feat(JOML): migrate world generation --- .../java/org/terasology/caves/CaveFacet.java | 11 +++-- .../terasology/caves/CaveFacetProvider.java | 8 ++-- .../terasology/caves/CaveLocationFacet.java | 6 +-- .../caves/CaveLocationProvider.java | 11 ++--- .../org/terasology/caves/CaveObjectFacet.java | 3 +- .../terasology/caves/CaveObjectProvider.java | 11 ++--- .../caves/CaveObjectRasterizer.java | 5 ++- .../org/terasology/caves/CaveRasterizer.java | 3 +- .../caves/CaveToSurfaceProvider.java | 44 ++++++++++--------- 9 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/terasology/caves/CaveFacet.java b/src/main/java/org/terasology/caves/CaveFacet.java index eca84de..be96d45 100644 --- a/src/main/java/org/terasology/caves/CaveFacet.java +++ b/src/main/java/org/terasology/caves/CaveFacet.java @@ -15,20 +15,23 @@ */ package org.terasology.caves; -import org.terasology.math.Region3i; +import org.joml.Vector3ic; import org.terasology.math.geom.Vector3i; +import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Border3D; import org.terasology.world.generation.facets.base.BaseBooleanFieldFacet3D; +import java.util.Vector; + public class CaveFacet extends BaseBooleanFieldFacet3D { - public CaveFacet(Region3i targetRegion, Border3D border) { + public CaveFacet(BlockRegion targetRegion, Border3D border) { super(targetRegion, border); } /** * The index of the given position in arrays corresponding to the region this facet covers. */ - public int getWorldIndex(Vector3i pos) { - return getWorldIndex(pos.x, pos.y, pos.z); + public int getWorldIndex(Vector3ic pos) { + return getWorldIndex(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/org/terasology/caves/CaveFacetProvider.java b/src/main/java/org/terasology/caves/CaveFacetProvider.java index 3ea7850..e5fc99e 100644 --- a/src/main/java/org/terasology/caves/CaveFacetProvider.java +++ b/src/main/java/org/terasology/caves/CaveFacetProvider.java @@ -2,11 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.caves; +import org.joml.Vector3ic; import org.terasology.math.geom.Vector3f; import org.terasology.math.geom.Vector3i; import org.terasology.utilities.procedural.BrownianNoise; import org.terasology.utilities.procedural.SimplexNoise; import org.terasology.utilities.procedural.SubSampledNoise; +import org.terasology.world.block.BlockRegions; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetProviderPlugin; import org.terasology.world.generation.GeneratingRegion; @@ -32,7 +34,7 @@ public class CaveFacetProvider implements FacetProviderPlugin { public void setSeed(long seed) { for(int i=0; i<2; i++) { BrownianNoise baseNoise = new BrownianNoise(new SimplexNoise(seed + 2 + i), 4); - caveNoise[i] = new SubSampledNoise(baseNoise, new Vector3f(0.006f, 0.006f, 0.006f), 4); + caveNoise[i] = new SubSampledNoise(baseNoise, new org.joml.Vector3f(0.006f, 0.006f, 0.006f), 4); } } @@ -44,8 +46,8 @@ public void process(GeneratingRegion region) { // get noise in batch for performance reasons. Getting it by individual position takes 10 times as long float[][] caveNoiseValues = new float[][]{caveNoise[0].noise(facet.getWorldRegion()),caveNoise[1].noise(facet.getWorldRegion())}; - for (Vector3i pos : facet.getWorldRegion()) { - float depth = elevationFacet.getWorld(pos.x, pos.z) - pos.y; + for (Vector3ic pos : BlockRegions.iterableInPlace(facet.getWorldRegion())) { + float depth = elevationFacet.getWorld(pos.x(), pos.z()) - pos.y(); float frequencyReduction = (float) Math.max(0, 0.3 - Math.max(depth, 0) / 400); //0: no reduction, 0.7: pretty much no caves. Also somewhat increases the tendency of caves to loop rather than continuing indefinitely. int i = facet.getWorldIndex(pos); float noiseValue = (float) Math.hypot(caveNoiseValues[0][i], caveNoiseValues[1][i]+frequencyReduction); diff --git a/src/main/java/org/terasology/caves/CaveLocationFacet.java b/src/main/java/org/terasology/caves/CaveLocationFacet.java index 2d83a99..07b0539 100644 --- a/src/main/java/org/terasology/caves/CaveLocationFacet.java +++ b/src/main/java/org/terasology/caves/CaveLocationFacet.java @@ -15,14 +15,14 @@ */ package org.terasology.caves; -import org.terasology.math.Region3i; +import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Border3D; import org.terasology.world.generation.Facet; import org.terasology.world.generation.facets.base.BaseObjectFacet2D; /** * This {@link Facet} adds to the {@link CaveFacet} by indicating the Y (height) value throughout the - * {@link Region3i} for both the floor and ceiling of the caves in the {@code CaveFacet}, if present. + * {@link BlockRegion} for both the floor and ceiling of the caves in the {@code CaveFacet}, if present. * If no Cave floor or ceiling is present then {@link Float#NaN} will be the value for that location. * *

Usage notes: The value of the floor / ceiling is the height of the last relevant solid block. @@ -30,7 +30,7 @@ * {@code caveLocation.floor + 1} / {@code caveLocation.ceiling - 1}

*/ public class CaveLocationFacet extends BaseObjectFacet2D { - public CaveLocationFacet(Region3i targetRegion, Border3D border) { + public CaveLocationFacet(BlockRegion targetRegion, Border3D border) { super(targetRegion, border, CaveLocation[].class); } } diff --git a/src/main/java/org/terasology/caves/CaveLocationProvider.java b/src/main/java/org/terasology/caves/CaveLocationProvider.java index edfd8ff..c0fe8b5 100644 --- a/src/main/java/org/terasology/caves/CaveLocationProvider.java +++ b/src/main/java/org/terasology/caves/CaveLocationProvider.java @@ -16,6 +16,7 @@ package org.terasology.caves; import org.terasology.math.Region3i; +import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetProviderPlugin; import org.terasology.world.generation.GeneratingRegion; @@ -42,9 +43,9 @@ public void process(GeneratingRegion region) { CaveLocationFacet locationFacet = new CaveLocationFacet(region.getRegion(), region.getBorderForFacet(CaveLocationFacet.class)); - Region3i worldRegion = caveFacet.getWorldRegion(); - for (int x = worldRegion.minX(); x <= worldRegion.maxX(); ++x) { - for (int z = worldRegion.minZ(); z <= worldRegion.maxZ(); ++z) { + BlockRegion worldRegion = caveFacet.getWorldRegion(); + for (int x = worldRegion.getMinX(); x <= worldRegion.getMaxX(); ++x) { + for (int z = worldRegion.getMinZ(); z <= worldRegion.getMaxZ(); ++z) { boolean insideCave = false; int y; // The cave locations in this x/z vertical @@ -57,13 +58,13 @@ public void process(GeneratingRegion region) { // - if insideCave == false && cavePresent == false, in between caves, do nothing // - if insideCave == true && cavePresent == false, found cave floor // --- currentLocation floor = y, cavesLocations add current, current = null, insideCave = false - for (y = worldRegion.maxY(); y >= worldRegion.minY(); --y) { + for (y = worldRegion.getMaxY(); y >= worldRegion.getMinY(); --y) { boolean cavePresent = caveFacet.getWorld(x, y, z); if (!insideCave && cavePresent) { insideCave = true; currentLocation = new CaveLocation(); - if (y < worldRegion.maxY()) { + if (y < worldRegion.getMaxY()) { currentLocation.ceiling = y + 1; // In the case where y == worldRegion.maxY, then ceiling will remain float.NaN (unknown) } diff --git a/src/main/java/org/terasology/caves/CaveObjectFacet.java b/src/main/java/org/terasology/caves/CaveObjectFacet.java index ec0ba02..30fd596 100644 --- a/src/main/java/org/terasology/caves/CaveObjectFacet.java +++ b/src/main/java/org/terasology/caves/CaveObjectFacet.java @@ -16,6 +16,7 @@ package org.terasology.caves; import org.terasology.math.Region3i; +import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Border3D; import org.terasology.world.generation.facets.base.SparseObjectFacet3D; @@ -24,7 +25,7 @@ */ public class CaveObjectFacet extends SparseObjectFacet3D { - public CaveObjectFacet(Region3i targetRegion, Border3D border) { + public CaveObjectFacet(BlockRegion targetRegion, Border3D border) { super(targetRegion, border); } } diff --git a/src/main/java/org/terasology/caves/CaveObjectProvider.java b/src/main/java/org/terasology/caves/CaveObjectProvider.java index 79f5d2a..cac1301 100644 --- a/src/main/java/org/terasology/caves/CaveObjectProvider.java +++ b/src/main/java/org/terasology/caves/CaveObjectProvider.java @@ -8,6 +8,7 @@ import org.terasology.nui.properties.Range; import org.terasology.utilities.procedural.Noise; import org.terasology.utilities.procedural.WhiteNoise; +import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.ConfigurableFacetProvider; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetProviderPlugin; @@ -41,12 +42,12 @@ public void process(GeneratingRegion region) { CaveObjectFacet facet = new CaveObjectFacet(region.getRegion(), region.getBorderForFacet(CaveObjectFacet.class)); - Region3i worldRegion = facet.getWorldRegion(); - int minY = worldRegion.minY(); - int maxY = worldRegion.maxY(); + BlockRegion worldRegion = facet.getWorldRegion(); + int minY = worldRegion.getMinY(); + int maxY = worldRegion.getMaxY(); - for (int z = worldRegion.minZ(); z <= worldRegion.maxZ(); z++) { - for (int x = worldRegion.minX(); x <= worldRegion.maxX(); x++) { + for (int z = worldRegion.getMinZ(); z <= worldRegion.getMaxZ(); z++) { + for (int x = worldRegion.getMinX(); x <= worldRegion.getMaxX(); x++) { CaveLocation[] caveLocations = locationFacet.getWorld(x, z); for (CaveLocation location : caveLocations) { diff --git a/src/main/java/org/terasology/caves/CaveObjectRasterizer.java b/src/main/java/org/terasology/caves/CaveObjectRasterizer.java index a7c7413..6f17cc9 100644 --- a/src/main/java/org/terasology/caves/CaveObjectRasterizer.java +++ b/src/main/java/org/terasology/caves/CaveObjectRasterizer.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; +import org.joml.Vector3ic; import org.terasology.math.geom.BaseVector3i; import org.terasology.registry.CoreRegistry; import org.terasology.world.block.Block; @@ -55,8 +56,8 @@ public void generateChunk(CoreChunk chunk, Region chunkRegion) { CaveObjectFacet facet = chunkRegion.getFacet(CaveObjectFacet.class); Block air = blockManager.getBlock(BlockManager.AIR_ID); - Map entries = facet.getRelativeEntries(); - for (BaseVector3i pos : entries.keySet()) { + Map entries = facet.getRelativeEntries(); + for (Vector3ic pos : entries.keySet()) { // check if some other rasterizer has already placed something here if (chunk.getBlock(pos).equals(air)) { diff --git a/src/main/java/org/terasology/caves/CaveRasterizer.java b/src/main/java/org/terasology/caves/CaveRasterizer.java index 5f54e53..4768036 100644 --- a/src/main/java/org/terasology/caves/CaveRasterizer.java +++ b/src/main/java/org/terasology/caves/CaveRasterizer.java @@ -15,6 +15,7 @@ */ package org.terasology.caves; +import org.terasology.math.JomlUtil; import org.terasology.math.geom.Vector3i; import org.terasology.registry.CoreRegistry; import org.terasology.world.block.Block; @@ -54,7 +55,7 @@ public void generateChunk(CoreChunk chunk, Region chunkRegion) { } for (Vector3i position : ChunkConstants.CHUNK_REGION) { - if (caveFacet.get(position)) { + if (caveFacet.get(JomlUtil.from(position))) { chunk.setBlock(position, caveBlock); } } diff --git a/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java b/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java index b6052eb..0f93218 100644 --- a/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java +++ b/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java @@ -3,8 +3,10 @@ package org.terasology.caves; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.math.JomlUtil; -import org.terasology.math.geom.Vector3i; +import org.terasology.world.block.BlockRegions; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetBorder; import org.terasology.world.generation.FacetProviderPlugin; @@ -49,14 +51,14 @@ public void process(GeneratingRegion region) { Set cavePositions = new HashSet(); - for (Vector3i pos : caveFacet.getWorldRegion()) { - if (caveFacet.getWorld(pos) && densityFacet.getWorldRegion().encompasses(pos) && surfacesFacet.getWorldRegion().encompasses(pos)) { - cavePositions.add(pos); + for (Vector3ic pos : BlockRegions.iterableInPlace(caveFacet.getWorldRegion())) { + if (caveFacet.getWorld(pos) && densityFacet.getWorldRegion().containsBlock(pos) && surfacesFacet.getWorldRegion().containsBlock(pos)) { + cavePositions.add(new Vector3i(pos)); } } // Ensure that the ocean can't immediately fall into a cave. - for (Vector3i pos : densityFacet.getWorldRegion()) { + for (Vector3i pos : BlockRegions.iterable(densityFacet.getWorldRegion())) { if (densityFacet.getWorld(pos) <= 0) { if (cavePositions.contains(pos)) { cavePositions.remove(pos); @@ -79,15 +81,15 @@ public void process(GeneratingRegion region) { // Mark any cave floors exposed to the sky as surface. Set newSurfaces = new HashSet<>(); for (Vector3i pos : cavePositions) { - if (surfacesFacet.getWorld(JomlUtil.from(pos))) { - surfacesFacet.setWorld(JomlUtil.from(pos), false); + if (surfacesFacet.getWorld(pos)) { + surfacesFacet.setWorld(pos, false); Vector3i newSurface = new Vector3i(pos); while (cavePositions.contains(newSurface)) { - newSurface.addY(-1); + newSurface.add(0,-1,0); } - if (newSurface.y >= surfacesFacet.getWorldRegion().minY()) { + if (newSurface.y >= surfacesFacet.getWorldRegion().getMinY()) { newSurfaces.add(newSurface); - surfacesFacet.setWorld(JomlUtil.from(newSurface), true); + surfacesFacet.setWorld(newSurface, true); } } } @@ -97,27 +99,27 @@ public void process(GeneratingRegion region) { Set newerSurfaces = new HashSet<>(); for (Vector3i surface : newSurfaces) { for (Vector3i adjacent : new Vector3i[]{ - new Vector3i(surface).subX(1), - new Vector3i(surface).addX(1), - new Vector3i(surface).subZ(1), - new Vector3i(surface).addZ(1) + new Vector3i(surface).sub(1,0,0), + new Vector3i(surface).add(1,0,0), + new Vector3i(surface).sub(0,0,1), + new Vector3i(surface).add(0,0,1) }) { - while (!cavePositions.contains(adjacent) && densityFacet.getWorldRegion().encompasses(adjacent) && densityFacet.getWorld(adjacent) > 0) { - adjacent.addY(1); + while (!cavePositions.contains(adjacent) && densityFacet.getWorldRegion().containsBlock(adjacent) && densityFacet.getWorld(adjacent) > 0) { + adjacent.add(0,1,0); } // Only continue if the selected position is actually in a cave, rather than on the surface or above the selected region. if (cavePositions.contains(adjacent)) { while (cavePositions.contains(adjacent)) { - adjacent.subY(1); + adjacent.sub(0,1,0); } if ( - surfacesFacet.getWorldRegion().encompasses(adjacent) && - densityFacet.getWorldRegion().encompasses(adjacent) && + surfacesFacet.getWorldRegion().containsBlock(adjacent) && + densityFacet.getWorldRegion().containsBlock(adjacent) && densityFacet.getWorld(adjacent) > 0 && - !surfacesFacet.getWorld(JomlUtil.from(adjacent)) + !surfacesFacet.getWorld(adjacent) ) { newerSurfaces.add(adjacent); - surfacesFacet.setWorld(JomlUtil.from(adjacent), true); + surfacesFacet.setWorld(adjacent, true); } } } From 613ef6d87dba3296c9d42b1ce556872822d235c0 Mon Sep 17 00:00:00 2001 From: Josephine Rueckert Date: Fri, 25 Dec 2020 13:54:38 +0100 Subject: [PATCH 2/4] feat(BlockRegion): align with recent BlockRegion changes --- .../org/terasology/caves/CaveFacetProvider.java | 5 +---- .../terasology/caves/CaveLocationProvider.java | 9 ++++----- .../terasology/caves/CaveObjectProvider.java | 9 ++++----- .../terasology/caves/CaveToSurfaceProvider.java | 17 ++++++++--------- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/terasology/caves/CaveFacetProvider.java b/src/main/java/org/terasology/caves/CaveFacetProvider.java index e5fc99e..e7b4169 100644 --- a/src/main/java/org/terasology/caves/CaveFacetProvider.java +++ b/src/main/java/org/terasology/caves/CaveFacetProvider.java @@ -3,12 +3,9 @@ package org.terasology.caves; import org.joml.Vector3ic; -import org.terasology.math.geom.Vector3f; -import org.terasology.math.geom.Vector3i; import org.terasology.utilities.procedural.BrownianNoise; import org.terasology.utilities.procedural.SimplexNoise; import org.terasology.utilities.procedural.SubSampledNoise; -import org.terasology.world.block.BlockRegions; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetProviderPlugin; import org.terasology.world.generation.GeneratingRegion; @@ -46,7 +43,7 @@ public void process(GeneratingRegion region) { // get noise in batch for performance reasons. Getting it by individual position takes 10 times as long float[][] caveNoiseValues = new float[][]{caveNoise[0].noise(facet.getWorldRegion()),caveNoise[1].noise(facet.getWorldRegion())}; - for (Vector3ic pos : BlockRegions.iterableInPlace(facet.getWorldRegion())) { + for (Vector3ic pos : facet.getWorldRegion()) { float depth = elevationFacet.getWorld(pos.x(), pos.z()) - pos.y(); float frequencyReduction = (float) Math.max(0, 0.3 - Math.max(depth, 0) / 400); //0: no reduction, 0.7: pretty much no caves. Also somewhat increases the tendency of caves to loop rather than continuing indefinitely. int i = facet.getWorldIndex(pos); diff --git a/src/main/java/org/terasology/caves/CaveLocationProvider.java b/src/main/java/org/terasology/caves/CaveLocationProvider.java index c0fe8b5..c0a7e33 100644 --- a/src/main/java/org/terasology/caves/CaveLocationProvider.java +++ b/src/main/java/org/terasology/caves/CaveLocationProvider.java @@ -15,7 +15,6 @@ */ package org.terasology.caves; -import org.terasology.math.Region3i; import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetProviderPlugin; @@ -44,8 +43,8 @@ public void process(GeneratingRegion region) { new CaveLocationFacet(region.getRegion(), region.getBorderForFacet(CaveLocationFacet.class)); BlockRegion worldRegion = caveFacet.getWorldRegion(); - for (int x = worldRegion.getMinX(); x <= worldRegion.getMaxX(); ++x) { - for (int z = worldRegion.getMinZ(); z <= worldRegion.getMaxZ(); ++z) { + for (int x = worldRegion.minX(); x <= worldRegion.maxX(); ++x) { + for (int z = worldRegion.minZ(); z <= worldRegion.maxZ(); ++z) { boolean insideCave = false; int y; // The cave locations in this x/z vertical @@ -58,13 +57,13 @@ public void process(GeneratingRegion region) { // - if insideCave == false && cavePresent == false, in between caves, do nothing // - if insideCave == true && cavePresent == false, found cave floor // --- currentLocation floor = y, cavesLocations add current, current = null, insideCave = false - for (y = worldRegion.getMaxY(); y >= worldRegion.getMinY(); --y) { + for (y = worldRegion.maxY(); y >= worldRegion.minY(); --y) { boolean cavePresent = caveFacet.getWorld(x, y, z); if (!insideCave && cavePresent) { insideCave = true; currentLocation = new CaveLocation(); - if (y < worldRegion.getMaxY()) { + if (y < worldRegion.maxY()) { currentLocation.ceiling = y + 1; // In the case where y == worldRegion.maxY, then ceiling will remain float.NaN (unknown) } diff --git a/src/main/java/org/terasology/caves/CaveObjectProvider.java b/src/main/java/org/terasology/caves/CaveObjectProvider.java index cac1301..5faf32c 100644 --- a/src/main/java/org/terasology/caves/CaveObjectProvider.java +++ b/src/main/java/org/terasology/caves/CaveObjectProvider.java @@ -3,7 +3,6 @@ package org.terasology.caves; import org.terasology.entitySystem.Component; -import org.terasology.math.Region3i; import org.terasology.math.TeraMath; import org.terasology.nui.properties.Range; import org.terasology.utilities.procedural.Noise; @@ -43,11 +42,11 @@ public void process(GeneratingRegion region) { new CaveObjectFacet(region.getRegion(), region.getBorderForFacet(CaveObjectFacet.class)); BlockRegion worldRegion = facet.getWorldRegion(); - int minY = worldRegion.getMinY(); - int maxY = worldRegion.getMaxY(); + int minY = worldRegion.minY(); + int maxY = worldRegion.maxY(); - for (int z = worldRegion.getMinZ(); z <= worldRegion.getMaxZ(); z++) { - for (int x = worldRegion.getMinX(); x <= worldRegion.getMaxX(); x++) { + for (int z = worldRegion.minZ(); z <= worldRegion.maxZ(); z++) { + for (int x = worldRegion.minX(); x <= worldRegion.maxX(); x++) { CaveLocation[] caveLocations = locationFacet.getWorld(x, z); for (CaveLocation location : caveLocations) { diff --git a/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java b/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java index 0f93218..5d54bee 100644 --- a/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java +++ b/src/main/java/org/terasology/caves/CaveToSurfaceProvider.java @@ -5,8 +5,6 @@ import org.joml.Vector3i; import org.joml.Vector3ic; -import org.terasology.math.JomlUtil; -import org.terasology.world.block.BlockRegions; import org.terasology.world.generation.Facet; import org.terasology.world.generation.FacetBorder; import org.terasology.world.generation.FacetProviderPlugin; @@ -51,14 +49,15 @@ public void process(GeneratingRegion region) { Set cavePositions = new HashSet(); - for (Vector3ic pos : BlockRegions.iterableInPlace(caveFacet.getWorldRegion())) { - if (caveFacet.getWorld(pos) && densityFacet.getWorldRegion().containsBlock(pos) && surfacesFacet.getWorldRegion().containsBlock(pos)) { + for (Vector3ic pos : caveFacet.getWorldRegion()) { + if (caveFacet.getWorld(pos) && densityFacet.getWorldRegion().contains(pos) && surfacesFacet.getWorldRegion().contains(pos)) { cavePositions.add(new Vector3i(pos)); } } // Ensure that the ocean can't immediately fall into a cave. - for (Vector3i pos : BlockRegions.iterable(densityFacet.getWorldRegion())) { + for (Vector3ic position : densityFacet.getWorldRegion()) { + Vector3i pos = new Vector3i(position); if (densityFacet.getWorld(pos) <= 0) { if (cavePositions.contains(pos)) { cavePositions.remove(pos); @@ -87,7 +86,7 @@ public void process(GeneratingRegion region) { while (cavePositions.contains(newSurface)) { newSurface.add(0,-1,0); } - if (newSurface.y >= surfacesFacet.getWorldRegion().getMinY()) { + if (newSurface.y >= surfacesFacet.getWorldRegion().minY()) { newSurfaces.add(newSurface); surfacesFacet.setWorld(newSurface, true); } @@ -104,7 +103,7 @@ public void process(GeneratingRegion region) { new Vector3i(surface).sub(0,0,1), new Vector3i(surface).add(0,0,1) }) { - while (!cavePositions.contains(adjacent) && densityFacet.getWorldRegion().containsBlock(adjacent) && densityFacet.getWorld(adjacent) > 0) { + while (!cavePositions.contains(adjacent) && densityFacet.getWorldRegion().contains(adjacent) && densityFacet.getWorld(adjacent) > 0) { adjacent.add(0,1,0); } // Only continue if the selected position is actually in a cave, rather than on the surface or above the selected region. @@ -113,8 +112,8 @@ public void process(GeneratingRegion region) { adjacent.sub(0,1,0); } if ( - surfacesFacet.getWorldRegion().containsBlock(adjacent) && - densityFacet.getWorldRegion().containsBlock(adjacent) && + surfacesFacet.getWorldRegion().contains(adjacent) && + densityFacet.getWorldRegion().contains(adjacent) && densityFacet.getWorld(adjacent) > 0 && !surfacesFacet.getWorld(adjacent) ) { From ff63a03e23b4718623b9377caad4db02d342bbb0 Mon Sep 17 00:00:00 2001 From: Josephine Rueckert Date: Fri, 25 Dec 2020 15:30:10 +0100 Subject: [PATCH 3/4] chore: add -SNAPSHOT due to recent release process changes --- module.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.txt b/module.txt index 83b3517..bd5494b 100644 --- a/module.txt +++ b/module.txt @@ -1,6 +1,6 @@ { "id": "Caves", - "version": "1.1.0", + "version": "1.1.0-SNAPSHOT", "author": "Josharias", "displayName": "Caves", "description": "Adds configurable caves to the world", From 1b420eb4161bd33129a953e1662d8f18835d6226 Mon Sep 17 00:00:00 2001 From: Josephine Rueckert Date: Sat, 26 Dec 2020 20:19:29 +0100 Subject: [PATCH 4/4] chore: retrigger checks