177 lines
6.8 KiB
Java
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
|
|
);
|
|
}
|
|
}
|