From 24029b795cf751fa7be0370aecfbffbccf806fc4 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sun, 15 Mar 2026 17:29:44 +0100 Subject: [PATCH] Implement more in PlotRegionBackups --- .../bausystem/region/RegionBackups.java | 4 +-- .../steamwar/bausystem/region/RegionData.java | 1 + .../dynamic/DynamicRegionRepository.java | 2 +- .../bausystem/region/dynamic/PasteUtils.java | 13 +++++--- .../dynamic/modes/PlotRegionBackups.java | 32 +++++++++++++++---- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionBackups.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionBackups.java index eda6cd2e..f8577023 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionBackups.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionBackups.java @@ -43,10 +43,10 @@ public interface RegionBackups { @Getter abstract class Backup implements RegionDataStore, Comparable { @NonNull - private final BackupType type; + protected final BackupType type; @NonNull - private final String name; + protected final String name; @NonNull protected final RegionData regionData; diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionData.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionData.java index fdc66505..c9b82365 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionData.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionData.java @@ -106,6 +106,7 @@ public abstract class RegionData { /** * This method only copies all flags and properties from this into other without saving other afterward. + * TODO: If {@link #connectedRegions()} is overridden this method will not work correctly! */ public final void copyInto(RegionData other) { if (this == other) return; diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/DynamicRegionRepository.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/DynamicRegionRepository.java index b92584ed..ebe67445 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/DynamicRegionRepository.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/DynamicRegionRepository.java @@ -290,7 +290,7 @@ public class DynamicRegionRepository { } @SneakyThrows - private static void deleteDir(File file) { + public static void deleteDir(File file) { Files.walkFileTree(file.toPath(), new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/PasteUtils.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/PasteUtils.java index e2b97287..f62eecd0 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/PasteUtils.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/PasteUtils.java @@ -50,10 +50,13 @@ public class PasteUtils { editSession.close(); } - public static void paste(File file, Point minPoint, int rotate) { - Clipboard clipboard = FlatteningWrapper.impl.loadSchematic(file); - BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); - BlockVector3 to = minPoint.toBlockVector3().subtract(offset); - clipboard.paste(BukkitAdapter.adapt(Bukkit.getWorlds().get(0)), to, false, true, new AffineTransform().rotateY(rotate)); + public static EditSession paste(File file, Point minPoint, int rotate) { + try (Clipboard clipboard = FlatteningWrapper.impl.loadSchematic(file)) { + BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); + BlockVector3 to = minPoint.toBlockVector3().subtract(offset); + return clipboard.paste(BukkitAdapter.adapt(Bukkit.getWorlds().get(0)), to, false, true, new AffineTransform().rotateY(rotate)); + } catch (SecurityException exception) { + return null; + } } } diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/PlotRegionBackups.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/PlotRegionBackups.java index 067b9623..95b8c9f2 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/PlotRegionBackups.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/PlotRegionBackups.java @@ -19,15 +19,18 @@ package de.steamwar.bausystem.region.dynamic.modes; +import com.sk89q.worldedit.EditSession; import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.dynamic.DynamicRegion; +import de.steamwar.bausystem.region.dynamic.DynamicRegionRepository; +import de.steamwar.bausystem.region.dynamic.PasteUtils; import lombok.NonNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.*; import java.util.function.Function; -import java.util.stream.Collectors; public class PlotRegionBackups implements RegionBackups { @@ -57,7 +60,7 @@ public class PlotRegionBackups implements RegionBackups { } // Create backup and save! - Backup backup = new BackupImpl(backupType, "", regionDataConstructor); + Backup backup = new BackupImpl(this, backupType, "", regionDataConstructor, region); // Create schematic and stuff? backup.save(); backupList.add(backup); @@ -70,7 +73,7 @@ public class PlotRegionBackups implements RegionBackups { return backups.values() .stream() .flatMap(List::stream) - .collect(Collectors.toList()); + .toList(); } @Override @@ -85,13 +88,28 @@ public class PlotRegionBackups implements RegionBackups { private final class BackupImpl extends Backup { - public BackupImpl(@NonNull BackupType type, @NonNull String name, @NonNull Function regionDataConstructor) { + private static final String SCHEM_FILE = "backup.schem"; + + private final PlotRegionBackups parent; + private final File folder; + private final DynamicRegion region; + + public BackupImpl(PlotRegionBackups parent, @NonNull BackupType type, @NonNull String name, @NonNull Function regionDataConstructor, DynamicRegion region) { super(type, name, regionDataConstructor); + this.parent = parent; + folder = new File(""); + this.region = region; } @Override public boolean load() { - throw new UnsupportedOperationException(); + File file = new File(folder, SCHEM_FILE); + if (!file.exists()) return false; + EditSession editSession = PasteUtils.paste(file, region.getArea().getMinPoint(false), 0); + if (editSession == null) return false; + region.getHistory().remember(editSession); + regionData.copyInto(region.getRegionData()); + return true; } @Override @@ -101,7 +119,9 @@ public class PlotRegionBackups implements RegionBackups { @Override public void delete() { - throw new UnsupportedOperationException(); + parent.backups.getOrDefault(type, Collections.emptyList()) + .remove(this); + DynamicRegionRepository.deleteDir(folder); } @Override