From 4cbf429bc5f638a87d5e447cffdd3b6a206a7c3c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Sep 2020 10:17:34 +0300 Subject: [PATCH 1/4] Lakes fixes --- .../world/features/EndLakeFeature.java | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/EndLakeFeature.java index d294536e..9a5de246 100644 --- a/src/main/java/ru/betterend/world/features/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLakeFeature.java @@ -15,6 +15,7 @@ import ru.betterend.util.BlocksHelper; import ru.betterend.util.MHelper; public class EndLakeFeature extends DefaultFeature { + private static final BlockState END_STONE = Blocks.END_STONE.getDefaultState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final Mutable POS = new Mutable(); @@ -46,23 +47,6 @@ public class EndLakeFeature extends DefaultFeature { if (pos.getY() < 10) return false; waterLevel = MHelper.min(pos.getY(), waterLevel); - int minX = MHelper.floor((blockPos.getX() - dist - 16) >> 4) << 4; - int minZ = MHelper.floor((blockPos.getZ() - dist - 16) >> 4) << 4; - int maxX = MHelper.floor((blockPos.getX() + dist + 16) >> 4) << 4; - int maxZ = MHelper.floor((blockPos.getZ() + dist + 16) >> 4) << 4; - - for (int y = blockPos.getY(); y <= blockPos.getY() + 10; y++) { - POS.setY(y); - for (int x = minX; x <= maxX; x++) { - POS.setX(x); - for (int z = minZ; z <= maxZ; z++) { - POS.setZ(z); - if (!world.getFluidState(POS).isEmpty()) - BlocksHelper.setWithoutUpdate(world, POS, AIR); - } - } - } - for (int y = blockPos.getY(); y <= blockPos.getY() + 10; y++) { POS.setY(y); int add = y - blockPos.getY(); @@ -74,7 +58,7 @@ public class EndLakeFeature extends DefaultFeature { POS.setZ(z); int z2 = z - blockPos.getZ(); z2 *= z2; - double r = add * 1.5 + radius * (NOISE.eval(x * 0.2, y * 0.2, z * 0.2) * 0.25 + 0.75); + double r = add * 1.8 + radius * (NOISE.eval(x * 0.2, y * 0.2, z * 0.2) * 0.25 + 0.75); r *= r; if (x2 + z2 <= r) { BlocksHelper.setWithoutUpdate(world, POS, AIR); @@ -115,7 +99,9 @@ public class EndLakeFeature extends DefaultFeature { int z2 = z - blockPos.getZ(); z2 *= z2; double r = radius * (NOISE.eval(x * 0.2, y * 0.2, z * 0.2) * 0.25 + 0.75); + double rb = r * 1.2; r *= r; + rb *= rb; if (y2 + x2 + z2 <= r) { BlocksHelper.setWithoutUpdate(world, POS, y < waterLevel ? WATER : AIR); pos = POS.down(); @@ -124,11 +110,21 @@ public class EndLakeFeature extends DefaultFeature { pos = POS.up(); if (!world.getBlockState(pos).isAir()) { while (!world.getBlockState(pos).isAir()) { - BlocksHelper.setWithoutUpdate(world, pos, y < waterLevel ? WATER : AIR); + BlocksHelper.setWithoutUpdate(world, pos, pos.getY() < waterLevel ? WATER : AIR); pos = pos.up(); } } } + else if (y <= waterLevel && y2 + x2 + z2 <= rb) { + if (world.getBlockState(POS).getMaterial().isReplaceable()) { + if (world.isAir(POS.up())) { + BlockState state = world.getBiome(POS).getGenerationSettings().getSurfaceConfig().getTopMaterial(); + BlocksHelper.setWithoutUpdate(world, POS, state); + } + else + BlocksHelper.setWithoutUpdate(world, POS, END_STONE); + } + } } } } From de7c7e1cdb1ea4bdaffa8114506f083d4966a76d Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Sep 2020 10:33:48 +0300 Subject: [PATCH 2/4] Fog rendering fixes --- .../betterend/mixin/client/BackgroundRendererMixin.java | 7 +++---- .../java/ru/betterend/world/features/EndLakeFeature.java | 9 ++++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java index a9347409..08dda693 100644 --- a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java @@ -35,7 +35,6 @@ public class BackgroundRendererMixin { //private static final float SKY_RED = 21F / 255F; //private static final float SKY_GREEN = 16F / 255F; //private static final float SKY_BLUE = 20F / 255F; - private static final float NORMAL = 1.5F/ 0.12757292F; // 0.12757292F is max value for red channel after all transformations @Shadow private static float red; @@ -59,9 +58,9 @@ public class BackgroundRendererMixin { } if (!skip) { //RenderSystem.clearColor(SKY_RED, SKY_GREEN, SKY_BLUE, 0); - red *= NORMAL; - green *= NORMAL; - blue *= NORMAL; + red *= 4; + green *= 4; + blue *= 4; } } } diff --git a/src/main/java/ru/betterend/world/features/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/EndLakeFeature.java index 9a5de246..fe73d10f 100644 --- a/src/main/java/ru/betterend/world/features/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLakeFeature.java @@ -119,10 +119,13 @@ public class EndLakeFeature extends DefaultFeature { if (world.getBlockState(POS).getMaterial().isReplaceable()) { if (world.isAir(POS.up())) { BlockState state = world.getBiome(POS).getGenerationSettings().getSurfaceConfig().getTopMaterial(); - BlocksHelper.setWithoutUpdate(world, POS, state); + BlocksHelper.setWithoutUpdate(world, POS, random.nextBoolean() ? state : BlockRegistry.ENDSTONE_DUST.getDefaultState()); + BlocksHelper.setWithoutUpdate(world, POS.down(), END_STONE); + } + else { + BlocksHelper.setWithoutUpdate(world, POS, BlockRegistry.ENDSTONE_DUST.getDefaultState()); + BlocksHelper.setWithoutUpdate(world, POS.down(), END_STONE); } - else - BlocksHelper.setWithoutUpdate(world, POS, END_STONE); } } } From b89afced36698a2904729940437f548e969aeb06 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Sep 2020 12:17:32 +0300 Subject: [PATCH 3/4] Mutable registry --- .../java/ru/betterend/registry/BiomeRegistry.java | 13 +++++++++++++ .../ru/betterend/world/biome/BiomeDefinition.java | 10 ++++++++++ .../java/ru/betterend/world/biome/EndBiome.java | 4 ++++ .../ru/betterend/world/generator/BiomePicker.java | 15 +++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/src/main/java/ru/betterend/registry/BiomeRegistry.java b/src/main/java/ru/betterend/registry/BiomeRegistry.java index c6262729..7495aaf5 100644 --- a/src/main/java/ru/betterend/registry/BiomeRegistry.java +++ b/src/main/java/ru/betterend/registry/BiomeRegistry.java @@ -10,6 +10,7 @@ import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.Category; import net.minecraft.world.biome.BiomeKeys; import ru.betterend.world.biome.BiomeFoggyMushroomland; import ru.betterend.world.biome.EndBiome; @@ -33,10 +34,22 @@ public class BiomeRegistry { public static void mutateRegistry(Registry biomeRegistry) { BiomeRegistry.MUTABLE.clear(); + LAND_BIOMES.clearMutables(); + for (EndBiome biome : BiomeRegistry.LAND_BIOMES.getBiomes()) BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome); for (EndBiome biome : BiomeRegistry.VOID_BIOMES.getBiomes()) BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome); + + biomeRegistry.forEach((biome) -> { + if (biome.getCategory() == Category.THEEND) { + if (!MUTABLE.containsKey(biome) && !biomeRegistry.getId(biome).getNamespace().equals("minecraft")) { + EndBiome endBiome = new EndBiome(biome); + LAND_BIOMES.addBiomeMutable(endBiome); + KEYS.put(endBiome, biomeRegistry.getKey(biome).get()); + } + } + }); } public static EndBiome registerBiome(RegistryKey key, BiomeType type, boolean addToGen) { diff --git a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java index d96fe445..05730723 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java @@ -51,6 +51,7 @@ public class BiomeDefinition { private float fogDensity = 1F; private final Identifier id; + private float genChance = 1F; private ConfiguredSurfaceBuilder surface; @@ -86,6 +87,11 @@ public class BiomeDefinition { this.particleConfig = config; return this; } + + public BiomeDefinition setGenChance(float genChance) { + this.genChance = genChance; + return this; + } public BiomeDefinition addMobSpawn(EntityType type, int weight, int minGroupSize, int maxGroupSize) { Identifier eID = Registry.ENTITY_TYPE.getId(type); @@ -223,4 +229,8 @@ public class BiomeDefinition { public float getFodDensity() { return fogDensity; } + + public float getGenChance() { + return genChance; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index b017d6f7..5e157d5f 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -21,6 +21,7 @@ public class EndBiome { protected EndBiome biomeParent; protected float maxSubBiomeChance = 1; + protected final float genChanceUnmutable; protected float genChance = 1; private final float fogDensity; @@ -29,12 +30,14 @@ public class EndBiome { biome = definition.build(); mcID = definition.getID(); fogDensity = definition.getFodDensity(); + genChanceUnmutable = definition.getGenChance(); } public EndBiome(Biome biome) { this.biome = biome; mcID = BuiltinRegistries.BIOME.getId(biome); fogDensity = 1; + genChanceUnmutable = 1; } public void genSurfColumn(WorldAccess world, BlockPos pos, Random random) { @@ -106,6 +109,7 @@ public class EndBiome { } public float setGenChance(float chance) { + genChance = genChanceUnmutable; genChance += chance; return genChance; } diff --git a/src/main/java/ru/betterend/world/generator/BiomePicker.java b/src/main/java/ru/betterend/world/generator/BiomePicker.java index 94df9729..aae59d67 100644 --- a/src/main/java/ru/betterend/world/generator/BiomePicker.java +++ b/src/main/java/ru/betterend/world/generator/BiomePicker.java @@ -10,11 +10,26 @@ import ru.betterend.world.biome.EndBiome; public class BiomePicker { private final List biomes = Lists.newArrayList(); + private float maxChanceUnmutable = 0; private float maxChance = 0; + private int biomeCount = 0; public void addBiome(EndBiome biome) { biomes.add(biome); maxChance = biome.setGenChance(maxChance); + biomeCount ++; + maxChanceUnmutable = maxChance; + } + + public void addBiomeMutable(EndBiome biome) { + biomes.add(biome); + maxChance = biome.setGenChance(maxChance); + } + + public void clearMutables() { + maxChance = maxChanceUnmutable; + for (int i = biomes.size() - 1; i >= biomeCount; i--) + biomes.remove(i); } public EndBiome getBiome(Random random) { From 8dc7137ab45f52d6453a7f6b80360603e88fd4c4 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Sep 2020 12:51:13 +0300 Subject: [PATCH 4/4] Lake fixes --- .../java/ru/betterend/registry/FeatureRegistry.java | 2 +- .../betterend/world/biome/BiomeFoggyMushroomland.java | 4 ++-- .../java/ru/betterend/world/features/EndFeature.java | 10 +++++++--- .../ru/betterend/world/features/EndLakeFeature.java | 3 ++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index e2b1b56f..b045d1d1 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -6,7 +6,7 @@ import ru.betterend.world.features.StoneSpiralFeature; public class FeatureRegistry { public static final EndFeature STONE_SPIRAL = new EndFeature("stone_spiral", new StoneSpiralFeature(), 2); - public static final EndFeature END_LAKE = new EndFeature("end_lake", new EndLakeFeature()); + public static final EndFeature END_LAKE = EndFeature.MakeRawGenFeature("end_lake", new EndLakeFeature(), 100); public static void register() {} } diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java index cd9cf3f8..c707dcb1 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -11,7 +11,7 @@ public class BiomeFoggyMushroomland extends EndBiome { .setWaterColor(119, 227, 250) .setWaterFogColor(119, 227, 250) .setSurface(BlockRegistry.END_MOSS, BlockRegistry.END_MYCELIUM) - .addFeature(FeatureRegistry.STONE_SPIRAL) - .addFeature(FeatureRegistry.END_LAKE)); + .addFeature(FeatureRegistry.END_LAKE) + .addFeature(FeatureRegistry.STONE_SPIRAL)); } } diff --git a/src/main/java/ru/betterend/world/features/EndFeature.java b/src/main/java/ru/betterend/world/features/EndFeature.java index 383beb0a..6854aa42 100644 --- a/src/main/java/ru/betterend/world/features/EndFeature.java +++ b/src/main/java/ru/betterend/world/features/EndFeature.java @@ -5,7 +5,6 @@ import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.decorator.ChanceDecoratorConfig; -import net.minecraft.world.gen.decorator.ConfiguredDecorator; import net.minecraft.world.gen.decorator.Decorator; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeatures; @@ -19,11 +18,11 @@ public class EndFeature { private final ConfiguredFeature featureConfigured; private final GenerationStep.Feature featureStep; - public EndFeature(String name, Feature feature, GenerationStep.Feature featureStep, ConfiguredDecorator configuredDecorator) { + public EndFeature(String name, Feature feature, GenerationStep.Feature featureStep, ConfiguredFeature configuredFeature) { Identifier id = new Identifier(BetterEnd.MOD_ID, name); this.featureStep = featureStep; this.feature = Registry.register(Registry.FEATURE, id, feature); - this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(configuredDecorator)); + this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, configuredFeature); } public EndFeature(String name, Feature feature) { @@ -40,6 +39,11 @@ public class EndFeature { this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(ConfiguredFeatures.Decorators.SQUARE_HEIGHTMAP).repeatRandomly(density)); //return new EndFeature(name, feature, GenerationStep.Feature.VEGETAL_DECORATION, feature.configure(FeatureConfig.DEFAULT).decorate(ConfiguredFeatures.Decorators.SQUARE_HEIGHTMAP).repeatRandomly(4)); } + + public static EndFeature MakeRawGenFeature(String name, Feature feature, int chance) { + ConfiguredFeature configured = feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100))); + return new EndFeature(name, feature, GenerationStep.Feature.RAW_GENERATION, configured); + } public Feature getFeature() { return feature; diff --git a/src/main/java/ru/betterend/world/features/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/EndLakeFeature.java index fe73d10f..a1827005 100644 --- a/src/main/java/ru/betterend/world/features/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLakeFeature.java @@ -61,7 +61,8 @@ public class EndLakeFeature extends DefaultFeature { double r = add * 1.8 + radius * (NOISE.eval(x * 0.2, y * 0.2, z * 0.2) * 0.25 + 0.75); r *= r; if (x2 + z2 <= r) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); + if (world.getBlockState(POS).getBlock() == Blocks.END_STONE) + BlocksHelper.setWithoutUpdate(world, POS, AIR); pos = POS.down(); if (world.getBlockState(pos).getBlock() == Blocks.END_STONE) {