Skip to content

Commit 097707c

Browse files
committed
Use platform services for config dir location
1 parent ce9ab7e commit 097707c

File tree

8 files changed

+64
-6
lines changed

8 files changed

+64
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Added toast notification option
66
- Stopped trigger duplicate detection evaluating disabled notifications
7+
- Improved config directory detection
78

89
## 2.3.10
910

common/src/main/java/dev/terminalmc/chatnotify/config/Config.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.google.gson.*;
2020
import dev.terminalmc.chatnotify.ChatNotify;
21+
import dev.terminalmc.chatnotify.platform.Services;
2122
import dev.terminalmc.chatnotify.util.JsonUtil;
2223
import net.minecraft.sounds.SoundSource;
2324
import org.jetbrains.annotations.NotNull;
@@ -50,7 +51,7 @@
5051
public class Config {
5152
public static final int VERSION = 9;
5253
public final int version = VERSION;
53-
private static final Path DIR_PATH = Path.of("config");
54+
private static final Path CONFIG_DIR = Services.PLATFORM.getConfigDir();
5455
public static final String FILE_NAME = ChatNotify.MOD_ID + ".json";
5556
public static final String UNREADABLE_FILE_NAME = ChatNotify.MOD_ID + ".unreadable.json";
5657
public static final String OLD_FILE_NAME = ChatNotify.MOD_ID + ".old.json";
@@ -316,7 +317,7 @@ public static Config reload() {
316317
// Load and save
317318

318319
public static @NotNull Config load() {
319-
Path file = DIR_PATH.resolve(FILE_NAME);
320+
Path file = CONFIG_DIR.resolve(FILE_NAME);
320321
Config config = null;
321322
if (Files.exists(file)) {
322323
JsonUtil.reset();
@@ -347,8 +348,8 @@ public static Config reload() {
347348
private static void backup(String path) {
348349
try {
349350
ChatNotify.LOG.warn("Copying {} to {}", FILE_NAME, path);
350-
if (!Files.isDirectory(DIR_PATH)) Files.createDirectories(DIR_PATH);
351-
Path file = DIR_PATH.resolve(FILE_NAME);
351+
if (!Files.isDirectory(CONFIG_DIR)) Files.createDirectories(CONFIG_DIR);
352+
Path file = CONFIG_DIR.resolve(FILE_NAME);
352353
Path backupFile = file.resolveSibling(path);
353354
Files.move(file, backupFile, StandardCopyOption.ATOMIC_MOVE,
354355
StandardCopyOption.REPLACE_EXISTING);
@@ -361,8 +362,8 @@ public static void save() {
361362
if (instance == null) return;
362363
instance.validate();
363364
try {
364-
if (!Files.isDirectory(DIR_PATH)) Files.createDirectories(DIR_PATH);
365-
Path file = DIR_PATH.resolve(FILE_NAME);
365+
if (!Files.isDirectory(CONFIG_DIR)) Files.createDirectories(CONFIG_DIR);
366+
Path file = CONFIG_DIR.resolve(FILE_NAME);
366367
Path tempFile = file.resolveSibling(file.getFileName() + ".tmp");
367368
try (OutputStreamWriter writer = new OutputStreamWriter(
368369
new FileOutputStream(tempFile.toFile()), StandardCharsets.UTF_8)) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package dev.terminalmc.chatnotify.platform;
2+
3+
import dev.terminalmc.chatnotify.ChatNotify;
4+
import dev.terminalmc.chatnotify.platform.services.IPlatformInfo;
5+
6+
import java.util.ServiceLoader;
7+
8+
public class Services {
9+
public static final IPlatformInfo PLATFORM = load(IPlatformInfo.class);
10+
11+
public static <T> T load(Class<T> clazz) {
12+
final T loadedService = ServiceLoader.load(clazz)
13+
.findFirst()
14+
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
15+
ChatNotify.LOG.debug("Loaded {} for service {}", loadedService, clazz);
16+
return loadedService;
17+
}
18+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.terminalmc.chatnotify.platform.services;
2+
3+
import java.nio.file.Path;
4+
5+
public interface IPlatformInfo {
6+
/**
7+
* @return the configuration directory of the instance.
8+
*/
9+
Path getConfigDir();
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.terminalmc.chatnotify.platform;
2+
3+
import dev.terminalmc.chatnotify.platform.services.IPlatformInfo;
4+
import net.fabricmc.loader.api.FabricLoader;
5+
6+
import java.nio.file.Path;
7+
8+
public class FabricPlatformInfo implements IPlatformInfo {
9+
@Override
10+
public Path getConfigDir() {
11+
return FabricLoader.getInstance().getConfigDir();
12+
}
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dev.terminalmc.chatnotify.platform.FabricPlatformInfo
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.terminalmc.chatnotify.platform;
2+
3+
import dev.terminalmc.chatnotify.platform.services.IPlatformInfo;
4+
import net.neoforged.fml.loading.FMLPaths;
5+
6+
import java.nio.file.Path;
7+
8+
public class NeoForgePlatformInfo implements IPlatformInfo {
9+
@Override
10+
public Path getConfigDir() {
11+
return FMLPaths.CONFIGDIR.get();
12+
}
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dev.terminalmc.chatnotify.platform.NeoForgePlatformInfo

0 commit comments

Comments
 (0)