diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6d34c7720..35418fc93 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -72,19 +72,15 @@ - [ ] Bug Fix - [ ] Build system -- [ ] - Documentation +- [ ] Documentation - [ ] New Feature - [ ] Performance -- [ ] - Refactoring -- [ ] - Repository +- [ ] Refactoring +- [ ] Repository - [ ] Revert - [ ] Style - [ ] Tests -- [ ] - Translation +- [ ] Translation #### Compatiblity @@ -119,4 +115,4 @@ \ No newline at end of file + --> diff --git a/build.gradle.kts b/build.gradle.kts index b99cab6db..39cee7e68 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,8 @@ preRelease(true) -versionProjects(":common:api", version("6.1.0")) -versionProjects(":common:implementation", version("6.1.0")) -versionProjects(":platforms", version("6.1.0")) +versionProjects(":common:api", version("6.1.1")) +versionProjects(":common:implementation", version("6.1.1")) +versionProjects(":platforms", version("6.1.1")) allprojects { diff --git a/common/addons/chunk-generator-noise-3d/build.gradle.kts b/common/addons/chunk-generator-noise-3d/build.gradle.kts index 36e6012d7..685cc848c 100644 --- a/common/addons/chunk-generator-noise-3d/build.gradle.kts +++ b/common/addons/chunk-generator-noise-3d/build.gradle.kts @@ -1,4 +1,4 @@ -version = version("1.0.0") +version = version("1.1.0") dependencies { compileOnlyApi(project(":common:addons:manifest-addon-loader")) diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java index 300cdbfcc..199540bab 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java @@ -73,15 +73,17 @@ public class NoiseChunkGenerator3D implements ChunkGenerator { int cx = xOrig + x; int cz = zOrig + z; - Biome biome = biomeProvider.getBiome(cx, 0, cz, seed); - PaletteInfo paletteInfo = biome.getContext().get(PaletteInfo.class); - - int sea = paletteInfo.seaLevel(); - Palette seaPalette = paletteInfo.ocean(); BlockState data; for(int y = world.getMaxHeight() - 1; y >= world.getMinHeight(); y--) { + Biome biome = biomeProvider.getBiome(cx, y, cz, seed); + + PaletteInfo paletteInfo = biome.getContext().get(PaletteInfo.class); + + int sea = paletteInfo.seaLevel(); + Palette seaPalette = paletteInfo.ocean(); + if(sampler.sample(x, y, z) > 0) { if(carver.sample(x, y, z) <= 0) { data = PaletteUtil.getPalette(x, y, z, sampler, paletteInfo, paletteLevel).get(paletteLevel, cx, y, cz, diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/ChunkInterpolator.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/ChunkInterpolator.java index 9f8cb782f..26fbb16b4 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/ChunkInterpolator.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/ChunkInterpolator.java @@ -7,15 +7,15 @@ package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation; +import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseProperties; +import com.dfsek.terra.api.util.mutable.MutableInteger; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + import net.jafama.FastMath; import java.util.HashMap; import java.util.Map; -import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseProperties; -import com.dfsek.terra.api.util.mutable.MutableInteger; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; - /** * Class to abstract away the Interpolators needed to generate a chunk.
@@ -55,25 +55,24 @@ public class ChunkInterpolator { for(int x = 0; x < 5; x++) { for(int z = 0; z < 5; z++) { - BiomeNoiseProperties generationSettings = provider.getBiome(xOrigin + (x << 2), 0, zOrigin + (z << 2), seed) - .getContext() - .get(BiomeNoiseProperties.class); - Map genMap = new HashMap<>(); - - int step = generationSettings.blendStep(); - int blend = generationSettings.blendDistance(); - - for(int xi = -blend; xi <= blend; xi++) { - for(int zi = -blend; zi <= blend; zi++) { - genMap.computeIfAbsent( - provider.getBiome(xOrigin + (x << 2) + (xi * step), 0, zOrigin + (z << 2) + (zi * step), seed) - .getContext() - .get(BiomeNoiseProperties.class), - g -> new MutableInteger(0)).increment(); // Increment by 1 - } - } - for(int y = 0; y < size + 1; y++) { + BiomeNoiseProperties generationSettings = provider.getBiome(xOrigin + (x << 2), (y << 2) + min, zOrigin + (z << 2), seed) + .getContext() + .get(BiomeNoiseProperties.class); + Map genMap = new HashMap<>(); + + int step = generationSettings.blendStep(); + int blend = generationSettings.blendDistance(); + + for(int xi = -blend; xi <= blend; xi++) { + for(int zi = -blend; zi <= blend; zi++) { + genMap.computeIfAbsent( + provider.getBiome(xOrigin + (x << 2) + (xi * step), 0, zOrigin + (z << 2) + (zi * step), seed) + .getContext() + .get(BiomeNoiseProperties.class), + g -> new MutableInteger(0)).increment(); // Increment by 1 + } + } noiseStorage[x][z][y] = computeNoise(genMap, (x << 2) + xOrigin, (y << 2) + this.min, (z << 2) + zOrigin); } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/Column.java b/common/api/src/main/java/com/dfsek/terra/api/util/Column.java new file mode 100644 index 000000000..87c1d1416 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/util/Column.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.api.util; + +import com.dfsek.terra.api.util.function.IntObjConsumer; + +import com.google.common.collect.ImmutableList; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + + +public interface Column { + int getMinY(); + + int getMaxY(); + + T get(int y); + + default void forEach(Consumer consumer) { + for(int y = getMinY(); y < getMaxY(); y++) { + consumer.accept(get(y)); + } + } + + default void forEach(IntObjConsumer consumer) { + for(int y = getMinY(); y < getMaxY(); y++) { + consumer.accept(y, get(y)); + } + } + + default List asList() { + List list = new ArrayList<>(); + forEach((Consumer) list::add); + return list; + } +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/function/IntObjConsumer.java b/common/api/src/main/java/com/dfsek/terra/api/util/function/IntObjConsumer.java new file mode 100644 index 000000000..4e9c9e54b --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/util/function/IntObjConsumer.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.util.function; + +@FunctionalInterface +public interface IntObjConsumer { + void accept(int i, T obj); +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeColumn.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeColumn.java new file mode 100644 index 000000000..22b19767b --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeColumn.java @@ -0,0 +1,39 @@ +package com.dfsek.terra.api.world.biome.generation; + +import com.dfsek.terra.api.util.Column; +import com.dfsek.terra.api.world.biome.Biome; + + +class BiomeColumn implements Column { + private final BiomeProvider biomeProvider; + private final int min; + private final int max; + + private final int x; + private final int z; + private final long seed; + + protected BiomeColumn(BiomeProvider biomeProvider, int min, int max, int x, int z, long seed) { + this.biomeProvider = biomeProvider; + this.min = min; + this.max = max; + this.x = x; + this.z = z; + this.seed = seed; + } + + @Override + public int getMinY() { + return min; + } + + @Override + public int getMaxY() { + return max; + } + + @Override + public Biome get(int y) { + return biomeProvider.getBiome(x, y, z, seed); + } +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeProvider.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeProvider.java index 282541720..cdba21f31 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeProvider.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/BiomeProvider.java @@ -7,6 +7,7 @@ package com.dfsek.terra.api.world.biome.generation; +import com.dfsek.terra.api.util.Column; import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.util.vector.Vector3Int; import com.dfsek.terra.api.world.biome.Biome; @@ -62,6 +63,14 @@ public interface BiomeProvider { return getBiome(vector3.getX(), vector3.getY(), vector3.getZ(), seed); } + default Column getColumn(int x, int z, int min, int max, long seed) { + return new BiomeColumn(this, min, max, x, z, seed); + } + + default Column getColumn(int x, int z, WorldProperties properties) { + return getColumn(x, z, properties.getMinHeight(), properties.getMaxHeight(), properties.getSeed()); + } + /** * Get all biomes this {@link BiomeProvider} is capable of generating in the world. *

diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/AbstractPlatform.java b/common/implementation/base/src/main/java/com/dfsek/terra/AbstractPlatform.java index 101ca6dcb..fe04ef97e 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/AbstractPlatform.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/AbstractPlatform.java @@ -244,12 +244,13 @@ public abstract class AbstractPlatform implements Platform { String resourceYaml = IOUtils.toString(resourcesConfig, StandardCharsets.UTF_8); Map> resources = new Yaml().load(resourceYaml); resources.forEach((dir, entries) -> entries.forEach(entry -> { - String resourcePath = dir + File.separatorChar + entry; + String resourceClassPath = dir + "/" + entry; + String resourcePath = resourceClassPath.replace('/', File.separatorChar); File resource = new File(getDataFolder(), resourcePath); if(resource.exists()) return; // dont overwrite - try(InputStream is = getClass().getResourceAsStream("/" + resourcePath)) { + try(InputStream is = getClass().getResourceAsStream("/" + resourceClassPath)) { if(is == null) { logger.error("Resource {} doesn't exist on the classpath!", resourcePath); return; diff --git a/platforms/fabric/src/main/resources/config.yml b/platforms/fabric/src/main/resources/config.yml deleted file mode 100644 index b13793a3f..000000000 --- a/platforms/fabric/src/main/resources/config.yml +++ /dev/null @@ -1,9 +0,0 @@ -debug: false -data-save: PT6M -language: "en_us" -fail-type: SHUTDOWN -dump-default: true -biome-search-resolution: 4 -cache-size: 384 -master-disable: - caves: false \ No newline at end of file