Class IcebergFeature

java.lang.Object
net.minecraft.world.level.levelgen.feature.Feature<BlockStateConfiguration>
net.minecraft.world.level.levelgen.feature.IcebergFeature

public class IcebergFeature extends Feature<BlockStateConfiguration>
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.
  • Constructor Details

  • Method Details

    • place

      public boolean place(FeaturePlaceContext<BlockStateConfiguration> context)
      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 class Feature<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 majorAxis, int height, BlockPos pos, boolean elliptical, int ellipseRadius, double angle, int minorAxis)
    • carve

      private void carve(int radius, int localY, BlockPos pos, LevelAccessor level, boolean placeWater, double perpendicularAngle, BlockPos ellipseOrigin, int majorRadius, int minorRadius)
    • removeFloatingSnowLayer

      private void removeFloatingSnowLayer(LevelAccessor level, BlockPos pos)
    • generateIcebergBlock

      private void generateIcebergBlock(LevelAccessor level, RandomSource random, BlockPos pos, int height, int localX, int localY, int localZ, int radius, int majorRadius, boolean elliptical, int minorRadius, double angle, boolean placeSnow, BlockState state)
    • setIcebergBlock

      private void setIcebergBlock(BlockPos pos, LevelAccessor level, RandomSource random, int heightRemaining, int height, boolean elliptical, boolean placeSnow, BlockState state)
    • getEllipseC

      private int getEllipseC(int y, int height, int minorAxis)
    • signedDistanceCircle

      private double signedDistanceCircle(int x, int z, BlockPos center, int radius, RandomSource random)
    • signedDistanceEllipse

      private double signedDistanceEllipse(int x, int z, BlockPos center, int majorRadius, int minorRadius, double angle)
      Given an ellipse defined by the equation (x/a)^2 + (y/b)^2 = 1, where a and b 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:
      x - The x position of the point to measure the distance to.
      z - The z position of the point to measure distance to.
      center - The center point of the ellipse.
      majorRadius - The semi-major axis (a) of the ellipse.
      minorRadius - The semi-minor axis (b) of the ellipse
      angle - The rotation angle of the ellipse (the angle from the positive horizontal axis to the ellipse's major axis).
    • heightDependentRadiusRound

      private int heightDependentRadiusRound(RandomSource random, int y, int height, int majorAxis)
    • heightDependentRadiusEllipse

      private int heightDependentRadiusEllipse(int y, int height, int maxRadius)
      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:
      y - The y value to calculate a radius at.
      height - The maximum height of the iceberg.
      maxRadius - The maximum radius of the iceberg, at the horizontal.
    • heightDependentRadiusSteep

      private int heightDependentRadiusSteep(RandomSource random, int y, int height, int maxRadius)
      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 the majorAxis and randomly varies, which results in steep conical icebergs.
      Parameters:
      random - A random to use to vary the slope of the falloff curve.
      y - The y value to calculate a radius at.
      height - The maximum height of the iceberg.
      maxRadius - The maximum radius radius of the iceberg, at the horizontal.
    • isIcebergState

      private static boolean isIcebergState(BlockState state)
    • belowIsAir

      private boolean belowIsAir(BlockGetter level, BlockPos pos)
    • smooth

      private void smooth(LevelAccessor level, BlockPos pos, int majorRadius, int height, boolean elliptical, int minorRadius)
      Smooths out an iceberg by removing blocks which either have air below, or non-iceberg blocks on three or more horizontal sides, with air.