From a307cb7dc5752d8b7aea110049a303e62fa75c05 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 18:13:03 +0300 Subject: [PATCH] Neon Oasis surface fix --- .../world/biome/land/NeonOasisBiome.java | 28 +++++++++++++++++++ .../world/surface/SplitNoiseCondition.java | 21 ++++++++++++++ src/main/resources/fabric.mod.json | 2 +- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 7baa3e81..19e9d448 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -2,13 +2,23 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; +import net.minecraft.world.level.levelgen.placement.CaveSurface; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.SplitNoiseCondition; +import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; + +import java.util.List; public class NeonOasisBiome extends EndBiome.Config { public NeonOasisBiome() { @@ -47,6 +57,24 @@ public class NeonOasisBiome extends EndBiome.Config { public BlockState getAltTopMaterial() { return EndBlocks.END_MOSS.defaultBlockState(); } + + @Override + public SurfaceRuleBuilder surface() { + RuleSource surfaceBlockRule = new SwitchRuleSource( + new SplitNoiseCondition(), + List.of( + SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()), + SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()) + ) + ); + return super + .surface() + .ceil(Blocks.END_STONE.defaultBlockState()) + .rule(1, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, surfaceBlockRule)) + .rule(4, SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(5, false, false, CaveSurface.FLOOR), + SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()) + )); + } }; } } diff --git a/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java new file mode 100644 index 00000000..d3e6aa4e --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java @@ -0,0 +1,21 @@ +package ru.betterend.world.surface; + +import ru.bclib.interfaces.NumericProvider; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +/** + * Noise source that returns a value in [0, 1] + */ +public class SplitNoiseCondition implements NumericProvider { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(4141); + + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + float noise = (float) NOISE.eval(x * 0.1, z * 0.1) + MHelper.randRange(-0.4F, 0.4F, MHelper.RANDOM); + return noise > 0 ? 1 : 0; + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index cfc28d7c..f1a9638e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "depends": { "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", - "minecraft": ">=1.18.x", + "minecraft": "1.18.x", "bclib": ">=1.1.6" }, "suggests": {