diff --git a/EXAMPLES.md b/EXAMPLES.md index 3799289..5eeb934 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -217,8 +217,9 @@ Another way to do this is like this: } public static class MyCustomProxy implements IConfigProxy { - public List getBasePath() { - return Arrays.asList(Paths.get("MyBaseFolder/newInstance"), Paths.get("MyBaseFolder")); + public Path getBasePath(Path configFile) { + Path path = Paths.get("MyBaseFolder/newInstance"); + return Files.exist(path.resolve(configFile) ? path : Paths.get("MyBaseFolder"); } public boolean isDynamicProxy() { @@ -226,7 +227,8 @@ Another way to do this is like this: } public List getPotentialConfigs() { - return getBasePath().stream().map(path -> new SimpleTarget(path, Helpers.firstLetterUppercase(path.getFileName().toString()))).toList(); + List potentialPaths = Arrays.asList(Paths.get("MyBaseFolder/newInstance"), Paths.get("MyBaseFolder")); + return potentialPaths.stream().map(path -> new SimpleTarget(path, Helpers.firstLetterUppercase(path.getFileName().toString()))).toList(); } } ``` diff --git a/src/main/java/carbonconfiglib/api/IConfigProxy.java b/src/main/java/carbonconfiglib/api/IConfigProxy.java index b210b73..d962e42 100644 --- a/src/main/java/carbonconfiglib/api/IConfigProxy.java +++ b/src/main/java/carbonconfiglib/api/IConfigProxy.java @@ -20,7 +20,7 @@ */ public interface IConfigProxy { - public List getBasePaths(); + public Path getBasePaths(Path relativeFile); public List getPotentialConfigs(); public boolean isDynamicProxy(); diff --git a/src/main/java/carbonconfiglib/api/SimpleConfigProxy.java b/src/main/java/carbonconfiglib/api/SimpleConfigProxy.java index e4e17dd..9060ae0 100644 --- a/src/main/java/carbonconfiglib/api/SimpleConfigProxy.java +++ b/src/main/java/carbonconfiglib/api/SimpleConfigProxy.java @@ -35,8 +35,8 @@ public boolean isDynamicProxy() { } @Override - public List getBasePaths() { - return ObjectLists.singleton(path); + public Path getBasePaths(Path relativeFile) { + return path; } @Override diff --git a/src/main/java/carbonconfiglib/config/ConfigHandler.java b/src/main/java/carbonconfiglib/config/ConfigHandler.java index 9811ed7..66f13a8 100644 --- a/src/main/java/carbonconfiglib/config/ConfigHandler.java +++ b/src/main/java/carbonconfiglib/config/ConfigHandler.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.EnumSet; import java.util.List; @@ -166,8 +167,8 @@ public void register() { public void createDefaultConfig() { if(!registered) return; if(proxy.isDynamicProxy() && setting.contains(AutomationType.AUTO_LOAD)) { - List baseFolders = proxy.getBasePaths(); - Path file = createConfigFile(baseFolders.get(baseFolders.size()-1)); + Path baseFolder = proxy.getBasePaths(createConfigFile(Paths.get(""))); + Path file = createConfigFile(baseFolder); if(Files.notExists(file)) { save(file); wasSaving--; @@ -209,24 +210,11 @@ public void unload() { } private void findConfigFile() { - List baseFolders = proxy.getBasePaths(); - if(baseFolders.isEmpty()) throw new IllegalStateException("Proxy has no Folders"); - if(baseFolders.size() == 1) { - configFile = createConfigFile(baseFolders.get(0)); - cfgDir = configFile.getParent(); - Helpers.ensureFolder(cfgDir); - return; - } - - for(int i = baseFolders.size()-1,m=i;i>=0;i--) { - Path file = createConfigFile(baseFolders.get(i)); - if(Files.notExists(file)) { - if(i == m) save(file); - else Helpers.copyFile(createConfigFile(baseFolders.get(i+1)), file); - } - } - configFile = createConfigFile(baseFolders.get(0)); + Path baseFolder = proxy.getBasePaths(createConfigFile(Paths.get(""))); + if(baseFolder == null) throw new IllegalStateException("Proxy has no Folder"); + configFile = createConfigFile(baseFolder); cfgDir = configFile.getParent(); + Helpers.ensureFolder(cfgDir); } public void addLoadedListener(Runnable listener) {