From 47ddc3a07c5d96a06e02dc9ef1acd2727f8f540d Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 18 Mar 2021 04:49:18 +0300 Subject: [PATCH] Separate central island from others --- .../java/ru/betterend/util/DataFixerUtil.java | 2 +- .../world/generator/GeneratorOptions.java | 6 +++--- .../world/generator/IslandLayer.java | 20 +++++++++++++++---- .../world/generator/LayerOptions.java | 4 +++- .../world/generator/TerrainGenerator.java | 6 +++--- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/betterend/util/DataFixerUtil.java b/src/main/java/ru/betterend/util/DataFixerUtil.java index d9885a2e..2d864e2a 100644 --- a/src/main/java/ru/betterend/util/DataFixerUtil.java +++ b/src/main/java/ru/betterend/util/DataFixerUtil.java @@ -71,7 +71,7 @@ public class DataFixerUtil { }); } - private static void addFix(String result, String... names) { + protected static void addFix(String result, String... names) { for (String name: names) { REPLACEMENT.put(name, result); } diff --git a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java index 5383c5ba..cdfec463 100644 --- a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java @@ -35,9 +35,9 @@ public class GeneratorOptions { generateCentralIsland = Configs.GENERATOR_CONFIG.getBoolean("customGenerator", "generateCentralIsland", false); endCityFailChance = Configs.GENERATOR_CONFIG.getInt("customGenerator", "endCityFailChance", 5); generateObsidianPlatform = Configs.GENERATOR_CONFIG.getBooleanRoot("generateObsidianPlatform", true); - bigOptions = new LayerOptions("customGenerator.layers.bigIslands", Configs.GENERATOR_CONFIG, 300, 200, 70, 10); - mediumOptions = new LayerOptions("customGenerator.layers.mediumIslands", Configs.GENERATOR_CONFIG, 150, 100, 70, 20); - smallOptions = new LayerOptions("customGenerator.layers.smallIslands", Configs.GENERATOR_CONFIG, 60, 50, 70, 30); + bigOptions = new LayerOptions("customGenerator.layers.bigIslands", Configs.GENERATOR_CONFIG, 300, 200, 70, 10, false); + mediumOptions = new LayerOptions("customGenerator.layers.mediumIslands", Configs.GENERATOR_CONFIG, 150, 100, 70, 20, true); + smallOptions = new LayerOptions("customGenerator.layers.smallIslands", Configs.GENERATOR_CONFIG, 60, 50, 70, 30, false); } public static int getBiomeSizeLand() { diff --git a/src/main/java/ru/betterend/world/generator/IslandLayer.java b/src/main/java/ru/betterend/world/generator/IslandLayer.java index 600219b3..a5fff6e2 100644 --- a/src/main/java/ru/betterend/world/generator/IslandLayer.java +++ b/src/main/java/ru/betterend/world/generator/IslandLayer.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.Random; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.minecraft.util.math.BlockPos; @@ -24,13 +25,11 @@ public class IslandLayer { private final Map islands = Maps.newHashMap(); private final OpenSimplexNoise density; private final int seed; - private final boolean hasCentralIsland; private int lastX = Integer.MIN_VALUE; private int lastZ = Integer.MIN_VALUE; private final LayerOptions options; - public IslandLayer(int seed, LayerOptions options, boolean hasCentralIsland) { - this.hasCentralIsland = hasCentralIsland; + public IslandLayer(int seed, LayerOptions options) { this.density = new OpenSimplexNoise(seed); this.options = options; this.seed = seed; @@ -43,8 +42,10 @@ public class IslandLayer { } public void updatePositions(double x, double z) { + int ix = MHelper.floor(x / options.distance); int iz = MHelper.floor(z / options.distance); + if (lastX != ix || lastZ != iz) { lastX = ix; lastZ = iz; @@ -64,7 +65,18 @@ public class IslandLayer { } } } - if (hasCentralIsland && GeneratorOptions.hasCentralIsland() && ix < 2 && iz < 2 && ix > -2 && iz > -2) { + } + + if (GeneratorOptions.hasCentralIsland() && ix < 4 && iz < 4 && ix > -4 && iz > -4) { + List remove = Lists.newArrayList(); + positions.forEach((pos) -> { + int d = pos.getX() * pos.getX() + pos.getZ() * pos.getZ(); + if (d < 12544) { + remove.add(pos); + } + }); + positions.removeAll(remove); + if (options.hasCentralIsland) { positions.add(new BlockPos(0, 64, 0)); } } diff --git a/src/main/java/ru/betterend/world/generator/LayerOptions.java b/src/main/java/ru/betterend/world/generator/LayerOptions.java index ede1ecd9..8bb35716 100644 --- a/src/main/java/ru/betterend/world/generator/LayerOptions.java +++ b/src/main/java/ru/betterend/world/generator/LayerOptions.java @@ -12,8 +12,9 @@ public class LayerOptions { public final int minY; public final int maxY; public final long centerDist; + public final boolean hasCentralIsland; - public LayerOptions(String name, PathConfig config, float distance, float scale, int center, int heightVariation) { + public LayerOptions(String name, PathConfig config, float distance, float scale, int center, int heightVariation, boolean hasCentral) { this.distance = clampDistance(config.getFloat(name, "distance[1-8192]", distance)); this.scale = clampScale(config.getFloat(name, "scale[0.1-1024]", scale)); this.center = clampCenter(config.getInt(name, "averageHeight[0-255]", center)); @@ -22,6 +23,7 @@ public class LayerOptions { this.minY = this.center - this.heightVariation; this.maxY = this.center + this.heightVariation; this.centerDist = MathHelper.floor(1000 / this.distance); + this.hasCentralIsland = config.getBoolean(name, "hasCentralIsland", hasCentral); } private float clampDistance(float value) { diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 99773bf0..e055fdaa 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -25,9 +25,9 @@ public class TerrainGenerator { public static void initNoise(long seed) { Random random = new Random(seed); - largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions, false); - mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions, true); - smallIslands = new IslandLayer(random.nextInt(), GeneratorOptions.smallOptions, false); + largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions); + mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions); + smallIslands = new IslandLayer(random.nextInt(), GeneratorOptions.smallOptions); noise1 = new OpenSimplexNoise(random.nextInt()); noise2 = new OpenSimplexNoise(random.nextInt()); }