Examples
Here are a few common recipes and usage examples demonstrating how to use MultiWorldEdit to handle cross-version operations cleanly.
1. Reading and Loading a Schematic
Section titled “1. Reading and Loading a Schematic”Instead of dealing with legacy NBT formats or WorldEdit v6/v7 parser changes manually, you can read schematic files version-agnostically:
import java.io.File;import io.github.tofpu.multiworldedit.MultiWorldEdit;import io.github.tofpu.multiworldedit.wrapper.ClipboardWrapper;
// Read the schematic file using the library for cross-compatibilityfinal File schematicFile = new File(getDataFolder(), "schematics/test.schematic");final ClipboardWrapper clipboardWrapper = MultiWorldEdit.getInstance().read(schematicFile);2. Pasting a Schematic
Section titled “2. Pasting a Schematic”This example demonstrates how to build and execute a version-agnostic paste operation using an EditSessionWrapper and the fluent paste builder:
import com.sk89q.worldedit.EditSession;import com.sk89q.worldedit.extent.clipboard.Clipboard;import com.sk89q.worldedit.function.operation.Operation;import com.sk89q.worldedit.function.operation.Operations;import com.sk89q.worldedit.world.World;import io.github.tofpu.multiworldedit.MultiWorldEdit;import io.github.tofpu.multiworldedit.wrapper.EditSessionWrapper;import java.io.IOException;
// Target world, clipboard, and destination coordinatesfinal World world = ...;final Clipboard clipboard = ...;final int x = 0, y = 64, z = 0;
// Create a version-agnostic EditSession with try-with-resources for v7 safetytry (final EditSessionWrapper editSessionWrapper = MultiWorldEdit.getInstance().create(world, -1)) { final EditSession editSession = editSessionWrapper.to();
// Build the version-agnostic paste operation final Operation operation = MultiWorldEdit.getInstance() .create(clipboard, editSession, world) .to(x, y, z) .ignoreAirBlocks(true) .build();
Operations.completeLegacy(operation);} catch (IOException e) { throw new IllegalStateException("Failed to complete schematic paste operation", e);}3. Working with Wrappers Directly
Section titled “3. Working with Wrappers Directly”If you already have native WorldEdit objects and need to extract vector boundaries or origin points across versions, you can wrap them on the fly:
import com.sk89q.worldedit.extent.clipboard.Clipboard;import io.github.tofpu.multiworldedit.MultiWorldEdit;import io.github.tofpu.multiworldedit.wrapper.ClipboardWrapper;import io.github.tofpu.multiworldedit.wrapper.RegionWrapper;import io.github.tofpu.multiworldedit.wrapper.VectorWrapper;
final Clipboard clipboard = ...;final ClipboardWrapper clipboardWrapper = MultiWorldEdit.getInstance().create(clipboard);
// Retrieve the origin vector safelyfinal VectorWrapper origin = clipboardWrapper.getOrigin();
// Retrieve region boundaries across different WE API specsfinal RegionWrapper regionWrapper = MultiWorldEdit.getInstance().create(clipboardWrapper.to().getRegion());final VectorWrapper maximumVector = regionWrapper.getMaximumPoint();