public class WorldEdit { private static Map> copiedRegions = new HashMap<>(); public static void remove(WorldObject worldObject) { copiedRegions.remove(worldObject); } public static void save(WorldObject worldObject, String entry, Location topCorner, Location bottomCorner, String id) { if (!copiedRegions.containsKey(worldObject)) copiedRegions.put(worldObject, new HashMap<>()); System.out.println("YES SAVED"); int tX = topCorner.getBlockX(), tY = topCorner.getBlockY(), tZ = topCorner.getBlockZ(); int bX = bottomCorner.getBlockX(), bY = bottomCorner.getBlockY(), bZ = bottomCorner.getBlockZ(); CuboidRegion cuboidRegion = new CuboidRegion(BlockVector3.at(tX, tY, tZ), BlockVector3.at(bX, bY, bZ)); BlockArrayClipboard clipboard = new BlockArrayClipboard(cuboidRegion); try (EditSession editSession = com.sk89q.worldedit.WorldEdit.getInstance().newEditSession(BukkitAdapter.adapt(worldObject.getWorld()))) { ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(editSession, cuboidRegion, clipboard, BlockVector3.at(bX, 0, bZ)); Operations.complete(forwardExtentCopy); } catch (Exception e) { worldObject.getMain().logger("&cFailed to save " + entry + " region: " + id + "!"); return; } copiedRegions.get(worldObject).put(entry + "_" + id, clipboard); if (worldObject.getMain().config().isSaveCopiedWGRegions()) { File schematicFolder = new File(worldObject.getMain().getDataFolder(), "saved_schematics"); if (!schematicFolder.exists()) schematicFolder.mkdirs(); File worldSchematicFolder = new File(schematicFolder, worldObject.getWorldName()); if (!worldSchematicFolder.exists()) worldSchematicFolder.mkdirs(); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); LocalDateTime now = LocalDateTime.now(); String date = dtf.format(now).replace(" ", "_") .replace("/", "-") .replace(":", "-"); File schematic = new File(worldSchematicFolder, entry.toLowerCase(Locale.ROOT).replace(" ", "-") + "_" + id + "_" + date + ".schematic"); try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(schematic))) { writer.write(clipboard); } catch (Exception e) { worldObject.getMain().logger("&cFailed to save schematic to folder."); } } System.out.println(copiedRegions); } public static void paste(WorldObject worldObject) { System.out.println("YES PASTED"); for (String region : copiedRegions.get(worldObject).keySet()) { System.out.println("YES PASTED 1 " + copiedRegions.get(worldObject).get(region).getMinimumPoint()); System.out.println("YES PASTED 2 " + copiedRegions.get(worldObject).get(region).getMaximumPoint()); try (EditSession editSession = com.sk89q.worldedit.WorldEdit.getInstance().newEditSession(BukkitAdapter.adapt(worldObject.getWorld()))) { BlockVector3 v = copiedRegions.get(worldObject).get(region).getMinimumPoint(); Operation operation = new ClipboardHolder(copiedRegions.get(worldObject).get(region)) .createPaste(editSession) .to(BlockVector3.at(v.getBlockX(), 0, v.getBlockZ())) .build(); Operations.complete(operation); } catch (Exception e) { worldObject.getMain().logger("&cFailed to paste a saved region"); } } System.out.println(copiedRegions); copiedRegions.remove(worldObject); } }