diff --git a/README.md b/README.md index 01bd7a8..cd04cbb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # ExtBackup + Minimal Minecraft backup mod, relying on external backup tools. ## Why? + The regular well-known backup mods lack the sophistication of dedicated backup tools. ExtBackup does not care about storage, retention, rotating old backups, freeing up space or any of that stuff. @@ -10,13 +12,16 @@ program can be as simple or as complicated as you want it to be. Connect your Mi whatever you like and backup your worlds however you like. ## Target audience -ExtBackup is aimed at server owners. It's so far only tested on Linux and does not offer much configuration. It just + +ExtBackup is aimed at server owners. It's so far only tested on Linux and does not offer much configuration. It just runs the program with the Minecraft directory as current working directory. It may well work on Windows, or it may not. ## Acknowledgements + * [MelanX](https://modrinth.com/user/MelanX) for [Simple Backups](https://modrinth.com/mod/simple-backups) which formed the base for ExtBackup 2.0, the NeoForge version. -* [LatvianModder](https://github.com/LatvianModder) for his work on [FTB-Backups](https://github.com/FTBTeam/FTB-Backups) +* [LatvianModder](https://github.com/LatvianModder) for his work + on [FTB-Backups](https://github.com/FTBTeam/FTB-Backups) where I stole a lot of the code for the Forge Version. * [alexbobp](https://github.com/alexbobp) and the [elytra](https://github.com/elytra) group for [BTFU](https://github.com/elytra/BTFU), which gave me the idea but didn't go quite far enough. diff --git a/src/main/java/net/sweevo/jinks/BackupThread.java b/src/main/java/net/sweevo/jinks/BackupThread.java index d9098d6..5fb221a 100644 --- a/src/main/java/net/sweevo/jinks/BackupThread.java +++ b/src/main/java/net/sweevo/jinks/BackupThread.java @@ -115,7 +115,9 @@ public class BackupThread extends Thread { try { Process backup = pb.start(); returnValue = backup.waitFor(); - if (returnValue != 0) { throw new IOException("Backup process returned non-zero result!");} + if (returnValue != 0) { + throw new IOException("Backup process returned non-zero result!"); + } } catch (Exception ex) { ExtBackup.LOGGER.error("Something went wrong with the Backup script!"); ExtBackup.LOGGER.error("Check your Backups."); @@ -123,7 +125,7 @@ public class BackupThread extends Thread { } } - private static class Timer { + public static class Timer { private static final SimpleDateFormat SECONDS = new SimpleDateFormat("s.SSS"); private static final SimpleDateFormat MINUTES = new SimpleDateFormat("mm:ss"); diff --git a/src/main/java/net/sweevo/jinks/EventListener.java b/src/main/java/net/sweevo/jinks/EventListener.java index 80b8810..e2d917e 100644 --- a/src/main/java/net/sweevo/jinks/EventListener.java +++ b/src/main/java/net/sweevo/jinks/EventListener.java @@ -13,6 +13,7 @@ import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.network.registration.NetworkRegistry; import net.sweevo.jinks.commands.BackupCommand; import net.sweevo.jinks.commands.PauseCommand; +import net.sweevo.jinks.commands.StatusCommand; import net.sweevo.jinks.config.CommonConfig; import net.sweevo.jinks.config.ServerConfig; import net.sweevo.jinks.network.Pause; @@ -30,6 +31,7 @@ public class EventListener { event.getDispatcher().register(Commands.literal(ExtBackup.MODID) .requires(stack -> ServerConfig.commandsCheatsDisabled() || stack.hasPermission(2)) .then(BackupCommand.register()) + .then(StatusCommand.register()) .then(PauseCommand.register())); } diff --git a/src/main/java/net/sweevo/jinks/commands/StatusCommand.java b/src/main/java/net/sweevo/jinks/commands/StatusCommand.java new file mode 100644 index 0000000..2499216 --- /dev/null +++ b/src/main/java/net/sweevo/jinks/commands/StatusCommand.java @@ -0,0 +1,42 @@ +package net.sweevo.jinks.commands; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import net.minecraft.ChatFormatting; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.network.chat.Style; +import net.minecraft.server.level.ServerPlayer; +import net.sweevo.jinks.BackupData; +import net.sweevo.jinks.BackupThread; +import net.sweevo.jinks.ExtBackup; +import net.sweevo.jinks.config.CommonConfig; + +public class StatusCommand implements Command { + + + private StatusCommand() { + } + + public static ArgumentBuilder register() { + return Commands.literal("backup") + .then(Commands.literal("status") + .executes(new StatusCommand())); + } + + + @Override + public int run(CommandContext context) { + BackupData data = BackupData.get(context.getSource().getServer()); + String paused = data.isPaused() ? "true" : "false"; + String nextUp = BackupThread.Timer.getTimer(data.getLastSaved() + CommonConfig.getTimer()); + ServerPlayer player = context.getSource().getPlayer(); + if (player != null) { + player.sendSystemMessage(BackupThread.component(player, "extbackup.status_message", paused, nextUp).withStyle(Style.EMPTY.withColor(ChatFormatting.GOLD))); + } else { + ExtBackup.LOGGER.info("Backups paused: {} - Next backup: {}", paused, nextUp); + } + return 0; + } +} diff --git a/src/main/resources/assets/extbackup/lang/de_de.json b/src/main/resources/assets/extbackup/lang/de_de.json index a68101f..953877d 100644 --- a/src/main/resources/assets/extbackup/lang/de_de.json +++ b/src/main/resources/assets/extbackup/lang/de_de.json @@ -1,5 +1,6 @@ { "extbackup.backup_started": "Backup gestartet...", "extbackup.backup_finished": "Backup fertiggestellt in %s", - "extbackup.backups_paused": "Backups pausiert" + "extbackup.backups_paused": "Backups pausiert", + "extbackup.status_message": "Backups pausiert: %s. - Nächstes Backup: %s" } diff --git a/src/main/resources/assets/extbackup/lang/en_us.json b/src/main/resources/assets/extbackup/lang/en_us.json index 8ea6fbe..55345f0 100644 --- a/src/main/resources/assets/extbackup/lang/en_us.json +++ b/src/main/resources/assets/extbackup/lang/en_us.json @@ -1,5 +1,6 @@ { "extbackup.backup_started": "Backup started...", "extbackup.backup_finished": "Backup completed in %s", - "extbackup.backups_paused": "Backups paused" + "extbackup.backups_paused": "Backups paused", + "extbackup.status_message": "Backups paused: %s. - Next backup: %s" }