Class SphereGen
java.lang.Object
net.rodofire.easierworldcreator.shape.block.instanciator.AbstractBlockShape
net.rodofire.easierworldcreator.shape.block.instanciator.AbstractFillableBlockShape
net.rodofire.easierworldcreator.shape.block.gen.SphereGen
Class to generate sphere related shapes
The Main purpose of this class is to generate the coordinates based on a shape. The coordinates are organized depending on a
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
LongOpenHashSetfor 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
BlockPosare saved under long usingLongPosHelper. It saves some memory since that we save four bytes of data for eachBlockPos, 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 intoLongOpenHashSetis extremely faster compared to only adding aBlockPos. ~60- 70% facter.
Dividing Coordinates into Chunk has some advantages :
- allow a multithreaded block assignement when using
LayerManager - allow to be used during WG, when using
DividedBlockListManageror when placing usingShapePlacer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumenum to define the type of the sphereNested classes/interfaces inherited from class net.rodofire.easierworldcreator.shape.block.instanciator.AbstractFillableBlockShape
AbstractFillableBlockShape.FillingType -
Field Summary
FieldsFields inherited from class net.rodofire.easierworldcreator.shape.block.instanciator.AbstractFillableBlockShape
customFill, fillingTypeFields inherited from class net.rodofire.easierworldcreator.shape.block.instanciator.AbstractBlockShape
centerPos, centerX, centerY, centerZ, chunkMap, covered, lastChunkX, lastChunkZ, rotator -
Constructor Summary
ConstructorsConstructorDescriptionSphereGen(@NotNull net.minecraft.util.math.BlockPos pos, int radius) init the shape generationSphereGen(@NotNull net.minecraft.util.math.BlockPos pos, Rotator rotator, int radiusX, int radiusY, int radiusZ, SphereGen.SphereType halfSphere) init the Sphere ShapeSphereGen(net.minecraft.util.math.BlockPos pos, Rotator rotator, int radiusX, int radiusY, int radiusZ, float customFill, AbstractFillableBlockShape.FillingType fillingType) -
Method Summary
Modifier and TypeMethodDescriptionvoidgenerateEmptyEllipsoid(int minLarge, int maxLarge, int minHeight, int maxHeight) voidvoidgenerateFullEllipsoid(int minX, int maxX, int minY, int maxY, int minZ, int maxZ) allow you to generate a full ellipsoidit.unimi.dsi.fastutil.longs.LongOpenHashSetMethod to know the chunks that will be covered by the shape.Map<net.minecraft.util.math.ChunkPos, it.unimi.dsi.fastutil.longs.LongOpenHashSet> method to get the coordinates that will be placed latervoidplace(net.minecraft.world.StructureWorldAccess world, BlockLayerManager blockLayerManager) if you don't need to use a shape layer, you can directly place the shape to avoid allocating unnecessary posvoidsetHalfSphere(SphereGen.SphereType halfSphere) Sets the half-sphere type. * * @param halfSphere The half-sphere type to set.voidsetHalfSphereDirection(net.minecraft.util.math.Direction direction) Sets the direction of the half-sphere. * * @param direction The direction to set.voidsetRadiusX(int radiusX) Sets the X radius of the sphere. * * @param radiusX The X radius to set.voidsetRadiusY(int radiusY) Sets the Y radius of the sphere. * * @param radiusY The Y radius to set.voidsetRadiusZ(int radiusZ) Sets the Z radius of the sphere. * * @param radiusZ The Z radius to set.Methods inherited from class net.rodofire.easierworldcreator.shape.block.instanciator.AbstractFillableBlockShape
setCustomFill, setFill, setFillingTypeMethods inherited from class net.rodofire.easierworldcreator.shape.block.instanciator.AbstractBlockShape
modifyChunkMap, setRotator, shouldAddChunk, shouldAddChunkPrecomputedX
-
Field Details
-
CODEC
-
-
Constructor Details
-
SphereGen
public SphereGen(@NotNull @NotNull net.minecraft.util.math.BlockPos pos, Rotator rotator, int radiusX, int radiusY, int radiusZ, SphereGen.SphereType halfSphere) init the Sphere Shape- Parameters:
pos- the center of the spiralradiusX- the radius on the x-axisradiusY- the radius on the y-axisradiusZ- the radius on the z-axishalfSphere- determines if the sphere is half or not
-
SphereGen
public SphereGen(@NotNull @NotNull net.minecraft.util.math.BlockPos pos, int radius) init the shape generation- Parameters:
pos- the pos of the structure centerradius- the radius of the sphere
-
SphereGen
public SphereGen(net.minecraft.util.math.BlockPos pos, Rotator rotator, int radiusX, int radiusY, int radiusZ, float customFill, AbstractFillableBlockShape.FillingType fillingType)
-
-
Method Details
-
setHalfSphereDirection
public void setHalfSphereDirection(net.minecraft.util.math.Direction direction) Sets the direction of the half-sphere. * * @param direction The direction to set. -
setHalfSphere
Sets the half-sphere type. * * @param halfSphere The half-sphere type to set. -
setRadiusX
public void setRadiusX(int radiusX) Sets the X radius of the sphere. * * @param radiusX The X radius to set. -
setRadiusY
public void setRadiusY(int radiusY) Sets the Y radius of the sphere. * * @param radiusY The Y radius to set. -
setRadiusZ
public void setRadiusZ(int radiusZ) Sets the Z radius of the sphere. * * @param radiusZ The Z radius to set. -
getShapeCoordinates
public Map<net.minecraft.util.math.ChunkPos,it.unimi.dsi.fastutil.longs.LongOpenHashSet> getShapeCoordinates()Description copied from class:AbstractBlockShapemethod to get the coordinates that will be placed later- Specified by:
getShapeCoordinatesin classAbstractBlockShape- Returns:
- a map of ChunkPos of blockPos for every shape
-
getCoveredChunks
public it.unimi.dsi.fastutil.longs.LongOpenHashSet getCoveredChunks()Description copied from class:AbstractBlockShapeMethod to know the chunks that will be covered by the shape. This avoids generating all the structure, enhancing performance- Specified by:
getCoveredChunksin classAbstractBlockShape- Returns:
- a set of chunkPos.
For performance reasons, we use long instead of
ChunkPos.To convert the long into a
ChunkPos, use the long in a constructor.
-
place
public void place(net.minecraft.world.StructureWorldAccess world, BlockLayerManager blockLayerManager) Description copied from class:AbstractBlockShapeif you don't need to use a shape layer, you can directly place the shape to avoid allocating unnecessary pos- Specified by:
placein classAbstractBlockShape
-
generateEmptyEllipsoid
public void generateEmptyEllipsoid(int minLarge, int maxLarge, int minHeight, int maxHeight) -
generateFullEllipsoid
public void generateFullEllipsoid() -
generateFullEllipsoid
public void generateFullEllipsoid(int minX, int maxX, int minY, int maxY, int minZ, int maxZ) allow you to generate a full ellipsoid- Parameters:
minX- the start of the circle on the x-axismaxX- the end of the circle on the x-axisminY- the start of the circle on the y-axismaxY- the end of the circle on the y-axisminZ- the start of the circle on the z-axismaxZ- the end of the circle on the z-axis
-