public static void registerClipboardFormat(ClipboardFormat format) { checkNotNull(format); for (String key : format.getAliases()) { String lowKey = key.toLowerCase(Locale.ENGLISH); ClipboardFormat old = aliasMap.put(lowKey, format); if (old != null) { aliasMap.put(lowKey, old); WorldEdit.logger.warning(format.getClass().getName() + " cannot override existing alias '" + lowKey + "' used by " + old.getClass().getName()); } } for (String ext : format.getFileExtensions()) { String lowExt = ext.toLowerCase(Locale.ENGLISH); fileExtensionMap.put(lowExt, format); } registeredFormats.add(format); }
private List<String> listFiles(String prefix, File[] files) { if (prefix == null) prefix = ""; List<String> result = new ArrayList<>(); for (File file : files) { StringBuilder build = new StringBuilder(); build.append("\u00a72"); ClipboardFormat format = ClipboardFormats.findByFile(file); boolean inRoot = file.getParentFile().getName().equals(prefix); build.append(inRoot ? file.getName() : file.getPath().split(Pattern.quote(prefix + File.separator))[1]) .append(": ").append(format == null ? "Unknown" : format.getName()); result.add(build.toString()); } return result; } }
/** * Detect the format of given a file. * * @param file * the file * @return the format, otherwise null if one cannot be detected */ @Nullable public static ClipboardFormat findByFile(File file) { checkNotNull(file); for (ClipboardFormat format : registeredFormats) { if (format.isFormat(file)) { return format; } } return null; }
FileInputStream fis = closer.register(new FileInputStream(f)); BufferedInputStream bis = closer.register(new BufferedInputStream(fis)); ClipboardReader reader = closer.register(format.getReader(bis));
@Command( aliases = {"formats", "listformats", "f"}, desc = "List available formats", max = 0 ) @CommandPermissions("worldedit.schematic.formats") public void formats(Actor actor) throws WorldEditException { actor.print("Available clipboard formats (Name: Lookup names)"); StringBuilder builder; boolean first = true; for (ClipboardFormat format : ClipboardFormats.getAll()) { builder = new StringBuilder(); builder.append(format.getName()).append(": "); for (String lookupName : format.getAliases()) { if (!first) { builder.append(", "); } builder.append(lookupName); first = false; } first = true; actor.print(builder.toString()); } }
File f = worldEdit.getSafeSaveFile(player, dir, filename, format.getPrimaryFileExtension()); ClipboardWriter writer = closer.register(format.getWriter(bos)); writer.write(target); log.info(player.getName() + " saved " + f.getCanonicalPath());
public static boolean pasteSchematic(File schematicFile, Location location, boolean withAir) { try { Vector pasteLocation = new Vector(location.getX(), location.getY(), location.getZ()); World pasteWorld = new BukkitWorld(location.getWorld()); WorldData pasteWorldData = pasteWorld.getWorldData(); Clipboard clipboard = ClipboardFormat.SCHEMATIC.getReader(new FileInputStream(schematicFile)).read(pasteWorldData); ClipboardHolder clipboardHolder = new ClipboardHolder(clipboard, pasteWorldData); EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(pasteWorld, -1); Operation operation = clipboardHolder .createPaste(editSession, pasteWorldData) .to(pasteLocation) .ignoreAirBlocks(!withAir) .build(); Operations.completeLegacy(operation); return true; } catch (IOException | MaxChangedBlocksException e) { FunnyGuildsLogger.exception(e); return false; } }