diff --git a/buildsystem-core/src/main/java/de/eintosti/buildsystem/BuildSystemPlugin.java b/buildsystem-core/src/main/java/de/eintosti/buildsystem/BuildSystemPlugin.java index 75c592df..e97702c8 100644 --- a/buildsystem-core/src/main/java/de/eintosti/buildsystem/BuildSystemPlugin.java +++ b/buildsystem-core/src/main/java/de/eintosti/buildsystem/BuildSystemPlugin.java @@ -407,6 +407,9 @@ public void reloadConfigData(boolean init) { reloadConfig(); Config.load(); + if (isEnabled()) { + backupService.reload(); + } if (init) { worldService.getWorldStorage().getBuildWorlds().forEach(buildWorld -> buildWorld.getUnloader().manageUnload()); diff --git a/buildsystem-core/src/main/java/de/eintosti/buildsystem/config/Config.java b/buildsystem-core/src/main/java/de/eintosti/buildsystem/config/Config.java index 33cfce43..1626a17f 100644 --- a/buildsystem-core/src/main/java/de/eintosti/buildsystem/config/Config.java +++ b/buildsystem-core/src/main/java/de/eintosti/buildsystem/config/Config.java @@ -65,7 +65,7 @@ public class Config { private static final BuildSystemPlugin PLUGIN = BuildSystemPlugin.get(); - private static final FileConfiguration CONFIG = PLUGIN.getConfig(); + private static FileConfiguration CONFIG = PLUGIN.getConfig(); /** * Gets the plugin's configuration. @@ -440,6 +440,7 @@ public static class Folder { * Loads the configuration values from the plugin's config.yml into the static fields. */ public static void load() { + CONFIG = PLUGIN.getConfig(); final Logger logger = PLUGIN.getLogger(); // Messages diff --git a/buildsystem-core/src/main/java/de/eintosti/buildsystem/world/backup/BackupService.java b/buildsystem-core/src/main/java/de/eintosti/buildsystem/world/backup/BackupService.java index 8257c11f..cff29d9d 100644 --- a/buildsystem-core/src/main/java/de/eintosti/buildsystem/world/backup/BackupService.java +++ b/buildsystem-core/src/main/java/de/eintosti/buildsystem/world/backup/BackupService.java @@ -7,16 +7,6 @@ */ package de.eintosti.buildsystem.world.backup; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import de.eintosti.buildsystem.BuildSystemPlugin; -import de.eintosti.buildsystem.api.data.Type; -import de.eintosti.buildsystem.api.storage.WorldStorage; -import de.eintosti.buildsystem.api.world.BuildWorld; -import de.eintosti.buildsystem.api.world.backup.BackupProfile; -import de.eintosti.buildsystem.api.world.backup.BackupStorage; -import de.eintosti.buildsystem.config.Config.World.Backup; -import de.eintosti.buildsystem.config.Config.World.Backup.AutoBackup; import java.time.Duration; import java.util.HashSet; import java.util.Set; @@ -26,9 +16,24 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.logging.Level; + import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import de.eintosti.buildsystem.BuildSystemPlugin; +import de.eintosti.buildsystem.api.data.Type; +import de.eintosti.buildsystem.api.storage.WorldStorage; +import de.eintosti.buildsystem.api.world.BuildWorld; +import de.eintosti.buildsystem.api.world.backup.BackupProfile; +import de.eintosti.buildsystem.api.world.backup.BackupStorage; +import de.eintosti.buildsystem.config.Config.World.Backup; +import de.eintosti.buildsystem.config.Config.World.Backup.AutoBackup; @NullMarked public class BackupService { @@ -42,13 +47,31 @@ public class BackupService { private final Cache backupProfileCache = CacheBuilder.newBuilder().expireAfterAccess(3, TimeUnit.MINUTES).build(); + @Nullable + private BukkitTask autoBackupTask; + public BackupService(BuildSystemPlugin plugin) { this.plugin = plugin; this.backupStorage = Backup.storage; this.worldStorage = plugin.getWorldService().getWorldStorage(); if (AutoBackup.enabled) { - Bukkit.getScheduler().runTaskTimer(plugin, this::incrementTimeSinceBackup, UPDATE_PERIOD * 20, UPDATE_PERIOD * 20); + this.autoBackupTask = Bukkit.getScheduler().runTaskTimer(plugin, this::incrementTimeSinceBackup, UPDATE_PERIOD * 20, UPDATE_PERIOD * 20); + } + } + + /** + * Reloads the auto-backup scheduler based on the current {@link AutoBackup} configuration. + * If auto-backup was previously running and is now disabled, the task is cancelled. + * If auto-backup was not running and is now enabled, a new task is started. + */ + public void reload() { + if (autoBackupTask != null) { + autoBackupTask.cancel(); + autoBackupTask = null; + } + if (AutoBackup.enabled && plugin.isEnabled()) { + this.autoBackupTask = Bukkit.getScheduler().runTaskTimer(plugin, this::incrementTimeSinceBackup, UPDATE_PERIOD * 20, UPDATE_PERIOD * 20); } }