From 4b3698378cf1840b4fd889b2a95ac5aafb334227 Mon Sep 17 00:00:00 2001 From: k-jiang Date: Fri, 16 Nov 2018 22:35:23 -0500 Subject: [PATCH 1/7] Allow loading mods from version-specified directory i.e. mods/1.13-Rift --- .../java/org/dimdev/riftloader/RiftLoader.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index 8facf0e..ce24340 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -29,7 +29,8 @@ public class RiftLoader { public static final RiftLoader instance = new RiftLoader(); private static final Logger log = LogManager.getLogger("RiftLoader"); - public final File modsDir = new File(Launch.minecraftHome, "mods"); + public File modsDir = new File(Launch.minecraftHome, "mods"); + public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/1.13-Rift"); public final File configDir = new File(Launch.minecraftHome, "config"); private Side side; private boolean loaded; @@ -49,6 +50,17 @@ public void load(boolean isClient) { side = isClient ? Side.CLIENT : Side.SERVER; + // test if mods/"version"-Rift contains any .jar files + modsVersionSpecifiedDir.mkdir(); + for (File tempFile : modsVersionSpecifiedDir.listFiles()) { + // test if dir contains any .jar files + if (tempFile.getName().toLowerCase().endsWith((".jar"))) { + // load mods from mods/"version"-Rift folder + modsDir = modsVersionSpecifiedDir; + break; + } + } + findMods(modsDir); sortMods(); initMods(); From cb59997d33bc27532b8613fa57577c517a85f69d Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sat, 17 Nov 2018 00:26:56 -0500 Subject: [PATCH 2/7] Don't create the "mods/1.13-Rift" folder by default. --- .../java/org/dimdev/riftloader/RiftLoader.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index ce24340..4bbaca6 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -51,13 +51,14 @@ public void load(boolean isClient) { side = isClient ? Side.CLIENT : Side.SERVER; // test if mods/"version"-Rift contains any .jar files - modsVersionSpecifiedDir.mkdir(); - for (File tempFile : modsVersionSpecifiedDir.listFiles()) { - // test if dir contains any .jar files - if (tempFile.getName().toLowerCase().endsWith((".jar"))) { - // load mods from mods/"version"-Rift folder - modsDir = modsVersionSpecifiedDir; - break; + if (modsVersionSpecifiedDir.exists() && modsVersionSpecifiedDir.isDirectory()) { + for (File tempFile : modsVersionSpecifiedDir.listFiles()) { + // test if dir contains any .jar files + if (tempFile.getName().toLowerCase().endsWith((".jar"))) { + // load mods from mods/"version"-Rift folder + modsDir = modsVersionSpecifiedDir; + break; + } } } From 9ae6095e48c1fcfa054c9e9cf7e0c90c27cbb41e Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sat, 17 Nov 2018 00:41:20 -0500 Subject: [PATCH 3/7] Automate minecraft version with mods directory --- build.gradle | 3 +++ src/main/java/org/dimdev/riftloader/RiftLoader.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5df21f1..7f264ff 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,9 @@ minecraft { replace "@VERSION@", project.version replaceIn "org/dimdev/riftloader/Main.java" + + replace "@MCVERSION@", project.minecraft.version + replaceIn "org/dimdev/riftloader/RiftLoader.java" } mixin { diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index 4bbaca6..469a752 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -30,7 +30,7 @@ public class RiftLoader { private static final Logger log = LogManager.getLogger("RiftLoader"); public File modsDir = new File(Launch.minecraftHome, "mods"); - public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/1.13-Rift"); + public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/@MCVERSION@-Rift"); public final File configDir = new File(Launch.minecraftHome, "config"); private Side side; private boolean loaded; From 0a4826c989c00577add3edd0790a4a6348cfe4a6 Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sat, 17 Nov 2018 14:04:14 -0500 Subject: [PATCH 4/7] Load mods from "mods/rift/" and its version-specified subdirectory create "mods/rift/" folder by default Rift's mods should be inside "mods/rift/" or "mods/rift/_version_", no more "mods/_version_-Rift/" load mods from classpath, "mods/rift/_version_", "mods/rift/" and "mods/" classpath mods are now loaded and logged separately to avoid confusion --- .../org/dimdev/riftloader/RiftLoader.java | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index 469a752..f964599 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -30,7 +30,8 @@ public class RiftLoader { private static final Logger log = LogManager.getLogger("RiftLoader"); public File modsDir = new File(Launch.minecraftHome, "mods"); - public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/@MCVERSION@-Rift"); + public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/rift/@MCVERSION@"); + public final File modsRiftDir = new File(Launch.minecraftHome, "mods/rift"); public final File configDir = new File(Launch.minecraftHome, "config"); private Side side; private boolean loaded; @@ -50,31 +51,32 @@ public void load(boolean isClient) { side = isClient ? Side.CLIENT : Side.SERVER; - // test if mods/"version"-Rift contains any .jar files + // load mods from classpath + findClasspathMods(); + // test if mods/rift/"version"/ contains any .jar files, then load from it if (modsVersionSpecifiedDir.exists() && modsVersionSpecifiedDir.isDirectory()) { + // search and load mods from mods/rift/"version"/ if there are mods inside for (File tempFile : modsVersionSpecifiedDir.listFiles()) { - // test if dir contains any .jar files if (tempFile.getName().toLowerCase().endsWith((".jar"))) { - // load mods from mods/"version"-Rift folder - modsDir = modsVersionSpecifiedDir; + findJarMods(modsVersionSpecifiedDir); break; } } } - - findMods(modsDir); + // load mods from folder mods/rift/, create the folder if not exists + findJarMods(modsRiftDir,true); + // load mods from mods/, create the folder if not exists + findJarMods(modsDir,true); sortMods(); initMods(); initAccessTransformer(); } /** - * Looks for Rift mods (jars containing a 'riftmod.json' at their root) in - * the 'modsDir' directory (creating it if it doesn't exist) and loads them - * into the 'modInfoMap'. - **/ - private void findMods(File modsDir) { - // Load classpath mods + * Load mods from classpath + */ + private void findClasspathMods() { + int modCount = modInfoMap.size(); log.info("Searching mods on classpath"); try { Enumeration urls = ClassLoader.getSystemResources("riftmod.json"); @@ -107,9 +109,22 @@ private void findMods(File modsDir) { throw new RuntimeException(e); } - // Load jar mods + modCount = modInfoMap.size() - modCount; + log.info("Loaded " + modCount + " mods"); + } + + /** + * Looks for Rift mods (jars containing a 'riftmod.json' at their root) in + * the 'modsDir' directory (creating it if it doesn't exist) and loads them + * into the 'modInfoMap'. + **/ + private void findJarMods(File modsDir) { + this.findJarMods(modsDir, false); + } + private void findJarMods(File modsDir, Boolean createDir) { + int modCount = modInfoMap.size(); log.info("Searching for mods in " + modsDir); - modsDir.mkdirs(); + if (createDir) modsDir.mkdirs(); for (File file : modsDir.listFiles()) { if (!file.getName().endsWith(".jar")) continue; @@ -141,7 +156,8 @@ private void findMods(File modsDir) { } } - log.info("Loaded " + modInfoMap.size() + " mods"); + modCount = modInfoMap.size() - modCount; + log.info("Loaded " + modCount + " mods"); } private void loadModFromJson(InputStream in, File source) { From 125bc8b8ea25c88fde50c989c34e74e25baba5ab Mon Sep 17 00:00:00 2001 From: sjx233 Date: Sat, 17 Nov 2018 22:02:46 -0500 Subject: [PATCH 5/7] Update src/main/java/org/dimdev/riftloader/RiftLoader.java Fix case sensitive. Co-Authored-By: k-jiang --- src/main/java/org/dimdev/riftloader/RiftLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index f964599..ed9fcc0 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -126,7 +126,7 @@ private void findJarMods(File modsDir, Boolean createDir) { log.info("Searching for mods in " + modsDir); if (createDir) modsDir.mkdirs(); for (File file : modsDir.listFiles()) { - if (!file.getName().endsWith(".jar")) continue; + if (!file.getName().toLowerCase().endsWith(".jar")) continue; try (JarFile jar = new JarFile(file)) { // Check if the file contains a 'riftmod.json' From f2d0593cb9d6870b625316e6ed11ef6489f35f86 Mon Sep 17 00:00:00 2001 From: sjx233 Date: Sat, 17 Nov 2018 22:33:00 -0500 Subject: [PATCH 6/7] Apply suggestions from code review Improve readability. Co-Authored-By: k-jiang --- src/main/java/org/dimdev/riftloader/RiftLoader.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index ed9fcc0..b22a482 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -64,9 +64,9 @@ public void load(boolean isClient) { } } // load mods from folder mods/rift/, create the folder if not exists - findJarMods(modsRiftDir,true); + findJarMods(modsRiftDir, true); // load mods from mods/, create the folder if not exists - findJarMods(modsDir,true); + findJarMods(modsDir, true); sortMods(); initMods(); initAccessTransformer(); @@ -121,7 +121,8 @@ private void findClasspathMods() { private void findJarMods(File modsDir) { this.findJarMods(modsDir, false); } - private void findJarMods(File modsDir, Boolean createDir) { + + private void findJarMods(File modsDir, boolean createDir) { int modCount = modInfoMap.size(); log.info("Searching for mods in " + modsDir); if (createDir) modsDir.mkdirs(); From 5dd71aca504fe832c290b292b881193a6f96c5fe Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sat, 17 Nov 2018 22:49:42 -0500 Subject: [PATCH 7/7] Improve loading logic, by @sjx233 --- .../org/dimdev/riftloader/RiftLoader.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/dimdev/riftloader/RiftLoader.java b/src/main/java/org/dimdev/riftloader/RiftLoader.java index b22a482..f3155a9 100644 --- a/src/main/java/org/dimdev/riftloader/RiftLoader.java +++ b/src/main/java/org/dimdev/riftloader/RiftLoader.java @@ -29,9 +29,9 @@ public class RiftLoader { public static final RiftLoader instance = new RiftLoader(); private static final Logger log = LogManager.getLogger("RiftLoader"); - public File modsDir = new File(Launch.minecraftHome, "mods"); - public final File modsVersionSpecifiedDir = new File(Launch.minecraftHome, "mods/rift/@MCVERSION@"); - public final File modsRiftDir = new File(Launch.minecraftHome, "mods/rift"); + public final File modsDir = new File(Launch.minecraftHome, "mods"); + public final File modsRiftDir = new File(modsDir, "rift"); + public final File modsVersionSpecifiedDir = new File(modsRiftDir, "@MCVERSION@"); public final File configDir = new File(Launch.minecraftHome, "config"); private Side side; private boolean loaded; @@ -53,16 +53,8 @@ public void load(boolean isClient) { // load mods from classpath findClasspathMods(); - // test if mods/rift/"version"/ contains any .jar files, then load from it - if (modsVersionSpecifiedDir.exists() && modsVersionSpecifiedDir.isDirectory()) { - // search and load mods from mods/rift/"version"/ if there are mods inside - for (File tempFile : modsVersionSpecifiedDir.listFiles()) { - if (tempFile.getName().toLowerCase().endsWith((".jar"))) { - findJarMods(modsVersionSpecifiedDir); - break; - } - } - } + // load mods from mods/rift/"version"/ + findJarMods(modsVersionSpecifiedDir); // load mods from folder mods/rift/, create the folder if not exists findJarMods(modsRiftDir, true); // load mods from mods/, create the folder if not exists @@ -123,11 +115,17 @@ private void findJarMods(File modsDir) { } private void findJarMods(File modsDir, boolean createDir) { + if (createDir) { + // create dir if needed + modsDir.mkdirs(); + } else if (!modsVersionSpecifiedDir.isDirectory()) { + // skip loading if folder not exists + return; + } int modCount = modInfoMap.size(); log.info("Searching for mods in " + modsDir); - if (createDir) modsDir.mkdirs(); for (File file : modsDir.listFiles()) { - if (!file.getName().toLowerCase().endsWith(".jar")) continue; + if (!file.getName().toLowerCase().endsWith(".jar")) continue; try (JarFile jar = new JarFile(file)) { // Check if the file contains a 'riftmod.json'