Skip to content

Instantly share code, notes, and snippets.

@Crypnotic
Created May 14, 2020 01:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Crypnotic/3177b30fc82b8c58fb376239ca400074 to your computer and use it in GitHub Desktop.
Save Crypnotic/3177b30fc82b8c58fb376239ca400074 to your computer and use it in GitHub Desktop.
An object for loading and pasting schematics using the WorldEdit api
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.function.operation.Operations;
import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public class Schematic {
private final Clipboard clipboard;
public Schematic(Clipboard clipboard) {
this.clipboard = clipboard;
}
public Clipboard getClipboard() {
return clipboard;
}
public void paste(org.bukkit.Location target) {
World world = BukkitAdapter.adapt(target.getWorld());
Location location = BukkitAdapter.adapt(target);
EditSession session = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
Operation operation = new ClipboardHolder(clipboard).createPaste(session)
.to(location.toVector().toBlockPoint()).ignoreAirBlocks(true).build();
try {
Operations.complete(operation);
session.flushSession();
} catch (WorldEditException exception) {
exception.printStackTrace();
}
}
public static Optional<Schematic> load(File file) {
ClipboardFormat format = ClipboardFormats.findByFile(file);
if (format == null) {
return Optional.empty();
}
try (ClipboardReader reader = format.getReader(new FileInputStream(file))) {
return Optional.of(new Schematic(reader.read()));
} catch (IOException exception) {
exception.printStackTrace();
}
return Optional.empty();
}
}
@Marcelektro
Copy link

More than useful! :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment