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 biggest part of this update is the rewriting of how blocks are handled, 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 ones here. This is also a mostly user-facing post, so I won't go too in-depth on the developer changes.

What's Changed?

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.

Block Parsing

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 namespace:block, where namespace is 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 retaining 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.

Server Selection Interface

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 can't be fixed without a client mod.

If you don't want this feature, it can be toggled per-user with the //drawsel command, or entirely disabled in the configuration.

//drawsel

Schematics

Due to changes in 1.13, the MCEdit schematic format could no longer be used. Due to this, we've switched over to the Sponge Schematic Format. This has a few large 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 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.

Tags

Minecraft 1.13 added a system to tag groups of blocks, items, or fluids. A few are provided by Minecraft and listed 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.

Fancy Text Formatting

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.

New Text - Selections

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.

New Text - Schematics

This also includes the introduction of some command suggestions. Most of the effort was put into making this possible, so the suggestions will get better and better over time! This required creating our own new command system that we've called Piston, due to major 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.

Custom Patterns and Masks

The system that handles patterns and masks has been rewritten, allowing other plugins to add their own. This 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.

Other Small Changes

Aside from the major 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
  • Added /we report to assist in debugging errors
  • Fixed biome changes not being tracked in history
  • Added command completions
  • The clipboard pattern now accepts offsets, [email protected][x,y,z]
  • Reworked //restore to allow restoring chunks from basically any non-newer Minecraft version.
  • Tonne more, see a full changelog here!