public class SpiralGen extends AbstractBlockShape
Class to generate spiral related shapes
The Main purpose of this class is to generate the coordinates based on a shape. The coordinates are organized depending on a Map<ChunkPos, LongOpenHashSet>.

It emply some things:

  • The coordinates are divided in chunk
  • It uses LongOpenHashSet for several reasons.
    • First, We use a set to avoid doing unnecessary calculations on the shape. It ensures that no duplicate is present.
    • Second, it compresses the BlockPos: The BlockPos are saved under long using LongPosHelper. It saves some memory since that we save four bytes of data for each BlockPos, and there should not have overhead since that we use primitive data type.
    • Third, since that we use primitive data types and that they take less memory, coordinate generation, accession or deletion is much faster than using a Set<BlockPos>. Encoding and decoding blockPos and then adding it into LongOpenHashSetis extremely faster compared to only adding a BlockPos. ~60- 70% facter.

Dividing Coordinates into Chunk has some advantages :

  • Constructor Details

    • SpiralGen

      public SpiralGen(@NotNull @NotNull net.minecraft.util.math.BlockPos pos, Rotator rotator, net.minecraft.util.Pair<Integer,Integer> radiusX, net.minecraft.util.Pair<Integer,Integer> radiusZ, int height, float turnNumber)
      init the Spiral Shape
      Parameters:
      pos - the center of the spiral
      radiusX - the radius on the x-axis. The first value corresponding to the radius at the base of the spiral, the second, corresponding to the radius at the top of the spiral
      radiusZ - the radius on the z-axis. The first value corresponding to the radius at the base of the spiral, the second, corresponding to the radius at the top of the spiral
      height - the height of the spiral
      turnNumber - the number of turn that the spiral will do (ex: 1 -> 1 turn, 3.5 -> 3.5 turn)
    • SpiralGen

      public SpiralGen(@NotNull @NotNull net.minecraft.util.math.BlockPos pos, int radius, int height)
      Parameters:
      pos - the center of the spiral
      radius - the radius of the spiral
      height - the height of the spiral
  • Method Details

    • getOutlineRadiusZ

      public float getOutlineRadiusZ()
    • setOutlineRadiusZ

      public void setOutlineRadiusZ(int outlineRadiusZ)
    • getOutlineRadiusX

      public float getOutlineRadiusX()
    • setOutlineRadiusX

      public void setOutlineRadiusX(int outlineRadiusX)
    • getSpiralFilling

      public float getSpiralFilling()
    • setSpiralFilling

      public void setSpiralFilling(float spiralFilling)
    • getSpiralType

      public SpiralGen.SpiralType getSpiralType()
    • setSpiralType

      public void setSpiralType(SpiralGen.SpiralType spiralType)
    • getHeight

      public int getHeight()
    • setHeight

      public void setHeight(int height)
    • getRadiusZ

      public net.minecraft.util.Pair<Integer,Integer> getRadiusZ()
    • getStartRadiusZ

      public int getStartRadiusZ()
    • getStartRadiusX

      public int getStartRadiusX()
    • getEndRadiusZ

      public int getEndRadiusZ()
    • getEndRadiusX

      public int getEndRadiusX()
    • setRadiusZ

      public void setRadiusZ(net.minecraft.util.Pair<Integer,Integer> radiusZ)
    • getRadiusX

      public net.minecraft.util.Pair<Integer,Integer> getRadiusX()
    • setRadiusX

      public void setRadiusX(net.minecraft.util.Pair<Integer,Integer> radiusX)
    • setEndRadiusX

      public void setEndRadiusX(int endRadiusX)
    • setEndRadiusZ

      public void setEndRadiusZ(int endRadiusZ)
    • setStartRadiusX

      public void setStartRadiusX(int startRadiusX)
    • setStartRadiusZ

      public void setStartRadiusZ(int startRadiusZ)
    • getTurnNumber

      public float getTurnNumber()
    • setTurnNumber

      public void setTurnNumber(float turnNumber)
    • getSpiralOffset

      public int getSpiralOffset()
    • setSpiralOffset

      public void setSpiralOffset(int spiralOffset)
      Parameters:
      spiralOffset - the offset of the start of the spiral
    • getHelicoidAngle

      public net.minecraft.util.Pair<Integer,Integer> getHelicoidAngle()
    • setHelicoidAngle

      public void setHelicoidAngle(net.minecraft.util.Pair<Integer,Integer> helicoidAngle)
      Parameters:
      helicoidAngle - the start and the end angle of the blocks on the side
    • getShapeCoordinates

      public Map<net.minecraft.util.math.ChunkPos,it.unimi.dsi.fastutil.longs.LongOpenHashSet> getShapeCoordinates()
      Description copied from class: AbstractBlockShape
      method to get the coordinates that will be placed later
      Specified by:
      getShapeCoordinates in class AbstractBlockShape
      Returns:
      a map of ChunkPos of blockPos for every shape
    • generateEllipsoidSpiral

      public void generateEllipsoidSpiral(net.minecraft.util.math.BlockPos pos)
      generates a simple spiral
      Parameters:
      pos - the center of the spiral. This can be changed to match certain needing like when generating a large outline
    • generateLargeOutlineSpiral

      public void generateLargeOutlineSpiral()
      this allows the generation of a large outline spiral.
    • generateHelicoid

      public void generateHelicoid()
      generates a helicoid if the SpiralGen.SpiralType is set to HELICOID or DOUBLE_HELICOID with their variants
    • getXRadius

      public float getXRadius(float percentage)
      this method returns the xRadius depending on the height we are at
      Parameters:
      percentage - the percentage of the height we are at
      Returns:
      the x radius of the spiral
    • getZRadius

      public float getZRadius(float percentage)
      this method returns the zRadius depending on the height we are at
      Parameters:
      percentage - the percentage of the height we are at
      Returns:
      the x radius of the spiral
    • getAngle

      public int getAngle(float percentage)
      this method returns the helicoïdAngle depending on the height we are at
      Parameters:
      percentage - the percentage of the height we are at
      Returns:
      the angle of the spiral