From 078139a26f5bec3e699a7605b74ab0abd84ede8b Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 28 Dec 2020 17:59:00 +0300 Subject: [PATCH] Generator config --- src/main/java/ru/betterend/BetterEnd.java | 2 + .../java/ru/betterend/config/Configs.java | 4 ++ .../common/NoiseChunkGeneratorMixin.java | 2 +- .../world/generator/BetterEndBiomeSource.java | 39 +++++++++---------- .../world/generator/TerrainGenerator.java | 19 ++++++++- 5 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 99121e62..9d0ffa19 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -27,6 +27,7 @@ import ru.betterend.registry.EndTags; import ru.betterend.util.BonemealUtil; import ru.betterend.util.Logger; import ru.betterend.world.generator.BetterEndBiomeSource; +import ru.betterend.world.generator.TerrainGenerator; import ru.betterend.world.surface.SurfaceBuilders; public class BetterEnd implements ModInitializer { @@ -54,6 +55,7 @@ public class BetterEnd implements ModInitializer { EndStructures.register(); Integrations.register(); BonemealUtil.init(); + TerrainGenerator.init(); if (hasGuideBook()) { GuideBook.register(); diff --git a/src/main/java/ru/betterend/config/Configs.java b/src/main/java/ru/betterend/config/Configs.java index 37019a83..6968cb1c 100644 --- a/src/main/java/ru/betterend/config/Configs.java +++ b/src/main/java/ru/betterend/config/Configs.java @@ -13,11 +13,15 @@ public class Configs { public static final IdConfig ENTITY_CONFIG = new IdConfig("entities", (entityId, category) -> { return new ConfigKey(entityId.getNamespace(), category, entityId.getPath()); }); + public static final IdConfig GENERATOR_CONFIG = new IdConfig("generator", (entityId, category) -> { + return new ConfigKey(entityId.getNamespace(), category, entityId.getPath()); + }); public static void saveConfigs() { ITEM_CONFIG.saveChanges(); BLOCK_CONFIG.saveChanges(); BIOME_CONFIG.saveChanges(); ENTITY_CONFIG.saveChanges(); + GENERATOR_CONFIG.saveChanges(); } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkGeneratorMixin.java index c0c9ea7e..695603f5 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkGeneratorMixin.java @@ -27,7 +27,7 @@ public abstract class NoiseChunkGeneratorMixin { @Inject(method = "sampleNoiseColumn([DII)V", at = @At("HEAD"), cancellable = true, allow = 2) private void beSampleNoiseColumn(double[] buffer, int x, int z, CallbackInfo info) { - if (settings.get().equals(ChunkGeneratorSettings.END)) { + if (TerrainGenerator.useNewGenerator() && settings.get().equals(ChunkGeneratorSettings.END)) { if (TerrainGenerator.canGenerate(x, z)) { TerrainGenerator.fillTerrainDensity(buffer, x, z); info.cancel(); diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index 7d9b253b..a99d4c03 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -13,12 +13,14 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Category; import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.biome.source.BiomeSource; +import net.minecraft.world.biome.source.TheEndBiomeSource; import net.minecraft.world.gen.ChunkRandom; import ru.betterend.BetterEnd; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndTags; import ru.betterend.util.FeaturesHelper; +import ru.betterend.world.biome.EndBiome; public class BetterEndBiomeSource extends BiomeSource { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> { @@ -36,8 +38,6 @@ public class BetterEndBiomeSource extends BiomeSource { private BiomeMap mapLand; private BiomeMap mapVoid; private final long seed; - private int preY = -1; - boolean preLand = false; public BetterEndBiomeSource(Registry biomeRegistry, long seed) { super(getBiomes(biomeRegistry)); @@ -70,35 +70,34 @@ public class BetterEndBiomeSource extends BiomeSource { @Override public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) { + boolean hasVoid = !TerrainGenerator.useNewGenerator() || !TerrainGenerator.noRingVoid(); long i = (long) biomeX * (long) biomeX; long j = (long) biomeZ * (long) biomeZ; - if (i + j <= 65536L) return this.centerBiome; + if (hasVoid && i + j <= 65536L) return this.centerBiome; if (biomeX == 0 && biomeZ == 0) { mapLand.clearCache(); mapVoid.clearCache(); } - if (TerrainGenerator.isLand(biomeX, biomeZ)) { - return mapLand.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + if (TerrainGenerator.useNewGenerator()) { + if (TerrainGenerator.isLand(biomeX, biomeZ)) { + return mapLand.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + } + else { + return mapVoid.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + } } else { - return mapVoid.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + float height = TheEndBiomeSource.getNoiseAt(noise, (biomeX >> 1) + 1, (biomeZ >> 1) + 1) + (float) SMALL_NOISE.eval(biomeX, biomeZ) * 5; + + if (height > -20F && height < -5F) { + return barrens; + } + + EndBiome endBiome = height < -10F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); + return endBiome.getActualBiome(); } - - /* - float height = TheEndBiomeSource.getNoiseAt(noise, (biomeX >> 1) + 1, (biomeZ >> 1) + 1) + (float) SMALL_NOISE.eval(biomeX, biomeZ) * 5; - - if (height > -20F && height < -5F) { - return barrens; - } - - EndBiome endBiome = height < -10F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); - if (biomeX == 0 && biomeZ == 0) { - mapLand.clearCache(); - mapVoid.clearCache(); - } - return endBiome.getActualBiome();*/ } @Override diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 56d94743..0deec947 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -3,6 +3,8 @@ package ru.betterend.world.generator; import java.util.Random; import java.util.concurrent.locks.ReentrantLock; +import net.minecraft.util.Identifier; +import ru.betterend.config.Configs; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.util.MHelper; @@ -17,6 +19,13 @@ public class TerrainGenerator { private static IslandLayer smallIslands; private static OpenSimplexNoise noise1; private static OpenSimplexNoise noise2; + private static boolean newGenerator; + private static boolean noRingVoid; + + public static void init() { + newGenerator = Configs.GENERATOR_CONFIG.getBoolean(new Identifier("generator", "enabled"), "useNewGenerator", true); + noRingVoid = Configs.GENERATOR_CONFIG.getBoolean(new Identifier("generator", "enabled"), "noRingVoid", false); + } public static void initNoise(long seed) { Random random = new Random(seed); @@ -28,7 +37,15 @@ public class TerrainGenerator { } public static boolean canGenerate(int x, int z) { - return (long) x + (long) z > CENTER; + return noRingVoid || (long) x + (long) z > CENTER; + } + + public static boolean noRingVoid() { + return noRingVoid; + } + + public static boolean useNewGenerator() { + return newGenerator; } public static void fillTerrainDensity(double[] buffer, int x, int z) {