Introducing WorldEdit 7: What's New?
Posted on June 11, 2019 in minecraft
After over a year in the making, WorldEdit 7 is complete. The first change that comprised what would become WorldEdit 7 was made on January 3rd, 2018. This release comprises of one of the largest changes to have ever been made to WorldEdit since its release in 2010.
The most significant part of this update is the rewriting of block handling to be more in line with the way modern Minecraft works. For more information about the Minecraft changes, I've given a quick overview of them in this post. As this is a very fundamental aspect of Minecraft and WorldEdit, there are a lot of changes in the way WorldEdit works for both users and developers.
I have gone over some of these changes in a prior post, so I'll only briefly touch on those here. This post is also mostly user-facing, so I won't go too in-depth on the developer changes.
There are many changes in WorldEdit 7, allowing for exciting new possibilities when editing your world or creating plugins. Many new features have been added since the last post, as that was written while we were still making WorldEdit 7 functional.
This is arguably the largest change in WorldEdit 7, as it impacts the way in which the user deals with blocks. Rather than using block IDs in commands, the new way is to use the block key. These keys take the form of
minecraft for any vanilla block. For example, grass blocks are referenced by
minecraft:grass_block. As most use cases will involve blocks from Minecraft, that part is optional. This means just using
grass_block will work fine.
As block metadata has been removed from the game, we've set up a system to allow referencing block states using the official Minecraft format. For example, setting a snowy grass block is done as follows,
grass_block[snowy=true]. This sets the
snowy property to true. A list of properties for blocks can be found on the Minecraft wiki. If a block contains multiple properties, you can set them with a comma separator, such as
lever[powered=false,facing=north,face=ceiling]. If you don't want to specify all the properties, you can leave them out, and the default will be used instead.
One other feature of the new block parser is the ability to set properties without touching the type or change the type without touching the properties. If you use
^ in place of the type, it will set the properties without changing the type. For example,
^[waterlogged=true] will set all applicable blocks to their waterlogged variant. If you use
^ before the type without the properties, it will set the type without changing the properties. For example,
^brick_slab on a group of waterlogged slabs will set them to brick but retain the waterlogged state. If you include both, for example in
^brick_slab[waterlogged=false], it will set to non-waterlogged brick slabs while keeping whether it's on the top or bottom.
For legacy reasons, it's still possible to use numeric block IDs and the old "colours for wool" parser, such as
red for red wool. This isn't supported and is only a temporary measure to help people migrate.
A lot of people use the unofficial client addon known as WorldEditCUI, and due to some recent changes in Minecraft, we've been able to add a limited version of it to WorldEdit itself, without requiring anything on the client!
It does have the limitation of requiring the user to be in creative mode, and only support cuboid selections smaller than 32x32x32. These are limitations in the way we're displaying the selections and require a client mod to resolve.
If you don't want this feature, it can be toggled per-user with the
//drawsel command, or entirely disabled in the configuration.
Due to changes in 1.13, the MCEdit schematic format was entirely incompatible. Due to this, we've switched over to the Sponge Schematic Format. Sponge schematics provide a few huge benefits, such as much better support for mods, as well as support for biomes. To copy biomes, use
//copy -b, and to paste the biomes use
//paste -b. This flag is similar to using
-e when copy/pasting entities.
Another change regarding schematics is that plugins can now add new schematic formats, and can also intelligently grab the format of a schematic file. This should allow smaller or more specific formats to be used with WorldEdit, without having to be added to the main plugin.
Minecraft 1.13 added a system to tag groups of blocks, items, or fluids. Minecraft provides a few which are found on the Minecraft wiki. Otherwise, they can be added in data packs.
WorldEdit allows these to be used as masks, to only modify blocks that match the tag. These are specified using the
##namespace:tagname syntax. The same rules for namespaces apply as with block parsing, meaning you don't need to specify it if it's just minecraft. Example usage of this in a mask is
//gmask ##wool. This mask would only match any wool blocks. If a mod adds new wool blocks, it can add them to the wool tag, and it'll also be matched.
Tags can also be used as a pattern, acting similar to random patterns. The contents of the tag are equally applied across the selected area. If the
* character is used before the tag name, it will apply all block states, not just the default states. For example,
//set ##*logs would equally set all states of all logs, not just all log types.
In another effort to bring WorldEdit into the modern era of Minecraft, the chat messages have been revamped to support a few new features. There are now many places throughout the plugin where you can hover over text to see more information or to click the text to perform actions. For example, any paged boxes now allow clicking on arrows to switch between pages.
Whilst this is already in use in many places across the plugin, we'll be adding it to more as we think of places where it makes sense. We're trying to still keep as much information visible as possible normally, as the console cannot display the click or hover events.
This also includes the introduction of some command suggestions. Most of the effort was put into making this possible so that the suggestions will get better and better over time! This required creating our new command system that we've called Piston, due to significant limitations in Brigadier (the Minecraft command system). Using both this new text system and Piston, we hope to be able to add translation support in the future.
The system that handles patterns and masks has been rewritten, allowing other plugins to add their own. This system allows for plugins to massively extend the functionality of WorldEdit, as patterns and masks make up 90% of the plugin. Another post will be made in the future that goes in depth on how to use this in your own plugins.
Aside from the significant changes, there were a lot of other small changes. A full changelog is available on the download pages of WorldEdit 7. Some of these changes are:
- Improved rotation support for mod blocks
- Re-added diagonal direction support to a few commands that had it removed in WorldEdit 6
- Added a Vault WEPIF resolver
- Allowed fake players to use WorldEdit commands, such as with VirtualPlayers
/we reportto assist in debugging errors
- Fixed biome changes not being tracked in history
- Added command completions
- The clipboard pattern now accepts offsets,
- Reworked //restore to allow restoring chunks from basically any non-newer Minecraft version.
- Tonne more, see a full changelog here!
Posted on July 01, 2019
The reload command in Bukkit is fundamentally broken and flawed, here's why, and what you should be doing instead.
Posted on January 04, 2020
Fabric came about after Forge hadn't updated for Minecraft 1.13. Now that is has, is Fabric still relevant and worth using? What about Forge?
Posted on September 29, 2019
A typical task that people want to achieve with WorldEdit is to load in a schematic, replace a few blocks, and then save it again. With WorldEditCLI, this couldn't be easier!