From d4a2fbffa37a94b3b37bad4bdc8099307258c712 Mon Sep 17 00:00:00 2001 From: Paint_Ninja Date: Fri, 29 Sep 2023 00:40:49 +0100 Subject: [PATCH] Optimise path filter in mod loading (#9712) Co-authored-by: embeddedt <42941056+embeddedt@users.noreply.github.com> --- .../fml/loading/moddiscovery/AbstractModProvider.java | 2 +- .../fml/loading/moddiscovery/ExplodedDirectoryLocator.java | 2 +- .../fml/loading/moddiscovery/ModJarMetadata.java | 2 +- .../fml/loading/targets/CommonClientLaunchHandler.java | 2 +- .../fml/loading/targets/CommonServerLaunchHandler.java | 6 ++++++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java index d88cf407ac..7609396477 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java @@ -38,7 +38,7 @@ public abstract class AbstractModProvider implements IModProvider var sj = SecureJar.from( Manifest::new, jar -> jar.moduleDataProvider().findFile(MODS_TOML).isPresent() ? mjm : JarMetadata.from(jar, path), - (root, p) -> true, + null, path ); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java index 27303484f6..3ea07f4a37 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java @@ -34,7 +34,7 @@ public class ExplodedDirectoryLocator implements IModLocator { explodedMods.forEach(explodedMod -> ModJarMetadata.buildFile(this, jar->jar.moduleDataProvider().findFile("/META-INF/mods.toml").isPresent(), - (a,b) -> true, + null, explodedMod.paths().toArray(Path[]::new)) .ifPresentOrElse(f->mods.put(explodedMod, f), () -> LOGGER.warn(LogMarkers.LOADING, "Failed to find exploded resource mods.toml in directory {}", explodedMod.paths().get(0).toString()))); return mods.values().stream().map(mf->new IModLocator.ModFileOrException(mf, null)).toList(); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModJarMetadata.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModJarMetadata.java index 8a9bc639b2..c2323136ca 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModJarMetadata.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModJarMetadata.java @@ -31,7 +31,7 @@ public final class ModJarMetadata implements JarMetadata { // TODO: Remove helper functions to cleanup api @Deprecated(forRemoval = true, since="1.18") static IModFile buildFile(IModLocator locator, Path... files) { - return buildFile(locator, j->true, (a,b) -> true, files).orElseThrow(()->new IllegalArgumentException("Failed to find valid JAR file")); + return buildFile(locator, j->true, null, files).orElseThrow(()->new IllegalArgumentException("Failed to find valid JAR file")); } // TODO: Remove helper functions to cleanup api diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java index 19c08bc8e4..d9a395eae6 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java @@ -43,7 +43,7 @@ public abstract class CommonClientLaunchHandler extends CommonLaunchHandler { var lowcodelang = LibraryFinder.findPathForMaven(vers.forgeGroup(), "lowcodelanguage", "", "", vers.mcAndForgeVersion()); var mclang = LibraryFinder.findPathForMaven(vers.forgeGroup(), "mclanguage", "", "", vers.mcAndForgeVersion()); - return new LocatedPaths(mcstream.build().toList(), (a,b) -> true, modstream.build().toList(), List.of(fmlcore, javafmllang, lowcodelang, mclang)); + return new LocatedPaths(mcstream.build().toList(), null, modstream.build().toList(), List.of(fmlcore, javafmllang, lowcodelang, mclang)); } protected abstract void processMCStream(VersionInfo versionInfo, Stream.Builder mc, Stream.Builder> mods); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java index 24fae56c5f..96ec7511d1 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java @@ -43,12 +43,18 @@ public abstract class CommonServerLaunchHandler extends CommonLaunchHandler { }, mcextra ); BiPredicate filter = (path, base) -> true; + final BiPredicate alwaysTrueFilter = filter; var mcstream = Stream.builder().add(mc).add(mcextra_filtered.getRootPath()); var modstream = Stream.>builder(); filter = processMCStream(vers, mcstream, filter, modstream); + // Ensure backwards compatibility if anything overrides processMCStream() + // and expects the default always true filter by only changing it to null afterwards if left unchanged. + if (filter == alwaysTrueFilter) + filter = null; + var fmlcore = LibraryFinder.findPathForMaven(vers.forgeGroup(), "fmlcore", "", "", vers.mcAndForgeVersion()); var javafmllang = LibraryFinder.findPathForMaven(vers.forgeGroup(), "javafmllanguage", "", "", vers.mcAndForgeVersion()); var lowcodelang = LibraryFinder.findPathForMaven(vers.forgeGroup(), "lowcodelanguage", "", "", vers.mcAndForgeVersion());