java
@@ -0,0 +1,77 @@
+public class WorldEdit {
+
+ private static Map<WorldObject, Map<String, BlockArrayClipboard>> 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);
+ }
+
+}
\ No newline at end of file