summaryrefslogtreecommitdiffstats
path: root/Essentials/src/com/earth2me/essentials/Backup.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/Backup.java')
-rw-r--r--Essentials/src/com/earth2me/essentials/Backup.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Backup.java b/Essentials/src/com/earth2me/essentials/Backup.java
new file mode 100644
index 000000000..aa0cb1476
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/Backup.java
@@ -0,0 +1,82 @@
+package com.earth2me.essentials;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.bukkit.command.CommandSender;
+import org.bukkit.craftbukkit.CraftServer;
+
+public class Backup implements Runnable {
+ private static final Logger logger = Logger.getLogger("Minecraft");
+ private CraftServer server;
+ private boolean running = false;
+ private int taskId = -1;
+ private boolean active = false;
+
+ public Backup() {
+ server = (CraftServer)Essentials.getStatic().getServer();
+ if (server.getOnlinePlayers().length > 0) {
+ startTask();
+ }
+ }
+
+ void onPlayerJoin() {
+ startTask();
+ }
+
+ private void startTask() {
+ if (!running) {
+ long interval = Essentials.getSettings().getBackupInterval()*1200; // minutes -> ticks
+ if (interval < 1200) {
+ return;
+ }
+ taskId = server.getScheduler().scheduleSyncRepeatingTask(Essentials.getStatic(), this, interval, interval);
+ running = true;
+ }
+ }
+
+ public void run() {
+ if (active) return;
+ active = true;
+ final String command = Essentials.getSettings().getBackupCommand();
+ if (command == null || "".equals(command)) {
+ return;
+ }
+ logger.log(Level.INFO, "Backup started");
+ final CommandSender cs = server.getServer().console;
+ server.dispatchCommand(cs, "save-all");
+ server.dispatchCommand(cs, "save-off");
+
+ server.getScheduler().scheduleAsyncDelayedTask(Essentials.getStatic(),
+ new Runnable() {
+
+ public void run() {
+ try {
+ Process child = Runtime.getRuntime().exec(command);
+ child.waitFor();
+ } catch (InterruptedException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } catch (IOException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } finally {
+ server.getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
+ new Runnable() {
+
+ public void run() {
+ server.dispatchCommand(cs, "save-on");
+ if (server.getOnlinePlayers().length == 0) {
+ running = false;
+ if (taskId != -1) {
+ server.getScheduler().cancelTask(taskId);
+ }
+ }
+ active = false;
+ logger.log(Level.INFO, "Backup finished");
+ }
+ });
+ }
+ }
+ });
+ }
+
+}