254 lines
11 KiB
Java
254 lines
11 KiB
Java
package net.minecraft.data.worldgen.placement;
|
|
|
|
import net.minecraft.core.Direction;
|
|
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.features.CaveFeatures;
|
|
import net.minecraft.data.worldgen.features.VegetationFeatures;
|
|
import net.minecraft.resources.ResourceKey;
|
|
import net.minecraft.util.valueproviders.ClampedNormalInt;
|
|
import net.minecraft.util.valueproviders.ConstantInt;
|
|
import net.minecraft.util.valueproviders.UniformInt;
|
|
import net.minecraft.world.level.levelgen.Heightmap;
|
|
import net.minecraft.world.level.levelgen.VerticalAnchor;
|
|
import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate;
|
|
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
|
import net.minecraft.world.level.levelgen.placement.BiomeFilter;
|
|
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
|
import net.minecraft.world.level.levelgen.placement.EnvironmentScanPlacement;
|
|
import net.minecraft.world.level.levelgen.placement.HeightRangePlacement;
|
|
import net.minecraft.world.level.levelgen.placement.InSquarePlacement;
|
|
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
|
import net.minecraft.world.level.levelgen.placement.RandomOffsetPlacement;
|
|
import net.minecraft.world.level.levelgen.placement.RarityFilter;
|
|
import net.minecraft.world.level.levelgen.placement.SurfaceRelativeThresholdFilter;
|
|
|
|
public class CavePlacements {
|
|
public static final ResourceKey<PlacedFeature> MONSTER_ROOM = PlacementUtils.createKey("monster_room");
|
|
public static final ResourceKey<PlacedFeature> MONSTER_ROOM_DEEP = PlacementUtils.createKey("monster_room_deep");
|
|
public static final ResourceKey<PlacedFeature> FOSSIL_UPPER = PlacementUtils.createKey("fossil_upper");
|
|
public static final ResourceKey<PlacedFeature> FOSSIL_LOWER = PlacementUtils.createKey("fossil_lower");
|
|
public static final ResourceKey<PlacedFeature> DRIPSTONE_CLUSTER = PlacementUtils.createKey("dripstone_cluster");
|
|
public static final ResourceKey<PlacedFeature> LARGE_DRIPSTONE = PlacementUtils.createKey("large_dripstone");
|
|
public static final ResourceKey<PlacedFeature> POINTED_DRIPSTONE = PlacementUtils.createKey("pointed_dripstone");
|
|
public static final ResourceKey<PlacedFeature> UNDERWATER_MAGMA = PlacementUtils.createKey("underwater_magma");
|
|
public static final ResourceKey<PlacedFeature> GLOW_LICHEN = PlacementUtils.createKey("glow_lichen");
|
|
public static final ResourceKey<PlacedFeature> ROOTED_AZALEA_TREE = PlacementUtils.createKey("rooted_azalea_tree");
|
|
public static final ResourceKey<PlacedFeature> CAVE_VINES = PlacementUtils.createKey("cave_vines");
|
|
public static final ResourceKey<PlacedFeature> LUSH_CAVES_VEGETATION = PlacementUtils.createKey("lush_caves_vegetation");
|
|
public static final ResourceKey<PlacedFeature> LUSH_CAVES_CLAY = PlacementUtils.createKey("lush_caves_clay");
|
|
public static final ResourceKey<PlacedFeature> LUSH_CAVES_CEILING_VEGETATION = PlacementUtils.createKey("lush_caves_ceiling_vegetation");
|
|
public static final ResourceKey<PlacedFeature> SPORE_BLOSSOM = PlacementUtils.createKey("spore_blossom");
|
|
public static final ResourceKey<PlacedFeature> CLASSIC_VINES = PlacementUtils.createKey("classic_vines_cave_feature");
|
|
public static final ResourceKey<PlacedFeature> AMETHYST_GEODE = PlacementUtils.createKey("amethyst_geode");
|
|
public static final ResourceKey<PlacedFeature> SCULK_PATCH_DEEP_DARK = PlacementUtils.createKey("sculk_patch_deep_dark");
|
|
public static final ResourceKey<PlacedFeature> SCULK_PATCH_ANCIENT_CITY = PlacementUtils.createKey("sculk_patch_ancient_city");
|
|
public static final ResourceKey<PlacedFeature> SCULK_VEIN = PlacementUtils.createKey("sculk_vein");
|
|
|
|
public static void bootstrap(BootstrapContext<PlacedFeature> context) {
|
|
HolderGetter<ConfiguredFeature<?, ?>> holderGetter = context.lookup(Registries.CONFIGURED_FEATURE);
|
|
Holder<ConfiguredFeature<?, ?>> holder = holderGetter.getOrThrow(CaveFeatures.MONSTER_ROOM);
|
|
Holder<ConfiguredFeature<?, ?>> holder2 = holderGetter.getOrThrow(CaveFeatures.FOSSIL_COAL);
|
|
Holder<ConfiguredFeature<?, ?>> holder3 = holderGetter.getOrThrow(CaveFeatures.FOSSIL_DIAMONDS);
|
|
Holder<ConfiguredFeature<?, ?>> holder4 = holderGetter.getOrThrow(CaveFeatures.DRIPSTONE_CLUSTER);
|
|
Holder<ConfiguredFeature<?, ?>> holder5 = holderGetter.getOrThrow(CaveFeatures.LARGE_DRIPSTONE);
|
|
Holder<ConfiguredFeature<?, ?>> holder6 = holderGetter.getOrThrow(CaveFeatures.POINTED_DRIPSTONE);
|
|
Holder<ConfiguredFeature<?, ?>> holder7 = holderGetter.getOrThrow(CaveFeatures.UNDERWATER_MAGMA);
|
|
Holder<ConfiguredFeature<?, ?>> holder8 = holderGetter.getOrThrow(CaveFeatures.GLOW_LICHEN);
|
|
Holder<ConfiguredFeature<?, ?>> holder9 = holderGetter.getOrThrow(CaveFeatures.ROOTED_AZALEA_TREE);
|
|
Holder<ConfiguredFeature<?, ?>> holder10 = holderGetter.getOrThrow(CaveFeatures.CAVE_VINE);
|
|
Holder<ConfiguredFeature<?, ?>> holder11 = holderGetter.getOrThrow(CaveFeatures.MOSS_PATCH);
|
|
Holder<ConfiguredFeature<?, ?>> holder12 = holderGetter.getOrThrow(CaveFeatures.LUSH_CAVES_CLAY);
|
|
Holder<ConfiguredFeature<?, ?>> holder13 = holderGetter.getOrThrow(CaveFeatures.MOSS_PATCH_CEILING);
|
|
Holder<ConfiguredFeature<?, ?>> holder14 = holderGetter.getOrThrow(CaveFeatures.SPORE_BLOSSOM);
|
|
Holder<ConfiguredFeature<?, ?>> holder15 = holderGetter.getOrThrow(VegetationFeatures.VINES);
|
|
Holder<ConfiguredFeature<?, ?>> holder16 = holderGetter.getOrThrow(CaveFeatures.AMETHYST_GEODE);
|
|
Holder<ConfiguredFeature<?, ?>> holder17 = holderGetter.getOrThrow(CaveFeatures.SCULK_PATCH_DEEP_DARK);
|
|
Holder<ConfiguredFeature<?, ?>> holder18 = holderGetter.getOrThrow(CaveFeatures.SCULK_PATCH_ANCIENT_CITY);
|
|
Holder<ConfiguredFeature<?, ?>> holder19 = holderGetter.getOrThrow(CaveFeatures.SCULK_VEIN);
|
|
PlacementUtils.register(
|
|
context,
|
|
MONSTER_ROOM,
|
|
holder,
|
|
CountPlacement.of(10),
|
|
InSquarePlacement.spread(),
|
|
HeightRangePlacement.uniform(VerticalAnchor.absolute(0), VerticalAnchor.top()),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
MONSTER_ROOM_DEEP,
|
|
holder,
|
|
CountPlacement.of(4),
|
|
InSquarePlacement.spread(),
|
|
HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(6), VerticalAnchor.absolute(-1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
FOSSIL_UPPER,
|
|
holder2,
|
|
RarityFilter.onAverageOnceEvery(64),
|
|
InSquarePlacement.spread(),
|
|
HeightRangePlacement.uniform(VerticalAnchor.absolute(0), VerticalAnchor.top()),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
FOSSIL_LOWER,
|
|
holder3,
|
|
RarityFilter.onAverageOnceEvery(64),
|
|
InSquarePlacement.spread(),
|
|
HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(-8)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
DRIPSTONE_CLUSTER,
|
|
holder4,
|
|
CountPlacement.of(UniformInt.of(48, 96)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
LARGE_DRIPSTONE,
|
|
holder5,
|
|
CountPlacement.of(UniformInt.of(10, 48)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
POINTED_DRIPSTONE,
|
|
holder6,
|
|
CountPlacement.of(UniformInt.of(192, 256)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
CountPlacement.of(UniformInt.of(1, 5)),
|
|
RandomOffsetPlacement.of(ClampedNormalInt.of(0.0F, 3.0F, -10, 10), ClampedNormalInt.of(0.0F, 0.6F, -2, 2)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
UNDERWATER_MAGMA,
|
|
holder7,
|
|
CountPlacement.of(UniformInt.of(44, 52)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
SurfaceRelativeThresholdFilter.of(Heightmap.Types.OCEAN_FLOOR_WG, Integer.MIN_VALUE, -2),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
GLOW_LICHEN,
|
|
holder8,
|
|
CountPlacement.of(UniformInt.of(104, 157)),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
InSquarePlacement.spread(),
|
|
SurfaceRelativeThresholdFilter.of(Heightmap.Types.OCEAN_FLOOR_WG, Integer.MIN_VALUE, -13),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
ROOTED_AZALEA_TREE,
|
|
holder9,
|
|
CountPlacement.of(UniformInt.of(1, 2)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.UP, BlockPredicate.solid(), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(-1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
CAVE_VINES,
|
|
holder10,
|
|
CountPlacement.of(188),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.UP, BlockPredicate.hasSturdyFace(Direction.DOWN), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(-1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
LUSH_CAVES_VEGETATION,
|
|
holder11,
|
|
CountPlacement.of(125),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.DOWN, BlockPredicate.solid(), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
LUSH_CAVES_CLAY,
|
|
holder12,
|
|
CountPlacement.of(62),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.DOWN, BlockPredicate.solid(), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
LUSH_CAVES_CEILING_VEGETATION,
|
|
holder13,
|
|
CountPlacement.of(125),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.UP, BlockPredicate.solid(), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(-1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
SPORE_BLOSSOM,
|
|
holder14,
|
|
CountPlacement.of(25),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
EnvironmentScanPlacement.scanningFor(Direction.UP, BlockPredicate.solid(), BlockPredicate.ONLY_IN_AIR_PREDICATE, 12),
|
|
RandomOffsetPlacement.vertical(ConstantInt.of(-1)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context, CLASSIC_VINES, holder15, CountPlacement.of(256), InSquarePlacement.spread(), PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT, BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
AMETHYST_GEODE,
|
|
holder16,
|
|
RarityFilter.onAverageOnceEvery(24),
|
|
InSquarePlacement.spread(),
|
|
HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(6), VerticalAnchor.absolute(30)),
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(
|
|
context,
|
|
SCULK_PATCH_DEEP_DARK,
|
|
holder17,
|
|
CountPlacement.of(ConstantInt.of(256)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
BiomeFilter.biome()
|
|
);
|
|
PlacementUtils.register(context, SCULK_PATCH_ANCIENT_CITY, holder18);
|
|
PlacementUtils.register(
|
|
context,
|
|
SCULK_VEIN,
|
|
holder19,
|
|
CountPlacement.of(UniformInt.of(204, 250)),
|
|
InSquarePlacement.spread(),
|
|
PlacementUtils.RANGE_BOTTOM_TO_MAX_TERRAIN_HEIGHT,
|
|
BiomeFilter.biome()
|
|
);
|
|
}
|
|
}
|