- Hook right into WorldEdit's undo/redo system
- Use WorldEdit's block place prioritization
- Accept WorldEdit's powerful block type syntax (///set sign:3)
- Get the region selected by the user
Scripting support was re-added in v2.13 after having been removed in v0.8. However, scripts written for v0.8 and below are not compatible.
Check out WorldEdit's API documentation.
Scripts have the following three variables in their global namespace:
contextis an instance of CraftScriptContext
playeris a copy of the player, an instance of LocalPlayer
argvis a Java array of arguments as strings
To run scripts, use //cs yourscript.js.
Working with blocks
All block editing in WorldEdit is done through an
EditSession. This object handles history and block placement order all automatically. To get an edit session for your own script, use:
var sess = context.remember();
Every time you call that method, you will get a new
EditSession, so be sure to keep one around. To set blocks, rather than giving a block type number, you give a
BaseBlock. The reason is that blocks contain data (and in some cases, complex data like chest contents), and if only block types were passed around, a lot of data would be lost.
BaseBlock is an independent representation of a block; it doesn't know where it is in the world. That means that you can pass a
BaseBlock around everywhere and reuse it.
BaseBlocks remember block type and block data. For more complex blocks such as signs and chests, you will use a
BaseBlock derivative such as
Note that because
BaseBlock is in the com.sk89q.worldedit.blocks namespace, it had to be imported first.
BlockID has a list of block types. The first argument for
setBlock() is a
Vector indicating the position in the world.
To get blocks, use
EditSession. You'll get back a
Arguments are passed in under the
argv variable. If you need to check whether the right number of arguments was provided by the user, you can use
If you need to resolve a block name to a
BaseBlock, you can use
CraftScriptContext.getBlock(). That method checks the block blacklist, however. If you need a block for, for example, replacing, you can ignore the blacklist by adding a boolean "true" for a third parameter.
What happens if the user inputs an invalid block? An exception will be raised and if you don't catch it, the user will be informed about their error and your script will be halted.
Working with Java packages
To import a java package, you can use the following syntax:
You have access to all of Java's vast library as it is installed. WorldEdit's classes are also fully available.