diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index 2736c8ec..47cf93ac 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -102,9 +102,13 @@ AUTOSTART_MESSAGE_RESULT3 = §7Positiv, wenn zu wenig, negativ wenn zu viel # Backup BACKUP_REGION_NO_REGION=§cDu bist in keiner Region BACKUP_NO_PERMS=§cDu darfst hier nicht das Backup System verwenden -BACKUP_SUCCESS=§7Das Backup wurde erstellt -BACKUP_FAILURE=§cDas Backup erstellen ist schiefgegangen -BACKUP_NO_CHANGE=§7Die Region hat keine Veränderung +BACKUP_CREATE_SUCCESS=§7Das Backup wurde erstellt +BACKUP_CREATE_FAILURE=§cDas Backup erstellen ist schiefgegangen +BACKUP_CREATE_NO_CHANGE=§7Die Region hat keine Veränderung +BACKUP_LIST_HEAD=§7---=== (§eBackup§7) ===--- +BACKUP_LIST_ENTRY=§7{0} §e[Laden] +BACKUP_LOAD_FAILURE=§cDas Backup laden ist schiefgegangen +BACKUP_LOAD=§7Backup geladen # Bau BAU_COMMAND_HELP1 = §8/§ebau togglewe §8[§7Player§8] §8- §7Editiere die WorldEdit Rechte eines Spielers diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/backup/BackupCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/backup/BackupCommand.java index e674fe3a..91e9ea53 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/backup/BackupCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/backup/BackupCommand.java @@ -28,8 +28,10 @@ import de.steamwar.bausystem.region.tags.Tag; import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; +import net.md_5.bungee.api.chat.ClickEvent; import org.bukkit.entity.Player; +import java.io.File; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -71,13 +73,13 @@ public class BackupCommand extends SWCommand { return; } if (!region.get(Tag.CHANGED)) { - BauSystem.MESSAGE.send("BACKUP_NO_CHANGE", p); + BauSystem.MESSAGE.send("BACKUP_CREATE_NO_CHANGE", p); return; } if (region.backup()) { - BauSystem.MESSAGE.send("BACKUP_SUCCESS", p); + BauSystem.MESSAGE.send("BACKUP_CREATE_SUCCESS", p); } else { - BauSystem.MESSAGE.send("BACKUP_FAILURE", p); + BauSystem.MESSAGE.send("BACKUP_CREATE_FAILURE", p); } } @@ -88,7 +90,14 @@ public class BackupCommand extends SWCommand { if (checkGlobalRegion(region, p)) { return; } - System.out.println(backupName); + + File backupFile = region.getBackupFile(backupName); + if (backupFile == null) { + BauSystem.MESSAGE.send("BACKUP_LOAD_FAILURE", p); + return; + } + region.reset(backupFile); + BauSystem.MESSAGE.send("BACKUP_LOAD", p); } @Register("list") @@ -97,17 +106,18 @@ public class BackupCommand extends SWCommand { if (checkGlobalRegion(region, p)) { return; } - listbackup(p).forEach(s -> { - p.sendMessage("HERE: " + s); + BauSystem.MESSAGE.send("BACKUP_LIST_HEAD", p); + listBackup(p).forEach(s -> { + BauSystem.MESSAGE.send("BACKUP_LIST_ENTRY", p, "/backup load " + s, new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup load " + s), s); }); } @Mapper(value = "backupName", local = true) public TypeMapper backupMapper() { - return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listbackup((Player) commandSender)); + return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender)); } - private List listbackup(Player p) { + private List listBackup(Player p) { Region region = Region.getRegion(p.getLocation()); if (checkGlobalRegion(region, p)) { return Collections.emptyList(); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java index 7b428f2b..c848d99a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java @@ -370,6 +370,12 @@ public class Region { reset(schematic, regionType, regionExtensionType, false); } + public void reset(File file) { + EditSession editSession = paste(file, minPoint.add(prototype.getSizeX() / 2, 0, prototype.getSizeZ() / 2), new PasteOptions(false, false, Color.YELLOW, true, getMinPoint(RegionType.NORMAL, RegionExtensionType.NORMAL), getMaxPoint(RegionType.NORMAL, RegionExtensionType.NORMAL), waterLevel)); + initSessions(); + undoSessions.push(editSession); + } + public void reset(Schematic schematic, RegionType regionType, RegionExtensionType regionExtensionType, boolean ignoreAir) throws IOException { if (!hasReset(regionType)) { return; @@ -485,4 +491,13 @@ public class Region { definedBackupFolder.mkdirs(); return Arrays.asList(Objects.requireNonNull(definedBackupFolder.list((dir, name) -> name.endsWith(".schem")))); } + + public File getBackupFile(String backupName) { + final File definedBackupFolder = new File(new File(backupFolder, prototype.getName()), name); + //noinspection ResultOfMethodCallIgnored + definedBackupFolder.mkdirs(); + File[] files = definedBackupFolder.listFiles((dir, name) -> name.equals(backupName + ".schem")); + if (files == null || files.length == 0) return null; + return files[0]; + } } \ No newline at end of file