LayerType - McMellonTeam/easierworldcreator GitHub Wiki

Base

To assign a BlockState to each coordinates, we need 3 things:

  • a list of BlockLayers;
  • a LayerType;
  • a PlaceType;

We're going to focus on LayerType for this page. The 2 others can be found on the wiki.

The layerPlace enums allow you to choose wich BlockLayerwill be choosen from the list of the BlockLayer. By default, the BlockLayer that will be used id the SURFACE one. You have the choice between 6 different types.

To change a BlockType, you can use the following method:

shape.setLayersType(Shape.LayersType./*the type you want*/);

SURFACE

the SURFACE BlockType is, as mention earlier, the default one. It can be used to give a natural aspect to your shape. It will choose the BlockLayer depending on the blocks on top of him.

You can see here: image image

To place the half sphere, I uses the following code:

SphereGen sphere = new SphereGen(world, pos, Shape.PlaceMoment.OTHER, 14);
sphere.setLayersType(Shape.LayersType.SURFACE);

BlockLayer layer1 = new BlockLayer(Blocks.GRASS_BLOCK.getDefaultState(), 1);
BlockLayer layer2 = new BlockLayer(Blocks.DIRT.getDefaultState(), 1);
BlockLayer layer3 = new BlockLayer(List.of(Blocks.STONE.getDefaultState(), Blocks.COBBLESTONE.getDefaultState()), 5);
BlockLayer layer4 = new BlockLayer(Blocks.DEEPSLATE.getDefaultState(), 2);
sphere.setBlockLayers(List.of(layer1, layer2, layer3, layer4));
sphere.setHalfSphere(SphereGen.SphereType.HALF);
sphere.setHalfSphereDirection(Direction.NORTH);

try {
    sphere.place();
} catch (IOException e) {
    e.printStackTrace();
}

You can see that:

  • the first BlockLayer (the grass) is put on top of the sphere with a depth of 1:
  • the second BlockLayer (the dirt) is put right under the grass with a depth of 1;
  • the third BlockLayer (the stone/ cobblestone) is put under the firt with a depth of 5;
  • the last BlockLayer (the deepslate) is put under the stone/cobblestone until the end of the shape;

the first BlockLayer will be placed on all of the structure. the second one will replace each blocks that has the first BlockLayer on top of them. Then the process is being repeated util the last BlockLayer. The blocks are placed after the end of the algorithm for performance gains (or later if PlaceMoment == PlaceMoment.WORLD_GEN).

image

INNER_RADIAL

The INNER_RADIAL LayerType will place the BlockLayer depending on the distance on the center point. image

OUTER_RADIAL

The OUTER_RADIAL LayerType will place the BlockLayer depending on the distance on the center point but with the opposite order of INNER_RADIAL. image image image

INNER_CYLINDRICAL

as you can see above, the center is a point. The INNER_CYLINDRICAL and the OUTER_CYLINDRICAL change the center point to an axis.

OUTER_CYLINDRICAL

like the OUTER_RADIAL, the OUTER_CYLINDRICAL invert the BlockLayer to choose from.

image image

ALONG_DIRECTION

the Blocks will be placed on a plan orthogonal to an axis that you have determined before.

to change the axis direction, use

shape.setLayerDirection(new Vec3d(/*coordinates*/));

The normal direction being

new Vec3d(0,1,0);

here is 2 cylinder placed with this LayerType.

One having all of it's blockLayer beign 2 block depth, the other one having all of it's BlockLayers being 1 block depth. And having this direction:

new Vec3d(1,1,0);

image