# Helix in Minecraft with WorldEdit

The Minecraft plugin WorldEdit allows you to create more complex structures.

This example shows you how to create a helix or screw. For example, a spiral staircase.

First, ensure that you are familiar with the selection tools in WorldEdit. In this picture, I selected a 10×10×13 region and `//set minecraft:air`

to clear it.

You can create arbitrary shapes with the `//gen`

(or `//g`

) command. The `//gen`

command is followed by a **block type** and an **expression**. The expression is evaluated for each block. If the expression evaluates to true or a positive number >0, the block is turned into the specified block. Note that the coordinates are normalised to -1 ... 1 with -1 and 1 the boundaries of the selected region.

For example, the command `//gen minecraft:stone y`

yields a large floating stone block in the selected region:

Remember that the `y`

in Minecraft specifies the height, and that the coordinates are normalised to a value between -1 and 1. So blocks in the bottom half of the selection have a value between -1 and 0, and blocks in the top half of the selection have a value between 0 and 1. Hence the expression `y`

evaluates to a positive number for blocks in the top half of the selection and are turned into `minecraft:stone`

.

Let's pick a more interesting expression, `atan2(x,z) < -2.5`

. The command `//gen minecraft:acacia_planks atan2(x,z) < -2.5`

.

`atan2`

is a function that returns the angle when turning rectangular coordinates (x, y) into polar coordinates (r, θ). The angle θ is in radians, with a value between -π and π. When θ is between -π and -2.5 radians, blocks are created. The result is an arc between -180° and -143°, so about 37° or a tenth of a pie.

It is possible to combine multiple functions in the expression. `//gen minecraft:acacia_planks rotate(x,z,2) ; atan2(x,z) < -2.5`

will first change the values of `x`

and `z`

to rotate 2 radians (about 115°) and then check the angle using the `atan2`

equation. Our arc is now rotated by 115°.

To create a spiral shape, the rotation should depend on the vertical coordinate (`y`

). The command `//gen minecraft:acacia_planks rotate(x,z,3*y) ; atan2(x,z) < -2.5`

yields the following shape.

In this case the rotation is `3*y`

radians, so from -3 to +3 radians. That's just shy of a full rotation (of -π to π radians).

Note that each staircase extends from the center to the edge of the selection, thus forming a staircase that's rectangular on the outside, just like the cubic selection.

In order to create a more circular staircase, we should specify an outer boundary, thus add a second constraint that the expression only evaluates to true for blocks nearest to the center. The distance to the center is `sqrt(x^2 + z^2)`

, but since we're comparing to a constant, I just square that constant. E.g. `x^2 + z^2 < 1`

. It helps to play a bit with the value, to see what gives a nice shape. E.g. `//gen minecraft:acacia_planks rotate(x,z,3*y) ; atan2(x,z) < -2.5 && x^2 + z^2 < 1.1`

(where `&&`

acts as a logical **and**) yields the following shape.

To create a wider or higher staircase, simply start of with a larger selection. In that case it might help to specify more rotations (`8*y`

ranges from -8 to +8 radians for about 2.5 revolutions), and not only to specify an outer limit `x^2 + z^2 < 1.1`

, but also an inner limit `x^2 + z^2 > 0.7`

. The following three commands are equivalent and give a large spiral staircase or helix.

`//gen minecraft:acacia_planks rotate(x,z,8*y) ; atan2(x,z) < -2.5 && x^2 + z^2 < 1.1 && x^2 + z^2 > 0.7`

`//gen minecraft:acacia_planks rotate(x,z,8*y) ; atan2(x,z) < -2.5 && abs(x^2 + z^2 - 0.9) < 0.2`

`//gen minecraft:acacia_planks rotate(x,z,8*y) ; atan2(x,z) < -2.5 && abs(sqrt(x^2 + z^2) - 0.95) < 0.1`

As a final example, it is also possible to make the diameter of the staircase depend on the vertical coordinate. Instead of a staircase with fixed diameter 0.95 and width 0.1 (`abs(sqrt(x^2 + z^2) - 0.95) < 0.1`

), let's make it 0.95 at the bottom (where `y = -1`

) and 0.05 at the top (where `y = 1`

), thus using the constraint `abs(sqrt(x^2 + z^2) +y*0.45-0.5) < 0.1`

. The full command `//gen minecraft:acacia_planks rotate(x,z,8*y) ; atan2(x,z) < -2.5 && abs(sqrt(x^2 + z^2) +y*0.45-0.5) < 0.1`

yields a screw-like thread.