minecraft-src/net/minecraft/world/level/levelgen/NoiseGeneratorSettings.java
2025-07-04 01:41:11 +03:00

177 lines
6.8 KiB
Java

package net.minecraft.world.level.levelgen;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.List;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.data.worldgen.SurfaceRuleData;
import net.minecraft.resources.RegistryFileCodec;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Climate;
import net.minecraft.world.level.biome.OverworldBiomeBuilder;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
public record NoiseGeneratorSettings(
NoiseSettings noiseSettings,
BlockState defaultBlock,
BlockState defaultFluid,
NoiseRouter noiseRouter,
SurfaceRules.RuleSource surfaceRule,
List<Climate.ParameterPoint> spawnTarget,
int seaLevel,
@Deprecated boolean disableMobGeneration,
boolean aquifersEnabled,
boolean oreVeinsEnabled,
boolean useLegacyRandomSource
) {
public static final Codec<NoiseGeneratorSettings> DIRECT_CODEC = RecordCodecBuilder.create(
instance -> instance.group(
NoiseSettings.CODEC.fieldOf("noise").forGetter(NoiseGeneratorSettings::noiseSettings),
BlockState.CODEC.fieldOf("default_block").forGetter(NoiseGeneratorSettings::defaultBlock),
BlockState.CODEC.fieldOf("default_fluid").forGetter(NoiseGeneratorSettings::defaultFluid),
NoiseRouter.CODEC.fieldOf("noise_router").forGetter(NoiseGeneratorSettings::noiseRouter),
SurfaceRules.RuleSource.CODEC.fieldOf("surface_rule").forGetter(NoiseGeneratorSettings::surfaceRule),
Climate.ParameterPoint.CODEC.listOf().fieldOf("spawn_target").forGetter(NoiseGeneratorSettings::spawnTarget),
Codec.INT.fieldOf("sea_level").forGetter(NoiseGeneratorSettings::seaLevel),
Codec.BOOL.fieldOf("disable_mob_generation").forGetter(NoiseGeneratorSettings::disableMobGeneration),
Codec.BOOL.fieldOf("aquifers_enabled").forGetter(NoiseGeneratorSettings::isAquifersEnabled),
Codec.BOOL.fieldOf("ore_veins_enabled").forGetter(NoiseGeneratorSettings::oreVeinsEnabled),
Codec.BOOL.fieldOf("legacy_random_source").forGetter(NoiseGeneratorSettings::useLegacyRandomSource)
)
.apply(instance, NoiseGeneratorSettings::new)
);
public static final Codec<Holder<NoiseGeneratorSettings>> CODEC = RegistryFileCodec.create(Registries.NOISE_SETTINGS, DIRECT_CODEC);
public static final ResourceKey<NoiseGeneratorSettings> OVERWORLD = ResourceKey.create(
Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("overworld")
);
public static final ResourceKey<NoiseGeneratorSettings> LARGE_BIOMES = ResourceKey.create(
Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("large_biomes")
);
public static final ResourceKey<NoiseGeneratorSettings> AMPLIFIED = ResourceKey.create(
Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("amplified")
);
public static final ResourceKey<NoiseGeneratorSettings> NETHER = ResourceKey.create(Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("nether"));
public static final ResourceKey<NoiseGeneratorSettings> END = ResourceKey.create(Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("end"));
public static final ResourceKey<NoiseGeneratorSettings> CAVES = ResourceKey.create(Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("caves"));
public static final ResourceKey<NoiseGeneratorSettings> FLOATING_ISLANDS = ResourceKey.create(
Registries.NOISE_SETTINGS, ResourceLocation.withDefaultNamespace("floating_islands")
);
public boolean isAquifersEnabled() {
return this.aquifersEnabled;
}
public WorldgenRandom.Algorithm getRandomSource() {
return this.useLegacyRandomSource ? WorldgenRandom.Algorithm.LEGACY : WorldgenRandom.Algorithm.XOROSHIRO;
}
public static void bootstrap(BootstrapContext<NoiseGeneratorSettings> context) {
context.register(OVERWORLD, overworld(context, false, false));
context.register(LARGE_BIOMES, overworld(context, false, true));
context.register(AMPLIFIED, overworld(context, true, false));
context.register(NETHER, nether(context));
context.register(END, end(context));
context.register(CAVES, caves(context));
context.register(FLOATING_ISLANDS, floatingIslands(context));
}
private static NoiseGeneratorSettings end(BootstrapContext<?> context) {
return new NoiseGeneratorSettings(
NoiseSettings.END_NOISE_SETTINGS,
Blocks.END_STONE.defaultBlockState(),
Blocks.AIR.defaultBlockState(),
NoiseRouterData.end(context.lookup(Registries.DENSITY_FUNCTION)),
SurfaceRuleData.end(),
List.of(),
0,
true,
false,
false,
true
);
}
private static NoiseGeneratorSettings nether(BootstrapContext<?> context) {
return new NoiseGeneratorSettings(
NoiseSettings.NETHER_NOISE_SETTINGS,
Blocks.NETHERRACK.defaultBlockState(),
Blocks.LAVA.defaultBlockState(),
NoiseRouterData.nether(context.lookup(Registries.DENSITY_FUNCTION), context.lookup(Registries.NOISE)),
SurfaceRuleData.nether(),
List.of(),
32,
false,
false,
false,
true
);
}
private static NoiseGeneratorSettings overworld(BootstrapContext<?> context, boolean large, boolean amplified) {
return new NoiseGeneratorSettings(
NoiseSettings.OVERWORLD_NOISE_SETTINGS,
Blocks.STONE.defaultBlockState(),
Blocks.WATER.defaultBlockState(),
NoiseRouterData.overworld(context.lookup(Registries.DENSITY_FUNCTION), context.lookup(Registries.NOISE), amplified, large),
SurfaceRuleData.overworld(),
new OverworldBiomeBuilder().spawnTarget(),
63,
false,
true,
true,
false
);
}
private static NoiseGeneratorSettings caves(BootstrapContext<?> context) {
return new NoiseGeneratorSettings(
NoiseSettings.CAVES_NOISE_SETTINGS,
Blocks.STONE.defaultBlockState(),
Blocks.WATER.defaultBlockState(),
NoiseRouterData.caves(context.lookup(Registries.DENSITY_FUNCTION), context.lookup(Registries.NOISE)),
SurfaceRuleData.overworldLike(false, true, true),
List.of(),
32,
false,
false,
false,
true
);
}
private static NoiseGeneratorSettings floatingIslands(BootstrapContext<?> context) {
return new NoiseGeneratorSettings(
NoiseSettings.FLOATING_ISLANDS_NOISE_SETTINGS,
Blocks.STONE.defaultBlockState(),
Blocks.WATER.defaultBlockState(),
NoiseRouterData.floatingIslands(context.lookup(Registries.DENSITY_FUNCTION), context.lookup(Registries.NOISE)),
SurfaceRuleData.overworldLike(false, false, false),
List.of(),
-64,
false,
false,
false,
true
);
}
public static NoiseGeneratorSettings dummy() {
return new NoiseGeneratorSettings(
NoiseSettings.OVERWORLD_NOISE_SETTINGS,
Blocks.STONE.defaultBlockState(),
Blocks.AIR.defaultBlockState(),
NoiseRouterData.none(),
SurfaceRuleData.air(),
List.of(),
63,
true,
false,
false,
false
);
}
}