summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeuin <[email protected]>2020-05-08 15:44:24 +0800
committerkeuin <[email protected]>2020-05-08 15:44:24 +0800
commit021959233f38d1bbcfe6fbcac4c64ab524a70eac (patch)
treea70805b4a1be91274b31a09c476a4a8f73ebbc2b /src
parent13033634d6451f1df8d4da6fd99ebf5bf3b26eb3 (diff)
Added script-based auto reboot support (after restoring).
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/keuin/kbackupfabric/operation/BackupOperation.java3
-rw-r--r--src/main/java/com/keuin/kbackupfabric/operation/RestoreOperation.java12
-rw-r--r--src/main/java/com/keuin/kbackupfabric/operation/abstracts/AbstractBlockingOperation.java4
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/ServerRestartUtil.java58
4 files changed, 73 insertions, 4 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/operation/BackupOperation.java b/src/main/java/com/keuin/kbackupfabric/operation/BackupOperation.java
index bceca40..53b05b8 100644
--- a/src/main/java/com/keuin/kbackupfabric/operation/BackupOperation.java
+++ b/src/main/java/com/keuin/kbackupfabric/operation/BackupOperation.java
@@ -1,10 +1,10 @@
package com.keuin.kbackupfabric.operation;
+import com.keuin.kbackupfabric.exception.ZipUtilException;
import com.keuin.kbackupfabric.metadata.BackupMetadata;
import com.keuin.kbackupfabric.operation.abstracts.InvokableAsyncBlockingOperation;
import com.keuin.kbackupfabric.util.PrintUtil;
import com.keuin.kbackupfabric.util.ZipUtil;
-import com.keuin.kbackupfabric.exception.ZipUtilException;
import com.mojang.brigadier.context.CommandContext;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource;
@@ -53,6 +53,7 @@ public class BackupOperation extends InvokableAsyncBlockingOperation {
String levelPath = getLevelPath(server);
String backupFileName = getBackupFileName(backupName);
PrintUtil.info(String.format("zip(srcPath=%s, destPath=%s)", levelPath, backupSaveDirectoryFile.toString()));
+ msgInfo(context, "Compressing worlds ...");
PrintUtil.info("Compressing level ...");
ZipUtil.makeBackupZip(levelPath, backupSaveDirectoryFile.toString(), backupFileName, backupMetadata);
File backupZipFile = new File(backupSaveDirectoryFile, backupFileName);
diff --git a/src/main/java/com/keuin/kbackupfabric/operation/RestoreOperation.java b/src/main/java/com/keuin/kbackupfabric/operation/RestoreOperation.java
index 42003db..6754393 100644
--- a/src/main/java/com/keuin/kbackupfabric/operation/RestoreOperation.java
+++ b/src/main/java/com/keuin/kbackupfabric/operation/RestoreOperation.java
@@ -1,9 +1,9 @@
package com.keuin.kbackupfabric.operation;
+import com.keuin.kbackupfabric.exception.ZipUtilException;
import com.keuin.kbackupfabric.operation.abstracts.InvokableBlockingOperation;
import com.keuin.kbackupfabric.util.PrintUtil;
import com.keuin.kbackupfabric.util.ZipUtil;
-import com.keuin.kbackupfabric.exception.ZipUtilException;
import com.mojang.brigadier.context.CommandContext;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource;
@@ -121,6 +121,16 @@ public class RestoreOperation extends InvokableBlockingOperation {
ZipUtil.unzip(backupFilePath, levelDirectory, false);
long endTime = System.currentTimeMillis();
PrintUtil.info(String.format("Restore complete! (%.2fs) Please restart the server manually.", (endTime - startTime) / 1000.0));
+ PrintUtil.info("If you want to restart automatically after restoring, please visit the project manual at: https://github.com/keuin/KBackup-Fabric/blob/master/README.md");
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ignored) {
+ }
+
+ //ServerRestartUtil.forkAndRestart();
+ System.exit(111);
+
} catch (SecurityException | IOException | ZipUtilException e) {
PrintUtil.error("An exception occurred while restoring: " + e.getMessage());
}
diff --git a/src/main/java/com/keuin/kbackupfabric/operation/abstracts/AbstractBlockingOperation.java b/src/main/java/com/keuin/kbackupfabric/operation/abstracts/AbstractBlockingOperation.java
index de672cd..15b72c9 100644
--- a/src/main/java/com/keuin/kbackupfabric/operation/abstracts/AbstractBlockingOperation.java
+++ b/src/main/java/com/keuin/kbackupfabric/operation/abstracts/AbstractBlockingOperation.java
@@ -13,11 +13,11 @@ public abstract class AbstractBlockingOperation extends AbstractSerializedOperat
protected final boolean operate() {
synchronized (sync) {
if (isBlocking) {
- System.out.println("blocked.");
+// System.out.println("blocked.");
wasBlocked = true;
return false;
} else {
- System.out.println("not blocked.");
+// System.out.println("not blocked.");
wasBlocked = false;
isBlocking = true;
}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/ServerRestartUtil.java b/src/main/java/com/keuin/kbackupfabric/util/ServerRestartUtil.java
new file mode 100644
index 0000000..1642e5c
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/ServerRestartUtil.java
@@ -0,0 +1,58 @@
+package com.keuin.kbackupfabric.util;
+
+public class ServerRestartUtil {
+
+ public static void forkAndRestart() {
+// Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
+// @Override
+// public void run() {
+// // Here we restart the minecraft server
+// StringBuilder cmd = new StringBuilder();
+// cmd.append(System.getProperty("java.home")).append(File.separator).append("bin").append(File.separator).append("java ");
+// for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
+// cmd.append(jvmArg + " ");
+// }
+// cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" ");
+// cmd.append(MinecraftServer.class.getName()).append(" ");
+// for (String arg : args) {
+// cmd.append(arg).append(" ");
+// }
+// Runtime.getRuntime().exec(cmd.toString());
+// System.exit(0);
+// }
+// }));
+ }
+
+ private static void startRestartThread() {
+// (new Thread(() -> {
+//
+//
+// // kill threads
+// Set<Thread> threads = Thread.getAllStackTraces().keySet();
+// Thread currentThread = Thread.currentThread();
+// for (Thread t : threads) {
+// if(t != currentThread && t.isAlive()) {
+// t.setUncaughtExceptionHandler((t1, e) -> {
+// // set empty handler
+// });
+// //t.interrupt();
+// try {
+// t.setDaemon(true);
+// } catch (Exception ignored) {
+// }
+//
+// t.stop();
+// }
+// }
+//
+// try {
+// Thread.sleep(5000);
+// } catch (InterruptedException ignored) {
+// }
+//
+// // restart Minecraft server
+// String[] args = new String[]{};
+// MinecraftServer.main(args);
+// })).start();
+ }
+}