FastAsyncWorldEdit
> Installation guide <
> Chat with us on #IntellectualCrafters <
> Find the source on GitHub <
> Get the latest build from Jenkins <
Overview:
FAWE is an addon for WorldEdit that drastically improves its performance and adds a lot of new functionality by replacing most of the core classes.
Features:
- Incredibly fast, lag free and uses minimal memory
- Support for protection plugins (see below)
- Advanced per player limits and inventory settings
- All commands and messages are
translatable
- No setup web integration:
http://empcraft.com/fawe
- Adds commands to
change blocks in entire worlds
- Fast built in
logging and rollback
(see below) - Instant copying of arbitrary size:
//lazycopy
- Adds a lot of powerful new
brushes and tools
- Adds a lot more
mask
functionality - Adds a lot more
pattern
functionality - Adds edit
transforms
- Supports new file formats (Structure block, PNG, BD)
- Adds commands for fixing or changing
lighting
- Allows WorldEdit to be used from console:
//jumpto world,0,0,0
- Fixes bugs in WorldEdit such as block rotation, pasting entities, etc.
- Can load corrupt schematic files
- Unlimited undo/redo with history/clipboard on disk
Supported platforms
PC: SP/MP, MCPE: MP
- CraftBukkit
- Spigot
- Paper
- Thermos
- Forge
- Sponge
- Nukkit
For developers: See here
Async world manipulation, loading, lighting + examples.
Region restrictions:
The following plugins are supported:
- PlotSquared
Disable in the config, or bypass with
/wea
orfawe.bypass
Logging and Rollback
Enable
use-disk
anduse-database
in theconfig.yml
to use the in built FAWE logging/rollback. Alternatively, the following third party plugins are supported with BlocksHub installed.
- See BlocksHub page
It is safe to give normal players access to FAWE rollback. To bypass logging use
//fast
Metrics
How does it work?
- All commands / actions are executed asynchronously.
- Chunk info is cached on the main thread for the async thread to access
- Changes an edit does are pushed to a local queue which queues by chunk
- When a local queue is created it is added to the global queue
- The global queue dispatches changes to the world on the main thread
- The dispatching can occur when changes are still being made to the local queue
- FAWE directly modifies the chunk data for the best performance
How does it use less memory?
Default worldedit uses about 256 bytes for a BlockChange object, which contains a Vector, and two BaseBlock objects (the original, and the new one). There are two BlockChange objects created for each block change (one for undo, and one for redo). Then this is only for the ChangeSet extent, there are 11 other extents e.g. the MultiStageReorder has three lists that map the BlockPosition to BaseBlock (all three reordering stages need to complete fully before any blocks are changed).
FAWE removes / replaces all of that. Block changes are recorded in a compressed byte array (using the LZ4 compressor) i.e. A simple edit can be using a tenth of a byte per change (effectively). Additionally FAWE dispatches changes whilst blocks are being queued so the whole thing will never need to be in memory. FAWE can also be configured to use the disk for history/clipboard in which case nothing needs to be stored in memory.
How did you do the benchmark? (outdated)
- Loaded up FAWE 3.4.3 with SV-297 and WE-SV #17, increased the number of parallel threads to 4
- Tweaked some other settings (e.g. queue target) so for speed rather than low memory
- Set 50 mil blocks with fastmode, took 0.36 seconds, that’s almost 140M bps
- Stopped the server, deleted FAWE and restarted (just running WorldEdit-sponge now)
- Decided to do a 1 mil block edit, which if 250x slower would take 1.8 seconds -> server crashes
- Tried changing just a single chunk, it took 10 seconds
- Result: 2 million percent faster