/* * Minecraft Forge * Copyright (c) 2016-2018. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation version 2.1 * of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package net.minecraftforge.fml.loading.moddiscovery; import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.fml.loading.MavenCoordinateResolver; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class MavenDirectoryLocator extends AbstractJarFileLocator implements IModLocator { private List modCoords; @Override public List scanMods() { return modCoords.stream(). map(mc -> new ModFile(mc, this)). peek(f->modJars.compute(f, (mf, fs)->createFileSystem(mf))). collect(Collectors.toList()); } @Override public String name() { return "maven libs"; } public String toString() { return "{Maven Directory locator for mods "+this.modCoords+"}"; } @SuppressWarnings("unchecked") @Override public void initArguments(final Map arguments) { final List mavenRoots = (List) arguments.get("mavenRoots"); final List mavenRootPaths = mavenRoots.stream().map(n -> FMLPaths.GAMEDIR.get().resolve(n)).collect(Collectors.toList()); final List mods = (List) arguments.get("mods"); List localModCoords = mods.stream().map(MavenCoordinateResolver::get).collect(Collectors.toList()); // find the modCoords path in each supplied maven path, and turn it into a mod file. (skips not found files) this.modCoords = localModCoords.stream().map(mc -> mavenRootPaths.stream().map(root -> root.resolve(mc)).filter(path -> Files.exists(path)).findFirst().orElseThrow(() -> new IllegalArgumentException("Failed to locate requested mod coordinate " + mc))).collect(Collectors.toList()); } }