Skip to content

WorldEditCopier

A staff tool that copies very large builds between servers. It saves a region as many small WorldEdit schematics and pastes them back one piece at a time, so the server does not freeze.

What it does

  • Export cuts a box (or a polygon footprint) into cubes and saves each cube as its own Sponge v3 .schem file, plus a manifest.json that lists them. One cube is saved per server tick task, with a short delay between them.
  • Import reads that manifest and pastes the cubes one at a time, with a delay between pastes.
  • Block entity data (chests, signs, Pixelmon blocks, furniture models) is kept automatically.
  • Jobs can be listed and cancelled while they run. Tab completion covers names, coordinates, delays, flags and job IDs.

Why not //copy and //schem save? WorldEdit holds the whole selection in memory and fills it in one go on the main thread. That is fine for a house. A 758 x 314 x 821 landmass is 195 million blocks and would stall the server.

This Bukkit plugin is the supported version. The older NeoForge mod (Mods/World Edit Copier/) is retired.

How players use it

Players do not use this plugin. It is a staff tool.

Staff guide

Permissions (all ops by default): wecopier.export, wecopier.import, wecopier.status, wecopier.cancel. On build, the architect rank holds wecopier.*. A non-op also needs a wecopier CommandWhitelist entry.

/wecopier export rectangle <name> <x1> <y1> <z1> <x2> <y2> <z2> [fragmentSize] [delayMs] [flags]
/wecopier export polygon <name> <minY> <fragmentSize> <x,z;x,z;...> [delayMs] [flags]
/wecopier import <name> <x> <y> <z> [delayTicks] [flags]
/wecopier status
/wecopier cancel <jobId>
/wecopier tp <world> <x> <y> <z>

Move a build from one server to another

  1. Stand in the right world. Export reads from your current world. Run it from the wrong world and you get a perfect-looking export of the wrong place, with no error.
  2. Export with biomes on:
    /wecopier export rectangle snowy_taiga 1200 -64 -900 1957 250 -80 64 50 -be
    
  3. Watch progress with /wecopier status. It prints the job ID, progress=done/total, and the next file.
  4. Copy the whole folder world/wecopier_exports/snowy_taiga/ to the target server. The ops repo script scripts/transfer_wecopier_export.sh does this, prints the source world and min corner, and refuses an export that is all air.
  5. On the target, stand in the destination world and import at the min corner:
    /wecopier import snowy_taiga 1200 -64 -900 40 -bc
    
  6. When it finishes, click the chat message (or run /wecopier tp ...) to jump to the paste.

Polygon export

/wecopier export polygon spawn_isle 40 64 100,100;300,120;250,400;80,350 50 -be

The shape is a column over the footprint, from minY up to the top of the world. Everything outside the shape becomes structure_void, so it is not pasted.

Flags

Export and import read the same flags. Short flags can be grouped, like -be.

Flag Effect Default
-e / --entities, -E / --no-entities Copy entities on or off on
-b / --biomes, -B / --no-biomes Copy biomes on or off off
-a / --ignore-air On export: turns air into structure_void. On import: skips air when pasting. Not a faithful copy; use for overlays off
-v / --include-void Paste structure_void instead of skipping it off
-c / --clear-region Import only. Clears blocks and removes non-player entities in each cube's box before pasting off

For a faithful copy: -be on export, -bc on import. Biomes are off by default, and a wrong biome is easy to miss.

When to use -c. Use it when pasting over something that is already there, such as restoring a build from a backup at the same spot. Without it, WorldEdit keeps an existing block entity when the new block is the same type, so modded data is not refreshed. Immersive Furniture then shows as solid black. -c also stops armor stands, item frames and paintings from doubling up. Players are never removed. It is off by default so layered pastes still add on top of each other.

Sizes and delays

Setting Default Range Advice
fragmentSize (cube edge) 32 1 to 128 64 is a good default, even on production. 128 stalls for seconds per cube
export delayMs 50 1 to 5000
import delayTicks 20 (1 second) 1 to 1200 On production use 40 (2 seconds)

Example: a 195 million block region at size 64 is 780 cubes, about 26 minutes at 40 ticks.

Cancel a job

/wecopier status lists job IDs. Then /wecopier cancel 3f2a... with the full ID.

Configuration

None. The plugin has no config file. Limits and defaults are set in code.

Data and storage

Exports are saved in the main world's folder, not WorldEdit's schematics folder:

world/wecopier_exports/<name>/manifest.json
world/wecopier_exports/<name>/fragment_00000.schem ...
  • An export deletes any existing folder with the same name first. Give every region its own name.
  • The import needs the manifest, so always copy the whole folder.
  • Old export folders are safe to delete when you no longer need them.

Troubleshooting

Symptom Cause Fix
Import pasted air or the wrong place The export was run from the wrong world Check dimension in manifest.json before copying. Re-export from the right world
Paste lands in the wrong spot Import coordinates are the min corner, not your position Use the source min corner (sourceOrigin in the manifest) to put it back where it was
Paste went into the wrong world Import uses your current world (console uses the main world) Stand in the destination world
Furniture shows solid black after re-paste Old block entity data was kept Re-import with -c
Wrong weather or mob spawns after a move Biomes were not copied Re-export with -b and import with -b
Could not find manifest at ... The folder was not copied, or the name is wrong Copy the whole export folder
Some modded blocks are missing The target server lacks that mod Check that both servers run the same mods

Boot log line: WorldEditCopier enabled. If WorldEdit is missing it logs WorldEdit plugin not found and disables. Each job also logs progress lines tagged [Export <id>] or [Import <id>].

There is no undo. The plugin's edit sessions have no player attached, so //undo cannot reverse an import or a -c clear. A server backup is the only rollback. Take one before a large import.

Maintainer notes

  • Pastes run with WorldEdit's neighbor updates, block updates and validation turned off, so no physics cascades fire.
  • The -c clear runs in its own edit session that is flushed before the paste session starts. Doing both in one session lets WorldEdit merge "set air, then set the same block" into nothing, which keeps stale block entity data.
  • Claims, WorldGuard regions and CoreProtect history are not in a schematic and do not move.
  • manifest.dimension is for information only; import does not use it.
  • tp is not in tab completion or the usage line. It needs wecopier.import and is the target of the clickable message after an import.
  • Full ops write-up with a worked example and traps: documentation/operations/wecopier-build-to-main.md in the ops repo.

Building

./gradlew clean build

Java 21. Output: build/libs/WorldEditCopier-1.0.0.jar. Compiles against the Spigot API and WorldEdit 7.3.8 (not shaded). The server must have WorldEdit installed.

Full command, permission and config tables: Reference.