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 Feature
BAMBOO, BASALT_COLUMNS, BASALT_PILLAR, BLOCK_BLOB, 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, FALLEN_TREE, FILL_LAYER, FLOWER, FOSSIL, FREEZE_TOP_LAYER, GEODE, GLOWSTONE_BLOB, HUGE_BROWN_MUSHROOM, HUGE_FUNGUS, HUGE_RED_MUSHROOM, 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, SPIKE, 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> codec) -
Method Summary
Modifier and TypeMethodDescriptionprivate booleanbelowIsAir(BlockGetter level, BlockPos pos) private voidcarve(int radius, int yOff, BlockPos globalOrigin, LevelAccessor level, boolean underWater, double angle, BlockPos localOrigin, int shapeEllipseA, int shapeEllipseC) private voidgenerateCutOut(RandomSource random, LevelAccessor level, int width, int height, BlockPos globalOrigin, boolean isEllipse, int shapeEllipseA, double shapeAngle, int shapeEllipseC) private voidgenerateIcebergBlock(LevelAccessor level, RandomSource random, BlockPos origin, int height, int xo, int yOff, int zo, int radius, int a, boolean isEllipse, int shapeEllipseC, double shapeAngle, boolean snowOnTop, BlockState mainBlockState) private intgetEllipseC(int yOff, int height, int shapeEllipseC) private intheightDependentRadiusEllipse(int yOff, int height, int width) Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value.private intheightDependentRadiusRound(RandomSource random, int yOff, int height, int width) private intheightDependentRadiusSteep(RandomSource random, int yOff, int height, int width) Given a horizontal projection of an iceberg, defines the three-dimensional extrusion by defining a radius at any given y value.private static booleanisIcebergState(BlockState state) booleanplace(FeaturePlaceContext<BlockStateConfiguration> context) Places the given feature at the given location.private voidremoveFloatingSnowLayer(LevelAccessor level, BlockPos pos) private voidsetIcebergBlock(BlockPos pos, LevelAccessor level, RandomSource random, int hDiff, int height, boolean isEllipse, boolean snowOnTop, BlockState mainBlockState) private doublesignedDistanceCircle(int xo, int zo, BlockPos origin, int radius, RandomSource random) private doublesignedDistanceEllipse(int xo, int zo, BlockPos origin, int a, int c, double angle) Given an ellipse defined by the equation(x/a)^2 + (y/b)^2 = 1, whereaandbare the semi-major and semi-minor axes respectively, this computes the distance between an arbitrary point and the ellipse.private voidsmooth(LevelAccessor level, BlockPos origin, int width, int height, boolean isEllipse, int shapeEllipseA) 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 Feature
checkNeighbors, configuredCodec, isAdjacentToAir, isReplaceable, markAboveForPostProcessing, place, safeSetBlock, setBlock
-
Constructor Details
-
IcebergFeature
-
-
Method Details
-
place
Description copied from class:FeaturePlaces 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:
placein classFeature<BlockStateConfiguration>- Parameters:
context- A context object with a reference to the level and the position the feature is being placed at
-
generateCutOut
private void generateCutOut(RandomSource random, LevelAccessor level, int width, int height, BlockPos globalOrigin, boolean isEllipse, int shapeEllipseA, double shapeAngle, int shapeEllipseC) -
carve
private void carve(int radius, int yOff, BlockPos globalOrigin, LevelAccessor level, boolean underWater, double angle, BlockPos localOrigin, int shapeEllipseA, int shapeEllipseC) -
removeFloatingSnowLayer
-
generateIcebergBlock
private void generateIcebergBlock(LevelAccessor level, RandomSource random, BlockPos origin, int height, int xo, int yOff, int zo, int radius, int a, boolean isEllipse, int shapeEllipseC, double shapeAngle, boolean snowOnTop, BlockState mainBlockState) -
setIcebergBlock
private void setIcebergBlock(BlockPos pos, LevelAccessor level, RandomSource random, int hDiff, int height, boolean isEllipse, boolean snowOnTop, BlockState mainBlockState) -
getEllipseC
private int getEllipseC(int yOff, int height, int shapeEllipseC) -
signedDistanceCircle
private double signedDistanceCircle(int xo, int zo, BlockPos origin, int radius, RandomSource random) -
signedDistanceEllipse
Given an ellipse defined by the equation(x/a)^2 + (y/b)^2 = 1, whereaandbare 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:
xo- The x position of the point to measure the distance to.zo- The z position of the point to measure distance to.origin- The center point of the ellipse.a- The semi-major axis (a) of the ellipse.c- The semi-minor axis (b) of the ellipseangle- 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 yOff, int height, int width) 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:
yOff- The y value to calculate a radius at.height- The maximum height of the iceberg.width- 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 themajorAxisand randomly varies, which results in steep conical icebergs.- Parameters:
random- A random to use to vary the slope of the falloff curve.yOff- The y value to calculate a radius at.height- The maximum height of the iceberg.width- The maximum radius radius of the iceberg, at the horizontal.
-
isIcebergState
-
belowIsAir
-
smooth
private void smooth(LevelAccessor level, BlockPos origin, int width, int height, boolean isEllipse, int shapeEllipseA) Smooths out an iceberg by removing blocks which either have air below, or non-iceberg blocks on three or more horizontal sides, with air.
-