package dev.loki.loparkour.schematic.schem; 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 org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public final class SchemLoader { private static final int MAX_FILE_SIZE = 10 * 1024 * 1024; private SchemLoader() { } @NotNull public static Clipboard load(@NotNull File file) throws IOException { if (file.length() > MAX_FILE_SIZE) { throw new IOException("Schematic file too large: " + file.getName()); } final ClipboardFormat format = ClipboardFormats.findByFile(file); if (format == null) { throw new IOException("Unsupported schematic file: " + file.getName()); } try (FileInputStream in = new FileInputStream(file); ClipboardReader reader = format.getReader(in)) { final Clipboard clipboard = reader.read(); if (clipboard == null) { throw new IOException("Schematic file returned no clipboard: " + file.getName()); } return clipboard; } } }