Separate central island from others
This commit is contained in:
parent
c4d290f949
commit
47ddc3a07c
5 changed files with 26 additions and 12 deletions
|
@ -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) {
|
for (String name: names) {
|
||||||
REPLACEMENT.put(name, result);
|
REPLACEMENT.put(name, result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,9 @@ public class GeneratorOptions {
|
||||||
generateCentralIsland = Configs.GENERATOR_CONFIG.getBoolean("customGenerator", "generateCentralIsland", false);
|
generateCentralIsland = Configs.GENERATOR_CONFIG.getBoolean("customGenerator", "generateCentralIsland", false);
|
||||||
endCityFailChance = Configs.GENERATOR_CONFIG.getInt("customGenerator", "endCityFailChance", 5);
|
endCityFailChance = Configs.GENERATOR_CONFIG.getInt("customGenerator", "endCityFailChance", 5);
|
||||||
generateObsidianPlatform = Configs.GENERATOR_CONFIG.getBooleanRoot("generateObsidianPlatform", true);
|
generateObsidianPlatform = Configs.GENERATOR_CONFIG.getBooleanRoot("generateObsidianPlatform", true);
|
||||||
bigOptions = new LayerOptions("customGenerator.layers.bigIslands", Configs.GENERATOR_CONFIG, 300, 200, 70, 10);
|
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);
|
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);
|
smallOptions = new LayerOptions("customGenerator.layers.smallIslands", Configs.GENERATOR_CONFIG, 60, 50, 70, 30, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getBiomeSizeLand() {
|
public static int getBiomeSizeLand() {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -24,13 +25,11 @@ public class IslandLayer {
|
||||||
private final Map<BlockPos, SDF> islands = Maps.newHashMap();
|
private final Map<BlockPos, SDF> islands = Maps.newHashMap();
|
||||||
private final OpenSimplexNoise density;
|
private final OpenSimplexNoise density;
|
||||||
private final int seed;
|
private final int seed;
|
||||||
private final boolean hasCentralIsland;
|
|
||||||
private int lastX = Integer.MIN_VALUE;
|
private int lastX = Integer.MIN_VALUE;
|
||||||
private int lastZ = Integer.MIN_VALUE;
|
private int lastZ = Integer.MIN_VALUE;
|
||||||
private final LayerOptions options;
|
private final LayerOptions options;
|
||||||
|
|
||||||
public IslandLayer(int seed, LayerOptions options, boolean hasCentralIsland) {
|
public IslandLayer(int seed, LayerOptions options) {
|
||||||
this.hasCentralIsland = hasCentralIsland;
|
|
||||||
this.density = new OpenSimplexNoise(seed);
|
this.density = new OpenSimplexNoise(seed);
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.seed = seed;
|
this.seed = seed;
|
||||||
|
@ -43,8 +42,10 @@ public class IslandLayer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePositions(double x, double z) {
|
public void updatePositions(double x, double z) {
|
||||||
|
|
||||||
int ix = MHelper.floor(x / options.distance);
|
int ix = MHelper.floor(x / options.distance);
|
||||||
int iz = MHelper.floor(z / options.distance);
|
int iz = MHelper.floor(z / options.distance);
|
||||||
|
|
||||||
if (lastX != ix || lastZ != iz) {
|
if (lastX != ix || lastZ != iz) {
|
||||||
lastX = ix;
|
lastX = ix;
|
||||||
lastZ = iz;
|
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<BlockPos> 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));
|
positions.add(new BlockPos(0, 64, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,8 +12,9 @@ public class LayerOptions {
|
||||||
public final int minY;
|
public final int minY;
|
||||||
public final int maxY;
|
public final int maxY;
|
||||||
public final long centerDist;
|
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.distance = clampDistance(config.getFloat(name, "distance[1-8192]", distance));
|
||||||
this.scale = clampScale(config.getFloat(name, "scale[0.1-1024]", scale));
|
this.scale = clampScale(config.getFloat(name, "scale[0.1-1024]", scale));
|
||||||
this.center = clampCenter(config.getInt(name, "averageHeight[0-255]", center));
|
this.center = clampCenter(config.getInt(name, "averageHeight[0-255]", center));
|
||||||
|
@ -22,6 +23,7 @@ public class LayerOptions {
|
||||||
this.minY = this.center - this.heightVariation;
|
this.minY = this.center - this.heightVariation;
|
||||||
this.maxY = this.center + this.heightVariation;
|
this.maxY = this.center + this.heightVariation;
|
||||||
this.centerDist = MathHelper.floor(1000 / this.distance);
|
this.centerDist = MathHelper.floor(1000 / this.distance);
|
||||||
|
this.hasCentralIsland = config.getBoolean(name, "hasCentralIsland", hasCentral);
|
||||||
}
|
}
|
||||||
|
|
||||||
private float clampDistance(float value) {
|
private float clampDistance(float value) {
|
||||||
|
|
|
@ -25,9 +25,9 @@ public class TerrainGenerator {
|
||||||
|
|
||||||
public static void initNoise(long seed) {
|
public static void initNoise(long seed) {
|
||||||
Random random = new Random(seed);
|
Random random = new Random(seed);
|
||||||
largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions, false);
|
largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions);
|
||||||
mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions, true);
|
mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions);
|
||||||
smallIslands = new IslandLayer(random.nextInt(), GeneratorOptions.smallOptions, false);
|
smallIslands = new IslandLayer(random.nextInt(), GeneratorOptions.smallOptions);
|
||||||
noise1 = new OpenSimplexNoise(random.nextInt());
|
noise1 = new OpenSimplexNoise(random.nextInt());
|
||||||
noise2 = new OpenSimplexNoise(random.nextInt());
|
noise2 = new OpenSimplexNoise(random.nextInt());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue