import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import java.net.URISyntaxException; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Optional; public class ModFinder { private final Map modsByJarPath = new HashMap<>(); public Optional find(Class clazz) { try { Path path = Path.of(clazz.getProtectionDomain().getCodeSource().getLocation().toURI()); if (path.getFileSystem().getPathMatcher("glob:**/build/classes/*/main").matches(path)) path = path.resolveSibling("../../resources/main").normalize(); return Optional.ofNullable(modsByJarPath.computeIfAbsent(path, key -> { for (ModContainer mod : FabricLoader.getInstance().getAllMods()) { if (mod.getOrigin().getPaths().contains(key)) return mod; } return null; })); } catch (URISyntaxException e) { return Optional.empty(); } } }