Skip to content

Commit

Permalink
Refuse to load Fabric mods on wrong side. Fixes #904. (#926)
Browse files Browse the repository at this point in the history
Signed-off-by: Hei Piao <[email protected]>
  • Loading branch information
heipiao233 authored Mar 28, 2024
1 parent c4ee605 commit 4b20146
Showing 1 changed file with 8 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader;
import dev.su5ed.sinytra.connector.loader.ConnectorLoaderModMetadata;
import dev.su5ed.sinytra.connector.transformer.jar.JarTransformer;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.impl.metadata.NestedJarEntry;
import net.minecraftforge.fml.loading.ClasspathLocatorUtils;
import net.minecraftforge.fml.loading.EarlyLoadingException;
Expand Down Expand Up @@ -108,16 +109,16 @@ private List<IModFile> locateFabricMods(Iterable<IModFile> loadedMods) {
List<JarTransformer.TransformableJar> discoveredJars = Stream.of(scanModsDir(excluded), scanClasspath(), scanFromArguments(excluded)).flatMap(s -> s)
.map(rethrowFunction(p -> cacheTransformableJar(p.toFile())))
.filter(jar -> {
String modid = jar.modPath().metadata().modMetadata().getId();
return !shouldIgnoreMod(modid, loadedModIds);
ConnectorLoaderModMetadata metadata = jar.modPath().metadata().modMetadata();
return !shouldIgnoreMod(metadata, loadedModIds);
})
.toList();
Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> parentToChildren = HashMultimap.create();
// Discover fabric nested mod jars
List<JarTransformer.TransformableJar> discoveredNestedJars = discoveredJars.stream()
.flatMap(jar -> {
ConnectorLoaderModMetadata metadata = jar.modPath().metadata().modMetadata();
return shouldIgnoreMod(metadata.getId(), loadedModIds) ? Stream.empty() : discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds);
return shouldIgnoreMod(metadata, loadedModIds) ? Stream.empty() : discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds);
})
.toList();
// Collect mods that are (likely) going to be excluded by FML's UniqueModListBuilder. Exclude them from global split package filtering
Expand Down Expand Up @@ -236,7 +237,7 @@ private static Stream<JarTransformer.TransformableJar> discoverNestedJarsRecursi
.flatMap(path -> {
JarTransformer.TransformableJar jar = uncheck(() -> prepareNestedJar(tempDir, secureJar.getPrimaryPath().getFileName().toString(), path));
ConnectorLoaderModMetadata metadata = jar.modPath().metadata().modMetadata();
if (shouldIgnoreMod(metadata.getId(), loadedModIds)) {
if (shouldIgnoreMod(metadata, loadedModIds)) {
return Stream.empty();
}
parentToChildren.put(parent, jar);
Expand Down Expand Up @@ -289,7 +290,9 @@ private static List<JarTransformer.TransformableJar> handleDuplicateMods(List<Ja
.toList();
}

private static boolean shouldIgnoreMod(String id, Collection<String> loadedModIds) {
private static boolean shouldIgnoreMod(ConnectorLoaderModMetadata metadata, Collection<String> loadedModIds) {
if (!metadata.loadsInEnvironment(FabricLoader.getInstance().getEnvironmentType())) return true;
String id = metadata.getId();
return ConnectorUtil.DISABLED_MODS.contains(id) || loadedModIds.contains(id);
}

Expand Down

0 comments on commit 4b20146

Please sign in to comment.