Async WorldEdit-style plugin for PowerNukkitX (Minecraft Bedrock servers).
Wand, brushes, schematics, undo/redo — without the lag.
Install
Requires PowerNukkitX 3.0.x (plugin API 3.0.0). For PNX 2.x servers, stay
on FastEdit 1.0.5.
Drop FastEdit-1.3.0.jar into your server's plugins/ folder.
Restart the server.
In-game: //wand to get the wooden axe.
That's it. No config file, no permissions to set up (commands default to op).
Every command works with both syntaxes: /wandand//wand. The double
slash is rewritten to single slash transparently, so muscle-memory from
Java's WorldEdit still works.
Quick start
//wand # gives you the FastEdit wooden axe
[left-click] # sets position 1 on the clicked block
[right-click] # sets position 2
//size # shows the size of your selection
//set stone # fills it with stone
//undo # changed your mind
You can also stand somewhere and use //pos1 / //pos2 instead of the wand.
Selecting
Command
What it does
//wand
Get the wooden axe. Break = pos1, right-click = pos2.
//pos1
Set pos1 to your current block.
//pos2
Set pos2 to your current block.
//sel
Show the current selection.
//sel clear
Clear it.
//size
Show width × height × length and the block count.
//expand <n> [dir]
Grow the selection (see below).
//expandrod
Get the blaze rod that grows it by clicking.
Building shapes
Everything below operates on your current selection (or for //sphere,
, , at your feet):
//cyl
//pyramid
//set <pattern> fill the selection
//replace <mask> <pattern> replace blocks matching the mask
//walls <pattern> outer walls of the selection
//sphere <pattern> <radius> [hollow] sphere at your feet
//cyl <pattern> <radius> <height> [hollow]
//pyramid <pattern> <size> [hollow]
Examples:
//set oak_planks
//set 70%stone,30%cobblestone ~70% stone, ~30% cobble
//replace dirt grass_block only swap dirt blocks
//replace #air glass fill air with glass
//walls bricks
//sphere glowstone 6
//cyl water 4 12 hollow hollow water cylinder
//pyramid sandstone 8
Patterns
What you write as <pattern>:
Syntax
Meaning
stone
a single block
minecraft:stone
same, fully qualified
50%stone,50%dirt
weighted random
stone,dirt,grass_block
equal-weight random
oak_stairs[weirdo_direction=2]
a specific block state
Orientation is kept
Stairs, slabs, logs, trapdoors, doors, walls and everything else that has a
facing keep it when you replace them. //replace oak_stairs stone_brick_stairs
swaps the material and leaves every step pointing the way it already did,
upside-down ones included — it does not flatten the whole staircase into
the default east-facing state.
It works across block families too, through whatever property each one uses
for the same idea:
//replace oak_stairs stone_brick_stairs facing + upside-down carried over
//replace cobblestone_slab oak_slab top/bottom half carried over
//replace oak_log birch_log axis carried over
//replace oak_stairs oak_slab an upside-down stair becomes a top slab
//replace wooden_door iron_door facing, hinge, open, upper half
To set an orientation instead of inheriting it, spell it out — anything you
write by hand wins over the old block:
//set oak_log[pillar_axis=y] stand every log upright
//replace oak_stairs oak_stairs[weirdo_direction=0] point them all east
/inspect (right-click a block) now prints the block's full state — exactly
the form a pattern takes, so you can paste it straight back. An unknown
property name is reported with the list of the real ones.
Masks
What you write as <mask> (e.g. for //replace):
Syntax
Meaning
*
any block
#air
only air
#solid
anything that isn't air
stone
only this block
stone,dirt
any of these
!stone
anything except stone
oak_stairs[upside_down_bit=true]
only blocks in that state
Clipboard
//copy copy the selection (anchor = where you stand)
//cut same as copy, then clears the selection
//paste paste at your feet
//paste -noair paste but keep existing blocks where the clip is air
//rotate <90|180|270> rotate clipboard around Y
//flip <x|y|z> mirror the clipboard
Default //pasteoverwrites everything in the paste box, including with
air blocks from the clipboard. Use -noair if you want to overlay the
clipboard on existing terrain without clearing the gaps.
Move & stack
//move <amount> [direction] move the selection (and update pos1/pos2)
//stack <count> [direction] duplicate the selection N times in a row
direction is one of: up, down, north, south, east, west, or
me (the direction you're facing — default, including up and down).
//stack 5 east copy your selection 5 times to the east
//stack 3 stack it upward/downward when looking up/down
//move 10 up push the selection 10 blocks up
Expand the selection
Grow your current selection without re-selecting it — same idea as Java
WorldEdit's //expand.
//expand <amount> [direction] grow one side
//expand <amount> <reverse> [direction] grow both opposite sides at once
//expand <amount> n,w several directions in one go
//expand vert stretch to the world's build limits
direction is the same set as //move: up, down, north, south,
east, west, or me / back (relative to where you're looking — me
is the default if you omit it, and it accounts for looking up or down).
//expand 10 up raise the top of the selection by 10
//expand 5 5 up add 5 above and 5 below
//expand 8 me push it 8 blocks the way you're facing
//expand vert floor-to-ceiling on the same footprint
Expand rod
//expandrod
[click any block face]
//expandrod gives you a blaze rod. Left- or right-click a block and
the selection grows 1 block toward the face you clicked — top face
grows it up, north face grows it north, and so on. Handy for nudging a
selection out by hand instead of re-typing coordinates. (You need a
selection first; set it with //wand, //pos1///pos2.)
Undo / Redo
//undo [count] undo the last N edits (default: 1)
//redo [count] redo
Each player keeps the last 20 edits in memory. Cleared on server restart.
Schematics
FastEdit reads three formats:
Extension
Origin
Notes
.mcstructure
Bedrock native
The default save format.
.schem
Sponge (WorldEdit / FAWE / Axiom)
Java-edition blocks are translated.
.schematic
Legacy MCEdit
Older format; numeric IDs.
Two folders are scanned, in this order:
plugins/FastEdit/schematics/ — drop your downloaded .schem files here
The world's structures/ folder — anything saved via vanilla /structure save, SimpleWorldEdit, or FastEdit's own //schem save
//schem list list everything FastEdit can see
//schem load <name> load it into your clipboard
//schem save <name> save the clipboard as .mcstructure
//paste drop it in the world
Java → Bedrock blocks
Schematics made on Java Edition reference block names that don't always exist
on Bedrock (minecraft:stonebrick, minecraft:terracotta, minecraft:wool,
etc.). FastEdit translates the common ones automatically.
For anything genuinely unknown, FastEdit places minecraft:magenta_wool
as a visible placeholder and remembers the original Java ID. After pasting:
//paste "FastEdit | pasted 8421 blocks. (37 placeholders)"
/inspect gives you the FastEdit Inspector stick
[right-click a pink block] shows "current: minecraft:magenta_wool"
"original (Java): minecraft:stonebrick"
You can then fix the placeholders with a regular //replace:
//pos1 ... //pos2 ... select the area you pasted into
//replace minecraft:magenta_wool minecraft:stone_bricks
The mapping is persisted to plugins/FastEdit/unknown_blocks.dat, so the
inspector still works after a restart.
Brushes (paint with a shovel)
Brushes are stored inside your shovel — give different shovels different
brushes and switch between them.
[hold any shovel: wooden, stone, iron, golden, diamond, netherite]
//brush sphere stone 5
[right-click anywhere — even at the sky, raycast finds the block in front]
Available brushes:
//brush sphere <pattern> <radius>
//brush cube <pattern> <radius>
//brush cyl <pattern> <radius> <height>
//brush smooth <radius> [passes]
//brush clipboard [-noair]
//brush none unbind the brush from this shovel
Smooth
//brush smooth 6 round off the terrain in a 6-block sphere
//brush smooth 6 3 three passes — smooths much harder
//brush smooth takes no pattern: it reuses the ground's own blocks, so grass
stays on top of dirt on top of stone instead of the whole cut turning into one
material. Water and lava close back over what it carves out, and it only writes
where the terrain actually changes — brushing already-smooth ground does
nothing at all.
It works on the full shape of the land rather than one height per column, so
caves and overhangs survive, and a flat floor or a straight wall is left
exactly where it is. Trees and plants are ignored when reading the terrain, so
brushing a forested hillside follows the hill and not the trunks.
passes (default 2, max 6) is how hard to smooth: 1 nudges a bumpy
surface, 4 melts a cliff into a slope. Radius is capped at 32.
Add a mask so the brush only affects matching blocks:
//brush sphere stone 6
//mask #air only paint into air
//mask !bedrock paint anywhere except on bedrock
//mask none clear the mask
Right-click triggers a brush stroke. There's a 500 ms cooldown to prevent
spam from Bedrock's hold-to-attack behaviour, and the raycast reaches up to
256 blocks so you can sculpt from a distance.
Inspector
/inspect
[right-click a block]
Shows the block's coordinates, its current ID, and — if it's a placeholder
from a schematic load — its original Java ID. Useful for cleaning up
schematics that referenced Bedrock-unknown blocks.
All commands at a glance
Command
What it does
//wand
Give the wooden axe
//pos1//pos2
Set positions manually
//sel [clear]
Show / clear the selection
//size
Show selection volume
//expand <n> [rev] [dir]//expand vert
Grow the selection
//expandrod
Blaze rod: click a face to grow the selection
//set <pat>
Fill
//replace <mask> <pat>
Conditional fill
//walls <pat>
Outline
//sphere <pat> <r> [hollow]
Sphere at your feet
//cyl <pat> <r> <h> [hollow]
Cylinder
//pyramid <pat> <size> [hollow]
Pyramid
//copy//cut//paste [-noair]
Clipboard
//rotate <90|180|270>//flip <x|y|z>
Transform clipboard
//move <n> [dir]//stack <n> [dir]
Move / stack
//undo [n]//redo [n]
Undo / redo
//schem <save|load|list> [name]
Schematics
//brush <kind> <args>//mask <mask>
Brushes
/inspect
Block info stick
Under the hood
A short note for the curious — you don't need any of this to use the plugin.
Async planning, sliced apply. Block coordinates are computed on a
virtual thread (no main-thread cost), then written on the main thread in
60 000-block slices per tick, so the server keeps a healthy TPS even on
huge edits.
Batched writes. Each tick's slice goes through PowerNukkitX's
BlockManager.applySubChunkUpdate(), which sends one packet per sub-chunk
instead of one per block and writes chunks in parallel.
No physics / redstone updates are triggered by edits — exactly the
behaviour world-edit operations expect.
Per-player session keeps pos1, pos2, the clipboard, and a 20-deep
undo/redo stack in memory.
The full architecture lives in
src/main/java/fr/fastedit/edit/EditEngine.java if you want to read it.
Building from source
The compile classpath is a local PowerNukkitX 3 build — the plain jar and
its dependency jars, which is exactly what ./gradlew shadowJar leaves in
PNX's own build/libs/: