Skip to content

Examples

Here are a few common recipes and usage examples demonstrating how to use MultiWorldEdit to handle cross-version operations cleanly.


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-compatibility
final File schematicFile = new File(getDataFolder(), "schematics/test.schematic");
final ClipboardWrapper clipboardWrapper = MultiWorldEdit.getInstance().read(schematicFile);

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 coordinates
final World world = ...;
final Clipboard clipboard = ...;
final int x = 0, y = 64, z = 0;
// Create a version-agnostic EditSession with try-with-resources for v7 safety
try (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);
}

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 safely
final VectorWrapper origin = clipboardWrapper.getOrigin();
// Retrieve region boundaries across different WE API specs
final RegionWrapper regionWrapper = MultiWorldEdit.getInstance().create(clipboardWrapper.to().getRegion());
final VectorWrapper maximumVector = regionWrapper.getMaximumPoint();