Skip to content

Commit

Permalink
Filter paths discovered by ServiceProvider in ClasspathLocator. Closes
Browse files Browse the repository at this point in the history
  • Loading branch information
LexManos committed May 9, 2024
1 parent e1fa610 commit b8270cd
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
import cpw.mods.modlauncher.api.NamedPath;
import cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService;

import org.jetbrains.annotations.ApiStatus;
import org.slf4j.Logger;

import java.io.IOException;
Expand All @@ -20,6 +22,7 @@
import java.util.List;
import java.util.Set;

@ApiStatus.Internal
public class ModDirTransformerDiscoverer implements ITransformerDiscoveryService {
private static final Logger LOGGER = LogUtils.getLogger();
private static final Set<String> SERVICES = Set.of(
Expand Down Expand Up @@ -76,4 +79,15 @@ private static void visitFile(Path path) {
.filter(SERVICES::contains)
.forEach(s -> found.add(new NamedPath(s, path)));
}

public static boolean isServiceProvider(Path path) {
var jar = SecureJar.from(path);

for (var providers : jar.moduleDataProvider().descriptor().provides()) {
if (SERVICES.contains(providers.service()))
return true;
}

return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.JarMetadata;
import cpw.mods.jarhandling.SecureJar;
import net.minecraftforge.fml.loading.EarlyLoadingException;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.language.IConfigurable;
import net.minecraftforge.forgespi.language.IModFileInfo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.mojang.logging.LogUtils;

import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.fml.loading.ModDirTransformerDiscoverer;
import net.minecraftforge.forgespi.locating.IModLocator;

import org.jetbrains.annotations.ApiStatus;
Expand Down Expand Up @@ -71,8 +72,11 @@ public List<ModFileOrException> scanMods() {
}

var ret = new ArrayList<ModFileOrException>();
for (var path : claimed)
ret.add(createMod(path));
for (var path : claimed) {
// Filter out anything found by the ServiceLoader
if (!ModDirTransformerDiscoverer.isServiceProvider(path))
ret.add(createMod(path));
}
return ret;
}

Expand Down

0 comments on commit b8270cd

Please sign in to comment.