diff --git a/src/main/java/net/minecraftforge/common/ForgeEarlyConfig.java b/src/main/java/net/minecraftforge/common/ForgeEarlyConfig.java index 923947969..11d682048 100644 --- a/src/main/java/net/minecraftforge/common/ForgeEarlyConfig.java +++ b/src/main/java/net/minecraftforge/common/ForgeEarlyConfig.java @@ -59,6 +59,7 @@ public class ForgeEarlyConfig { public static String COCOA_FRAME_NAME = "minecraft"; public static String CONFIG_ANY_TIME_VERSION = "3.0"; + public static String MIXIN_BOOTER_VERSION = "10.5"; @Config.Comment(""" @@ -82,6 +83,8 @@ public static class CategoryOpenAlContext{ @Config.Comment("Enable HRTF sound support") public boolean ENABLE_HRTF = false; } - - + + public static String[] DISABLED_MOD_FOLDER = new String[]{ + "disabled", "optional" + }; } diff --git a/src/main/java/net/minecraftforge/fml/relauncher/libraries/LibraryManager.java b/src/main/java/net/minecraftforge/fml/relauncher/libraries/LibraryManager.java index 4a710b158..c3e2d3edb 100644 --- a/src/main/java/net/minecraftforge/fml/relauncher/libraries/LibraryManager.java +++ b/src/main/java/net/minecraftforge/fml/relauncher/libraries/LibraryManager.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; +import java.nio.file.Path; import java.security.CodeSource; import java.util.ArrayList; import java.util.Arrays; @@ -42,9 +43,12 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.Manifest; +import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import net.minecraftforge.common.ForgeEarlyConfig; import org.apache.commons.lang3.tuple.Pair; import org.apache.maven.artifact.versioning.ArtifactVersion; @@ -474,7 +478,7 @@ else if (!list.contains(file)) continue; FMLLog.log.info("Searching {} for mods", base.getAbsolutePath()); - for (File f : base.listFiles(MOD_FILENAME_FILTER)) + for (File f : scanningModFiles(base.toPath())) { if (!list.contains(f)) { @@ -492,6 +496,22 @@ else if (!list.contains(file)) return list; } + public static List scanningModFiles(Path rootDir) { + try (Stream stream = java.nio.file.Files.walk(rootDir)) { + return stream + .filter(path -> { + Path parent = path.getParent(); + return parent != null && !Arrays.stream(ForgeEarlyConfig.DISABLED_MOD_FOLDER).toList().contains(parent.getFileName().toString()); + }) + .filter(java.nio.file.Files::isRegularFile) + .map(Path::toFile) + .filter(File::isFile) + .collect(Collectors.toList()); + } catch (IOException e) { + throw new RuntimeException("Unable to scan mod folder", e); + } + } + public static Repository getDefaultRepo() { return libraries_dir;