Class IcebergFeature
java.lang.Object
net.minecraft.world.level.levelgen.feature.Feature<BlockStateConfiguration>
net.minecraft.world.level.levelgen.feature.IcebergFeature
This feature generates part of the icebergs found in frozen oceans.
Specifically, it generates tall, triangular prism icebergs, and "donut" or torus shaped icebergs.
Other icebergs are generated by the frozen ocean surface builder instead.
-
Field Summary
Fields inherited from class net.minecraft.world.level.levelgen.feature.Feature
BAMBOO, BASALT_COLUMNS, BASALT_PILLAR, BLOCK_COLUMN, BLOCK_PILE, BLUE_ICE, BONUS_CHEST, CHORUS_PLANT, CORAL_CLAW, CORAL_MUSHROOM, CORAL_TREE, DELTA_FEATURE, DESERT_WELL, DISK, DRIPSTONE_CLUSTER, END_GATEWAY, END_ISLAND, END_PLATFORM, END_SPIKE, FILL_LAYER, FLOWER, FOREST_ROCK, FOSSIL, FREEZE_TOP_LAYER, GEODE, GLOWSTONE_BLOB, HUGE_BROWN_MUSHROOM, HUGE_FUNGUS, HUGE_RED_MUSHROOM, ICE_SPIKE, ICEBERG, KELP, LAKE, LARGE_DRIPSTONE, MONSTER_ROOM, MULTIFACE_GROWTH, NETHER_FOREST_VEGETATION, NO_BONEMEAL_FLOWER, NO_OP, ORE, POINTED_DRIPSTONE, RANDOM_BOOLEAN_SELECTOR, RANDOM_PATCH, RANDOM_SELECTOR, REPLACE_BLOBS, REPLACE_SINGLE_BLOCK, ROOT_SYSTEM, SCATTERED_ORE, SCULK_PATCH, SEA_PICKLE, SEAGRASS, SIMPLE_BLOCK, SIMPLE_RANDOM_SELECTOR, SPRING, TREE, TWISTING_VINES, UNDERWATER_MAGMA, VEGETATION_PATCH, VINES, VOID_START_PLATFORM, WATERLOGGED_VEGETATION_PATCH, WEEPING_VINES
-
Constructor Summary
ConstructorsConstructorDescriptionIcebergFeature
(com.mojang.serialization.Codec<BlockStateConfiguration> p_66017_) -
Method Summary
Modifier and TypeMethodDescriptionprivate boolean
belowIsAir
(BlockGetter pLevel, BlockPos pPos) private void
carve
(int pRadius, int pLocalY, BlockPos pPos, LevelAccessor pLevel, boolean pPlaceWater, double pPerpendicularAngle, BlockPos pEllipseOrigin, int pMajorRadius, int pMinorRadius) private void
generateCutOut
(RandomSource pRandom, LevelAccessor pLevel, int pMajorAxis, int pHeight, BlockPos pPos, boolean pElliptical, int pEllipseRadius, double pAngle, int pMinorAxis) private void
generateIcebergBlock
(LevelAccessor pLevel, RandomSource pRandom, BlockPos pPos, int pHeight, int pLocalX, int pLocalY, int pLocalZ, int pRadius, int pMajorRadius, boolean pElliptical, int pMinorRadius, double pAngle, boolean pPlaceSnow, BlockState pState) private int
getEllipseC
(int pY, int pHeight, int pMinorAxis) private int
heightDependentRadiusEllipse
(int pY, int pHeight, int pMaxRadius) Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value.private int
heightDependentRadiusRound
(RandomSource pRandom, int pY, int pHeight, int pMajorAxis) private int
heightDependentRadiusSteep
(RandomSource pRandom, int pY, int pHeight, int pMaxRadius) Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value.private static boolean
isIcebergState
(BlockState pState) boolean
place
(FeaturePlaceContext<BlockStateConfiguration> pContext) Places the given feature at the given location.private void
removeFloatingSnowLayer
(LevelAccessor pLevel, BlockPos pPos) private void
setIcebergBlock
(BlockPos pPos, LevelAccessor pLevel, RandomSource pRandom, int pHeightRemaining, int pHeight, boolean pElliptical, boolean pPlaceSnow, BlockState pState) private double
signedDistanceCircle
(int pX, int pZ, BlockPos pCenter, int pRadius, RandomSource pRandom) private double
signedDistanceEllipse
(int pX, int pZ, BlockPos pCenter, int pMajorRadius, int pMinorRadius, double pAngle) Given an ellipse defined by the equation(x/a)^2 + (y/b)^2 = 1
, wherea
andb
are the semi-major and semi-minor axes respectively, this computes the distance between an arbitrary point and the ellipse.private void
smooth
(LevelAccessor pLevel, BlockPos pPos, int pMajorRadius, int pHeight, boolean pElliptical, int pMinorRadius) Smooths out an iceberg by removing blocks which either have air below, or non-iceberg blocks on three or more horizontal sides, with air.Methods inherited from class net.minecraft.world.level.levelgen.feature.Feature
checkNeighbors, configuredCodec, isAdjacentToAir, isDirt, isGrassOrDirt, isReplaceable, isStone, markAboveForPostProcessing, place, safeSetBlock, setBlock
-
Constructor Details
-
IcebergFeature
-
-
Method Details
-
place
Places the given feature at the given location. During world generation, features are provided with a 3x3 region of chunks, centered on the chunk being generated, that they can safely generate into.- Specified by:
place
in classFeature<BlockStateConfiguration>
- Parameters:
pContext
- A context object with a reference to the level and the position the feature is being placed at
-
generateCutOut
private void generateCutOut(RandomSource pRandom, LevelAccessor pLevel, int pMajorAxis, int pHeight, BlockPos pPos, boolean pElliptical, int pEllipseRadius, double pAngle, int pMinorAxis) -
carve
private void carve(int pRadius, int pLocalY, BlockPos pPos, LevelAccessor pLevel, boolean pPlaceWater, double pPerpendicularAngle, BlockPos pEllipseOrigin, int pMajorRadius, int pMinorRadius) -
removeFloatingSnowLayer
-
generateIcebergBlock
private void generateIcebergBlock(LevelAccessor pLevel, RandomSource pRandom, BlockPos pPos, int pHeight, int pLocalX, int pLocalY, int pLocalZ, int pRadius, int pMajorRadius, boolean pElliptical, int pMinorRadius, double pAngle, boolean pPlaceSnow, BlockState pState) -
setIcebergBlock
private void setIcebergBlock(BlockPos pPos, LevelAccessor pLevel, RandomSource pRandom, int pHeightRemaining, int pHeight, boolean pElliptical, boolean pPlaceSnow, BlockState pState) -
getEllipseC
private int getEllipseC(int pY, int pHeight, int pMinorAxis) -
signedDistanceCircle
private double signedDistanceCircle(int pX, int pZ, BlockPos pCenter, int pRadius, RandomSource pRandom) -
signedDistanceEllipse
private double signedDistanceEllipse(int pX, int pZ, BlockPos pCenter, int pMajorRadius, int pMinorRadius, double pAngle) Given an ellipse defined by the equation(x/a)^2 + (y/b)^2 = 1
, wherea
andb
are the semi-major and semi-minor axes respectively, this computes the distance between an arbitrary point and the ellipse. The point (x, y) is within the ellipse if the return value is invalid input: '<' 0, outside the ellipse if the return value is > 0 and exactly on the edge of the ellipse if the return value is 0.- Parameters:
pX
- The x position of the point to measure the distance to.pZ
- The z position of the point to measure distance to.pCenter
- The center point of the ellipse.pMajorRadius
- The semi-major axis (a
) of the ellipse.pMinorRadius
- The semi-minor axis (b
) of the ellipsepAngle
- The rotation angle of the ellipse (the angle from the positive horizontal axis to the ellipse's major axis).
-
heightDependentRadiusRound
-
heightDependentRadiusEllipse
private int heightDependentRadiusEllipse(int pY, int pHeight, int pMaxRadius) Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value. The radius curve is a parabolic function, resulting in more rounded iceberg peaks.- Parameters:
pY
- The y value to calculate a radius at.pHeight
- The maximum height of the iceberg.pMaxRadius
- The maximum radius of the iceberg, at the horizontal.
-
heightDependentRadiusSteep
Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value. The radius curve is a linear function, with a slope that is both dependent on themajorAxis
and randomly varies, which results in steep conical icebergs.- Parameters:
pRandom
- A random to use to vary the slope of the falloff curve.pY
- The y value to calculate a radius at.pHeight
- The maximum height of the iceberg.pMaxRadius
- The maximum radius radius of the iceberg, at the horizontal.
-
isIcebergState
-
belowIsAir
-
smooth
private void smooth(LevelAccessor pLevel, BlockPos pPos, int pMajorRadius, int pHeight, boolean pElliptical, int pMinorRadius) Smooths out an iceberg by removing blocks which either have air below, or non-iceberg blocks on three or more horizontal sides, with air.
-