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
//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
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
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.