package net.minecraft.world.level.levelgen; import java.util.stream.Stream; import net.minecraft.core.Holder; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.data.worldgen.TerrainProvider; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.levelgen.synth.BlendedNoise; import net.minecraft.world.level.levelgen.synth.NormalNoise; public class NoiseRouterData { public static final float GLOBAL_OFFSET = -0.50375F; private static final float ORE_THICKNESS = 0.08F; private static final double VEININESS_FREQUENCY = 1.5; private static final double NOODLE_SPACING_AND_STRAIGHTNESS = 1.5; private static final double SURFACE_DENSITY_THRESHOLD = 1.5625; private static final double CHEESE_NOISE_TARGET = -0.703125; public static final int ISLAND_CHUNK_DISTANCE = 64; public static final long ISLAND_CHUNK_DISTANCE_SQR = 4096L; private static final DensityFunction BLENDING_FACTOR = DensityFunctions.constant(10.0); private static final DensityFunction BLENDING_JAGGEDNESS = DensityFunctions.zero(); private static final ResourceKey ZERO = createKey("zero"); private static final ResourceKey Y = createKey("y"); private static final ResourceKey SHIFT_X = createKey("shift_x"); private static final ResourceKey SHIFT_Z = createKey("shift_z"); private static final ResourceKey BASE_3D_NOISE_OVERWORLD = createKey("overworld/base_3d_noise"); private static final ResourceKey BASE_3D_NOISE_NETHER = createKey("nether/base_3d_noise"); private static final ResourceKey BASE_3D_NOISE_END = createKey("end/base_3d_noise"); public static final ResourceKey CONTINENTS = createKey("overworld/continents"); public static final ResourceKey EROSION = createKey("overworld/erosion"); public static final ResourceKey RIDGES = createKey("overworld/ridges"); public static final ResourceKey RIDGES_FOLDED = createKey("overworld/ridges_folded"); public static final ResourceKey OFFSET = createKey("overworld/offset"); public static final ResourceKey FACTOR = createKey("overworld/factor"); public static final ResourceKey JAGGEDNESS = createKey("overworld/jaggedness"); public static final ResourceKey DEPTH = createKey("overworld/depth"); private static final ResourceKey SLOPED_CHEESE = createKey("overworld/sloped_cheese"); public static final ResourceKey CONTINENTS_LARGE = createKey("overworld_large_biomes/continents"); public static final ResourceKey EROSION_LARGE = createKey("overworld_large_biomes/erosion"); private static final ResourceKey OFFSET_LARGE = createKey("overworld_large_biomes/offset"); private static final ResourceKey FACTOR_LARGE = createKey("overworld_large_biomes/factor"); private static final ResourceKey JAGGEDNESS_LARGE = createKey("overworld_large_biomes/jaggedness"); private static final ResourceKey DEPTH_LARGE = createKey("overworld_large_biomes/depth"); private static final ResourceKey SLOPED_CHEESE_LARGE = createKey("overworld_large_biomes/sloped_cheese"); private static final ResourceKey OFFSET_AMPLIFIED = createKey("overworld_amplified/offset"); private static final ResourceKey FACTOR_AMPLIFIED = createKey("overworld_amplified/factor"); private static final ResourceKey JAGGEDNESS_AMPLIFIED = createKey("overworld_amplified/jaggedness"); private static final ResourceKey DEPTH_AMPLIFIED = createKey("overworld_amplified/depth"); private static final ResourceKey SLOPED_CHEESE_AMPLIFIED = createKey("overworld_amplified/sloped_cheese"); private static final ResourceKey SLOPED_CHEESE_END = createKey("end/sloped_cheese"); private static final ResourceKey SPAGHETTI_ROUGHNESS_FUNCTION = createKey("overworld/caves/spaghetti_roughness_function"); private static final ResourceKey ENTRANCES = createKey("overworld/caves/entrances"); private static final ResourceKey NOODLE = createKey("overworld/caves/noodle"); private static final ResourceKey PILLARS = createKey("overworld/caves/pillars"); private static final ResourceKey SPAGHETTI_2D_THICKNESS_MODULATOR = createKey("overworld/caves/spaghetti_2d_thickness_modulator"); private static final ResourceKey SPAGHETTI_2D = createKey("overworld/caves/spaghetti_2d"); private static ResourceKey createKey(String p_209537_) { return ResourceKey.create(Registries.DENSITY_FUNCTION, ResourceLocation.withDefaultNamespace(p_209537_)); } public static Holder bootstrap(BootstrapContext p_335193_) { HolderGetter holdergetter = p_335193_.lookup(Registries.NOISE); HolderGetter holdergetter1 = p_335193_.lookup(Registries.DENSITY_FUNCTION); p_335193_.register(ZERO, DensityFunctions.zero()); int i = DimensionType.MIN_Y * 2; int j = DimensionType.MAX_Y * 2; p_335193_.register(Y, DensityFunctions.yClampedGradient(i, j, i, j)); DensityFunction densityfunction = registerAndWrap( p_335193_, SHIFT_X, DensityFunctions.flatCache(DensityFunctions.cache2d(DensityFunctions.shiftA(holdergetter.getOrThrow(Noises.SHIFT)))) ); DensityFunction densityfunction1 = registerAndWrap( p_335193_, SHIFT_Z, DensityFunctions.flatCache(DensityFunctions.cache2d(DensityFunctions.shiftB(holdergetter.getOrThrow(Noises.SHIFT)))) ); p_335193_.register(BASE_3D_NOISE_OVERWORLD, BlendedNoise.createUnseeded(0.25, 0.125, 80.0, 160.0, 8.0)); p_335193_.register(BASE_3D_NOISE_NETHER, BlendedNoise.createUnseeded(0.25, 0.375, 80.0, 60.0, 8.0)); p_335193_.register(BASE_3D_NOISE_END, BlendedNoise.createUnseeded(0.25, 0.25, 80.0, 160.0, 4.0)); Holder holder = p_335193_.register( CONTINENTS, DensityFunctions.flatCache(DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, holdergetter.getOrThrow(Noises.CONTINENTALNESS))) ); Holder holder1 = p_335193_.register( EROSION, DensityFunctions.flatCache(DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, holdergetter.getOrThrow(Noises.EROSION))) ); DensityFunction densityfunction2 = registerAndWrap( p_335193_, RIDGES, DensityFunctions.flatCache(DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, holdergetter.getOrThrow(Noises.RIDGE))) ); p_335193_.register(RIDGES_FOLDED, peaksAndValleys(densityfunction2)); DensityFunction densityfunction3 = DensityFunctions.noise(holdergetter.getOrThrow(Noises.JAGGED), 1500.0, 0.0); registerTerrainNoises(p_335193_, holdergetter1, densityfunction3, holder, holder1, OFFSET, FACTOR, JAGGEDNESS, DEPTH, SLOPED_CHEESE, false); Holder holder2 = p_335193_.register( CONTINENTS_LARGE, DensityFunctions.flatCache(DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, holdergetter.getOrThrow(Noises.CONTINENTALNESS_LARGE))) ); Holder holder3 = p_335193_.register( EROSION_LARGE, DensityFunctions.flatCache(DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, holdergetter.getOrThrow(Noises.EROSION_LARGE))) ); registerTerrainNoises(p_335193_, holdergetter1, densityfunction3, holder2, holder3, OFFSET_LARGE, FACTOR_LARGE, JAGGEDNESS_LARGE, DEPTH_LARGE, SLOPED_CHEESE_LARGE, false); registerTerrainNoises(p_335193_, holdergetter1, densityfunction3, holder, holder1, OFFSET_AMPLIFIED, FACTOR_AMPLIFIED, JAGGEDNESS_AMPLIFIED, DEPTH_AMPLIFIED, SLOPED_CHEESE_AMPLIFIED, true); p_335193_.register(SLOPED_CHEESE_END, DensityFunctions.add(DensityFunctions.endIslands(0L), getFunction(holdergetter1, BASE_3D_NOISE_END))); p_335193_.register(SPAGHETTI_ROUGHNESS_FUNCTION, spaghettiRoughnessFunction(holdergetter)); p_335193_.register(SPAGHETTI_2D_THICKNESS_MODULATOR, DensityFunctions.cacheOnce(DensityFunctions.mappedNoise(holdergetter.getOrThrow(Noises.SPAGHETTI_2D_THICKNESS), 2.0, 1.0, -0.6, -1.3))); p_335193_.register(SPAGHETTI_2D, spaghetti2D(holdergetter1, holdergetter)); p_335193_.register(ENTRANCES, entrances(holdergetter1, holdergetter)); p_335193_.register(NOODLE, noodle(holdergetter1, holdergetter)); return p_335193_.register(PILLARS, pillars(holdergetter)); } private static void registerTerrainNoises( BootstrapContext p_330992_, HolderGetter p_256393_, DensityFunction p_224476_, Holder p_224477_, Holder p_224478_, ResourceKey p_224479_, ResourceKey p_224480_, ResourceKey p_224481_, ResourceKey p_224482_, ResourceKey p_224483_, boolean p_224484_ ) { DensityFunctions.Spline.Coordinate densityfunctions$spline$coordinate = new DensityFunctions.Spline.Coordinate(p_224477_); DensityFunctions.Spline.Coordinate densityfunctions$spline$coordinate1 = new DensityFunctions.Spline.Coordinate(p_224478_); DensityFunctions.Spline.Coordinate densityfunctions$spline$coordinate2 = new DensityFunctions.Spline.Coordinate(p_256393_.getOrThrow(RIDGES)); DensityFunctions.Spline.Coordinate densityfunctions$spline$coordinate3 = new DensityFunctions.Spline.Coordinate(p_256393_.getOrThrow(RIDGES_FOLDED)); DensityFunction densityfunction = registerAndWrap( p_330992_, p_224479_, splineWithBlending( DensityFunctions.add( DensityFunctions.constant(-0.50375F), DensityFunctions.spline( TerrainProvider.overworldOffset( densityfunctions$spline$coordinate, densityfunctions$spline$coordinate1, densityfunctions$spline$coordinate3, p_224484_ ) ) ), DensityFunctions.blendOffset() ) ); DensityFunction densityfunction1 = registerAndWrap( p_330992_, p_224480_, splineWithBlending( DensityFunctions.spline( TerrainProvider.overworldFactor( densityfunctions$spline$coordinate, densityfunctions$spline$coordinate1, densityfunctions$spline$coordinate2, densityfunctions$spline$coordinate3, p_224484_ ) ), BLENDING_FACTOR ) ); DensityFunction densityfunction2 = registerAndWrap( p_330992_, p_224482_, DensityFunctions.add(DensityFunctions.yClampedGradient(-64, 320, 1.5, -1.5), densityfunction) ); DensityFunction densityfunction3 = registerAndWrap( p_330992_, p_224481_, splineWithBlending( DensityFunctions.spline( TerrainProvider.overworldJaggedness( densityfunctions$spline$coordinate, densityfunctions$spline$coordinate1, densityfunctions$spline$coordinate2, densityfunctions$spline$coordinate3, p_224484_ ) ), BLENDING_JAGGEDNESS ) ); DensityFunction densityfunction4 = DensityFunctions.mul(densityfunction3, p_224476_.halfNegative()); DensityFunction densityfunction5 = noiseGradientDensity(densityfunction1, DensityFunctions.add(densityfunction2, densityfunction4)); p_330992_.register(p_224483_, DensityFunctions.add(densityfunction5, getFunction(p_256393_, BASE_3D_NOISE_OVERWORLD))); } private static DensityFunction registerAndWrap(BootstrapContext p_331307_, ResourceKey p_255905_, DensityFunction p_255856_) { return new DensityFunctions.HolderHolder(p_331307_.register(p_255905_, p_255856_)); } private static DensityFunction getFunction(HolderGetter p_256312_, ResourceKey p_256077_) { return new DensityFunctions.HolderHolder(p_256312_.getOrThrow(p_256077_)); } private static DensityFunction peaksAndValleys(DensityFunction p_224438_) { return DensityFunctions.mul( DensityFunctions.add( DensityFunctions.add(p_224438_.abs(), DensityFunctions.constant(-0.6666666666666666)).abs(), DensityFunctions.constant(-0.3333333333333333) ), DensityFunctions.constant(-3.0) ); } public static float peaksAndValleys(float p_224436_) { return -(Math.abs(Math.abs(p_224436_) - 0.6666667F) - 0.33333334F) * 3.0F; } private static DensityFunction spaghettiRoughnessFunction(HolderGetter p_255763_) { DensityFunction densityfunction = DensityFunctions.noise(p_255763_.getOrThrow(Noises.SPAGHETTI_ROUGHNESS)); DensityFunction densityfunction1 = DensityFunctions.mappedNoise(p_255763_.getOrThrow(Noises.SPAGHETTI_ROUGHNESS_MODULATOR), 0.0, -0.1); return DensityFunctions.cacheOnce( DensityFunctions.mul(densityfunction1, DensityFunctions.add(densityfunction.abs(), DensityFunctions.constant(-0.4))) ); } private static DensityFunction entrances(HolderGetter p_256511_, HolderGetter p_255899_) { DensityFunction densityfunction = DensityFunctions.cacheOnce(DensityFunctions.noise(p_255899_.getOrThrow(Noises.SPAGHETTI_3D_RARITY), 2.0, 1.0)); DensityFunction densityfunction1 = DensityFunctions.mappedNoise(p_255899_.getOrThrow(Noises.SPAGHETTI_3D_THICKNESS), -0.065, -0.088); DensityFunction densityfunction2 = DensityFunctions.weirdScaledSampler( densityfunction, p_255899_.getOrThrow(Noises.SPAGHETTI_3D_1), DensityFunctions.WeirdScaledSampler.RarityValueMapper.TYPE1 ); DensityFunction densityfunction3 = DensityFunctions.weirdScaledSampler( densityfunction, p_255899_.getOrThrow(Noises.SPAGHETTI_3D_2), DensityFunctions.WeirdScaledSampler.RarityValueMapper.TYPE1 ); DensityFunction densityfunction4 = DensityFunctions.add(DensityFunctions.max(densityfunction2, densityfunction3), densityfunction1) .clamp(-1.0, 1.0); DensityFunction densityfunction5 = getFunction(p_256511_, SPAGHETTI_ROUGHNESS_FUNCTION); DensityFunction densityfunction6 = DensityFunctions.noise(p_255899_.getOrThrow(Noises.CAVE_ENTRANCE), 0.75, 0.5); DensityFunction densityfunction7 = DensityFunctions.add( DensityFunctions.add(densityfunction6, DensityFunctions.constant(0.37)), DensityFunctions.yClampedGradient(-10, 30, 0.3, 0.0) ); return DensityFunctions.cacheOnce(DensityFunctions.min(densityfunction7, DensityFunctions.add(densityfunction5, densityfunction4))); } private static DensityFunction noodle(HolderGetter p_256402_, HolderGetter p_255632_) { DensityFunction densityfunction = getFunction(p_256402_, Y); int i = -64; int j = -60; int k = 320; DensityFunction densityfunction1 = yLimitedInterpolatable(densityfunction, DensityFunctions.noise(p_255632_.getOrThrow(Noises.NOODLE), 1.0, 1.0), -60, 320, -1); DensityFunction densityfunction2 = yLimitedInterpolatable( densityfunction, DensityFunctions.mappedNoise(p_255632_.getOrThrow(Noises.NOODLE_THICKNESS), 1.0, 1.0, -0.05, -0.1), -60, 320, 0 ); double d0 = 2.6666666666666665; DensityFunction densityfunction3 = yLimitedInterpolatable( densityfunction, DensityFunctions.noise(p_255632_.getOrThrow(Noises.NOODLE_RIDGE_A), 2.6666666666666665, 2.6666666666666665), -60, 320, 0 ); DensityFunction densityfunction4 = yLimitedInterpolatable( densityfunction, DensityFunctions.noise(p_255632_.getOrThrow(Noises.NOODLE_RIDGE_B), 2.6666666666666665, 2.6666666666666665), -60, 320, 0 ); DensityFunction densityfunction5 = DensityFunctions.mul( DensityFunctions.constant(1.5), DensityFunctions.max(densityfunction3.abs(), densityfunction4.abs()) ); return DensityFunctions.rangeChoice( densityfunction1, -1000000.0, 0.0, DensityFunctions.constant(64.0), DensityFunctions.add(densityfunction2, densityfunction5) ); } private static DensityFunction pillars(HolderGetter p_255985_) { double d0 = 25.0; double d1 = 0.3; DensityFunction densityfunction = DensityFunctions.noise(p_255985_.getOrThrow(Noises.PILLAR), 25.0, 0.3); DensityFunction densityfunction1 = DensityFunctions.mappedNoise(p_255985_.getOrThrow(Noises.PILLAR_RARENESS), 0.0, -2.0); DensityFunction densityfunction2 = DensityFunctions.mappedNoise(p_255985_.getOrThrow(Noises.PILLAR_THICKNESS), 0.0, 1.1); DensityFunction densityfunction3 = DensityFunctions.add( DensityFunctions.mul(densityfunction, DensityFunctions.constant(2.0)), densityfunction1 ); return DensityFunctions.cacheOnce(DensityFunctions.mul(densityfunction3, densityfunction2.cube())); } private static DensityFunction spaghetti2D(HolderGetter p_256535_, HolderGetter p_255650_) { DensityFunction densityfunction = DensityFunctions.noise(p_255650_.getOrThrow(Noises.SPAGHETTI_2D_MODULATOR), 2.0, 1.0); DensityFunction densityfunction1 = DensityFunctions.weirdScaledSampler( densityfunction, p_255650_.getOrThrow(Noises.SPAGHETTI_2D), DensityFunctions.WeirdScaledSampler.RarityValueMapper.TYPE2 ); DensityFunction densityfunction2 = DensityFunctions.mappedNoise(p_255650_.getOrThrow(Noises.SPAGHETTI_2D_ELEVATION), 0.0, Math.floorDiv(-64, 8), 8.0); DensityFunction densityfunction3 = getFunction(p_256535_, SPAGHETTI_2D_THICKNESS_MODULATOR); DensityFunction densityfunction4 = DensityFunctions.add(densityfunction2, DensityFunctions.yClampedGradient(-64, 320, 8.0, -40.0)).abs(); DensityFunction densityfunction5 = DensityFunctions.add(densityfunction4, densityfunction3).cube(); double d0 = 0.083; DensityFunction densityfunction6 = DensityFunctions.add( densityfunction1, DensityFunctions.mul(DensityFunctions.constant(0.083), densityfunction3) ); return DensityFunctions.max(densityfunction6, densityfunction5).clamp(-1.0, 1.0); } private static DensityFunction underground( HolderGetter p_256548_, HolderGetter p_256236_, DensityFunction p_256658_ ) { DensityFunction densityfunction = getFunction(p_256548_, SPAGHETTI_2D); DensityFunction densityfunction1 = getFunction(p_256548_, SPAGHETTI_ROUGHNESS_FUNCTION); DensityFunction densityfunction2 = DensityFunctions.noise(p_256236_.getOrThrow(Noises.CAVE_LAYER), 8.0); DensityFunction densityfunction3 = DensityFunctions.mul(DensityFunctions.constant(4.0), densityfunction2.square()); DensityFunction densityfunction4 = DensityFunctions.noise(p_256236_.getOrThrow(Noises.CAVE_CHEESE), 0.6666666666666666); DensityFunction densityfunction5 = DensityFunctions.add( DensityFunctions.add(DensityFunctions.constant(0.27), densityfunction4).clamp(-1.0, 1.0), DensityFunctions.add(DensityFunctions.constant(1.5), DensityFunctions.mul(DensityFunctions.constant(-0.64), p_256658_)) .clamp(0.0, 0.5) ); DensityFunction densityfunction6 = DensityFunctions.add(densityfunction3, densityfunction5); DensityFunction densityfunction7 = DensityFunctions.min( DensityFunctions.min(densityfunction6, getFunction(p_256548_, ENTRANCES)), DensityFunctions.add(densityfunction, densityfunction1) ); DensityFunction densityfunction8 = getFunction(p_256548_, PILLARS); DensityFunction densityfunction9 = DensityFunctions.rangeChoice( densityfunction8, -1000000.0, 0.03, DensityFunctions.constant(-1000000.0), densityfunction8 ); return DensityFunctions.max(densityfunction7, densityfunction9); } private static DensityFunction postProcess(DensityFunction p_224493_) { DensityFunction densityfunction = DensityFunctions.blendDensity(p_224493_); return DensityFunctions.mul(DensityFunctions.interpolated(densityfunction), DensityFunctions.constant(0.64)).squeeze(); } protected static NoiseRouter overworld( HolderGetter p_255681_, HolderGetter p_256005_, boolean p_255649_, boolean p_255617_ ) { DensityFunction densityfunction = DensityFunctions.noise(p_256005_.getOrThrow(Noises.AQUIFER_BARRIER), 0.5); DensityFunction densityfunction1 = DensityFunctions.noise(p_256005_.getOrThrow(Noises.AQUIFER_FLUID_LEVEL_FLOODEDNESS), 0.67); DensityFunction densityfunction2 = DensityFunctions.noise(p_256005_.getOrThrow(Noises.AQUIFER_FLUID_LEVEL_SPREAD), 0.7142857142857143); DensityFunction densityfunction3 = DensityFunctions.noise(p_256005_.getOrThrow(Noises.AQUIFER_LAVA)); DensityFunction densityfunction4 = getFunction(p_255681_, SHIFT_X); DensityFunction densityfunction5 = getFunction(p_255681_, SHIFT_Z); DensityFunction densityfunction6 = DensityFunctions.shiftedNoise2d( densityfunction4, densityfunction5, 0.25, p_256005_.getOrThrow(p_255649_ ? Noises.TEMPERATURE_LARGE : Noises.TEMPERATURE) ); DensityFunction densityfunction7 = DensityFunctions.shiftedNoise2d( densityfunction4, densityfunction5, 0.25, p_256005_.getOrThrow(p_255649_ ? Noises.VEGETATION_LARGE : Noises.VEGETATION) ); DensityFunction densityfunction8 = getFunction(p_255681_, p_255649_ ? FACTOR_LARGE : (p_255617_ ? FACTOR_AMPLIFIED : FACTOR)); DensityFunction densityfunction9 = getFunction(p_255681_, p_255649_ ? DEPTH_LARGE : (p_255617_ ? DEPTH_AMPLIFIED : DEPTH)); DensityFunction densityfunction10 = noiseGradientDensity(DensityFunctions.cache2d(densityfunction8), densityfunction9); DensityFunction densityfunction11 = getFunction(p_255681_, p_255649_ ? SLOPED_CHEESE_LARGE : (p_255617_ ? SLOPED_CHEESE_AMPLIFIED : SLOPED_CHEESE)); DensityFunction densityfunction12 = DensityFunctions.min( densityfunction11, DensityFunctions.mul(DensityFunctions.constant(5.0), getFunction(p_255681_, ENTRANCES)) ); DensityFunction densityfunction13 = DensityFunctions.rangeChoice( densityfunction11, -1000000.0, 1.5625, densityfunction12, underground(p_255681_, p_256005_, densityfunction11) ); DensityFunction densityfunction14 = DensityFunctions.min(postProcess(slideOverworld(p_255617_, densityfunction13)), getFunction(p_255681_, NOODLE)); DensityFunction densityfunction15 = getFunction(p_255681_, Y); int i = Stream.of(OreVeinifier.VeinType.values()).mapToInt(p_224495_ -> p_224495_.minY).min().orElse(-DimensionType.MIN_Y * 2); int j = Stream.of(OreVeinifier.VeinType.values()).mapToInt(p_224457_ -> p_224457_.maxY).max().orElse(-DimensionType.MIN_Y * 2); DensityFunction densityfunction16 = yLimitedInterpolatable(densityfunction15, DensityFunctions.noise(p_256005_.getOrThrow(Noises.ORE_VEININESS), 1.5, 1.5), i, j, 0); float f = 4.0F; DensityFunction densityfunction17 = yLimitedInterpolatable(densityfunction15, DensityFunctions.noise(p_256005_.getOrThrow(Noises.ORE_VEIN_A), 4.0, 4.0), i, j, 0) .abs(); DensityFunction densityfunction18 = yLimitedInterpolatable(densityfunction15, DensityFunctions.noise(p_256005_.getOrThrow(Noises.ORE_VEIN_B), 4.0, 4.0), i, j, 0) .abs(); DensityFunction densityfunction19 = DensityFunctions.add( DensityFunctions.constant(-0.08F), DensityFunctions.max(densityfunction17, densityfunction18) ); DensityFunction densityfunction20 = DensityFunctions.noise(p_256005_.getOrThrow(Noises.ORE_GAP)); return new NoiseRouter( densityfunction, densityfunction1, densityfunction2, densityfunction3, densityfunction6, densityfunction7, getFunction(p_255681_, p_255649_ ? CONTINENTS_LARGE : CONTINENTS), getFunction(p_255681_, p_255649_ ? EROSION_LARGE : EROSION), densityfunction9, getFunction(p_255681_, RIDGES), slideOverworld(p_255617_, DensityFunctions.add(densityfunction10, DensityFunctions.constant(-0.703125)).clamp(-64.0, 64.0)), densityfunction14, densityfunction16, densityfunction19, densityfunction20 ); } private static NoiseRouter noNewCaves( HolderGetter p_255724_, HolderGetter p_255986_, DensityFunction p_256378_ ) { DensityFunction densityfunction = getFunction(p_255724_, SHIFT_X); DensityFunction densityfunction1 = getFunction(p_255724_, SHIFT_Z); DensityFunction densityfunction2 = DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, p_255986_.getOrThrow(Noises.TEMPERATURE)); DensityFunction densityfunction3 = DensityFunctions.shiftedNoise2d(densityfunction, densityfunction1, 0.25, p_255986_.getOrThrow(Noises.VEGETATION)); DensityFunction densityfunction4 = postProcess(p_256378_); return new NoiseRouter( DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), densityfunction2, densityfunction3, DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), densityfunction4, DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero() ); } private static DensityFunction slideOverworld(boolean p_224490_, DensityFunction p_224491_) { return slide(p_224491_, -64, 384, p_224490_ ? 16 : 80, p_224490_ ? 0 : 64, -0.078125, 0, 24, p_224490_ ? 0.4 : 0.1171875); } private static DensityFunction slideNetherLike(HolderGetter p_256084_, int p_255802_, int p_255834_) { return slide(getFunction(p_256084_, BASE_3D_NOISE_NETHER), p_255802_, p_255834_, 24, 0, 0.9375, -8, 24, 2.5); } private static DensityFunction slideEndLike(DensityFunction p_224440_, int p_224441_, int p_224442_) { return slide(p_224440_, p_224441_, p_224442_, 72, -184, -23.4375, 4, 32, -0.234375); } protected static NoiseRouter nether(HolderGetter p_256256_, HolderGetter p_256169_) { return noNewCaves(p_256256_, p_256169_, slideNetherLike(p_256256_, 0, 128)); } protected static NoiseRouter caves(HolderGetter p_256088_, HolderGetter p_255675_) { return noNewCaves(p_256088_, p_255675_, slideNetherLike(p_256088_, -64, 192)); } protected static NoiseRouter floatingIslands(HolderGetter p_256633_, HolderGetter p_255902_) { return noNewCaves(p_256633_, p_255902_, slideEndLike(getFunction(p_256633_, BASE_3D_NOISE_END), 0, 256)); } private static DensityFunction slideEnd(DensityFunction p_224506_) { return slideEndLike(p_224506_, 0, 128); } protected static NoiseRouter end(HolderGetter p_256079_) { DensityFunction densityfunction = DensityFunctions.cache2d(DensityFunctions.endIslands(0L)); DensityFunction densityfunction1 = postProcess(slideEnd(getFunction(p_256079_, SLOPED_CHEESE_END))); return new NoiseRouter( DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), densityfunction, DensityFunctions.zero(), DensityFunctions.zero(), slideEnd(DensityFunctions.add(densityfunction, DensityFunctions.constant(-0.703125))), densityfunction1, DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero() ); } protected static NoiseRouter none() { return new NoiseRouter( DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero() ); } private static DensityFunction splineWithBlending(DensityFunction p_224454_, DensityFunction p_224455_) { DensityFunction densityfunction = DensityFunctions.lerp(DensityFunctions.blendAlpha(), p_224455_, p_224454_); return DensityFunctions.flatCache(DensityFunctions.cache2d(densityfunction)); } private static DensityFunction noiseGradientDensity(DensityFunction p_212272_, DensityFunction p_212273_) { DensityFunction densityfunction = DensityFunctions.mul(p_212273_, p_212272_); return DensityFunctions.mul(DensityFunctions.constant(4.0), densityfunction.quarterNegative()); } private static DensityFunction yLimitedInterpolatable(DensityFunction p_209472_, DensityFunction p_209473_, int p_209474_, int p_209475_, int p_209476_) { return DensityFunctions.interpolated(DensityFunctions.rangeChoice(p_209472_, p_209474_, p_209475_ + 1, p_209473_, DensityFunctions.constant(p_209476_))); } private static DensityFunction slide( DensityFunction p_224444_, int p_224445_, int p_224446_, int p_224447_, int p_224448_, double p_224449_, int p_224450_, int p_224451_, double p_224452_ ) { DensityFunction densityfunction1 = DensityFunctions.yClampedGradient(p_224445_ + p_224446_ - p_224447_, p_224445_ + p_224446_ - p_224448_, 1.0, 0.0); DensityFunction $$9 = DensityFunctions.lerp(densityfunction1, p_224449_, p_224444_); DensityFunction densityfunction2 = DensityFunctions.yClampedGradient(p_224445_ + p_224450_, p_224445_ + p_224451_, 0.0, 1.0); return DensityFunctions.lerp(densityfunction2, p_224452_, $$9); } protected static final class QuantizedSpaghettiRarity { protected static double getSphaghettiRarity2D(double p_209564_) { if (p_209564_ < -0.75) { return 0.5; } else if (p_209564_ < -0.5) { return 0.75; } else if (p_209564_ < 0.5) { return 1.0; } else { return p_209564_ < 0.75 ? 2.0 : 3.0; } } protected static double getSpaghettiRarity3D(double p_209566_) { if (p_209566_ < -0.5) { return 0.75; } else if (p_209566_ < 0.0) { return 1.0; } else { return p_209566_ < 0.5 ? 1.5 : 2.0; } } } }