Revisions for untitled paste

View the changes made to this paste.

unlisted ⁨1⁩ ⁨file⁩ 2022-03-03 23:33:53 UTC

java

@@ -0,0 +1,77 @@

+public class WorldEdit {
+
+    private static Map<WorldObject, Map<BlockArrayClipboard, Integer[]>> 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, bY, bZ));
+            Operations.complete(forwardExtentCopy);
+        } catch (Exception e) {
+            worldObject.getMain().logger("&cFailed to save " + entry + " region: " + id + "!");
+            return;
+        }
+
+        copiedRegions.get(worldObject).put(clipboard, new Integer[]{bX, bY, bZ});
+
+        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 (BlockArrayClipboard clipboard : copiedRegions.get(worldObject).keySet()) {
+            System.out.println("YES PASTED 1 " + clipboard.getMinimumPoint());
+            System.out.println("YES PASTED 2 " + clipboard.getMaximumPoint());
+            try (EditSession editSession = com.sk89q.worldedit.WorldEdit.getInstance().newEditSession(BukkitAdapter.adapt(worldObject.getWorld()))) {
+                Integer[] coords = copiedRegions.get(worldObject).get(clipboard);
+                Operation operation = new ClipboardHolder(clipboard)
+                        .createPaste(editSession)
+                        .to(BlockVector3.at(coords[0], coords[1], coords[2]))
+                        .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