better error handling for initialization and shutdown

This commit is contained in:
iceBear67 committed 2026-02-21 18:31:14 +08:00
1 parent 4b81c3e827
commit 1bd2148df2
1 file changed
+18 -5
@@ -11,7 +11,6 @@ import io.ib67.sfcraft.strategy.S3BackupStrategy;
import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufAllocator;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@@ -22,7 +21,8 @@ import org.slf4j.LoggerFactory;
import java.awt.*; import java.awt.*;
import java.io.IOException; import java.io.IOException;
import java.nio.file.*; import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -44,10 +44,23 @@ public class JustBackupMod implements ModInitializer {
protected JustBackupConfig config; protected JustBackupConfig config;
protected BackupTracker tracker; protected BackupTracker tracker;
protected Path backupIndexPath; protected Path backupIndexPath;
protected FileWatcherThread watcherThread;
@Override @Override
@SneakyThrows
public void onInitialize() { public void onInitialize() {
try {
doInitialize();
} catch (Exception e) {
LOGGER.error("Error while initializing the mod", e);
LOGGER.error("This mod will not work w/o correct configuration.");
if (watcherThread != null) {
if (watcherThread.getState() != Thread.State.NEW) watcherThread.interrupt();
}
}
}
@SneakyThrows
private void doInitialize() {
LOGGER.info("Loading backup configuration"); LOGGER.info("Loading backup configuration");
Path config1 = Path.of("config"); Path config1 = Path.of("config");
backupIndexPath = config1.resolve("just_backup_index.json"); backupIndexPath = config1.resolve("just_backup_index.json");
@@ -81,14 +94,14 @@ public class JustBackupMod implements ModInitializer {
} }
private void registerWatchService() { private void registerWatchService() {
var watcherThread = new FileWatcherThread( watcherThread = new FileWatcherThread(
config.backupSubjects().entrySet().stream() config.backupSubjects().entrySet().stream()
.map(it -> Map.entry(it.getKey(), Path.of(it.getValue()))) .map(it -> Map.entry(it.getKey(), Path.of(it.getValue())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)), .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)),
this::handleFileChanges this::handleFileChanges
); );
ServerLifecycleEvents.SERVER_STOPPED.register(server -> { ServerLifecycleEvents.SERVER_STOPPED.register(server -> {
watcherThread.interrupt(); if (watcherThread.getState() != Thread.State.TERMINATED) watcherThread.interrupt();
}); });
watcherThread.start(); watcherThread.start();
} }