package universalteam.universalcore.preloader; import codechicken.core.launch.DepLoader; import cpw.mods.fml.relauncher.FMLInjectionData; import cpw.mods.fml.relauncher.IFMLCallHook; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import universalteam.universalcore.utils.UCLogger; import java.io.File; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; import static universalteam.universalcore.UniversalCore.logger; public class UniversalCoreLoadingPlugin implements IFMLLoadingPlugin, IFMLCallHook { public static File mcDir; public static String mcVersion; public static UCLogger preLogger = logger.setSubName("preloader"); public UniversalCoreLoadingPlugin() { if (mcDir != null) return; mcDir = (File) FMLInjectionData.data()[6]; mcVersion = (String) FMLInjectionData.data()[4]; DepLoader.load(); } @Override public String[] getASMTransformerClass() { return null; } @Override public String getModContainerClass() { return null; } @Override public String getSetupClass() { return null; } @Override public void injectData(Map<String, Object> data) { } @Override public String getAccessTransformerClass() { return null; } @Override public Void call() throws Exception { scanMods(); return null; } private void scanMods() { File modsDir = new File(mcDir, "mods"); if (modsDir.exists()) for (File mod : modsDir.listFiles()) { scanMod(mod); UniversalCorePluginDetector.findPlugins(mod); } File versionModsDir = new File(modsDir, mcVersion); if (versionModsDir.exists()) for (File mod : versionModsDir.listFiles()) { scanMod(mod); UniversalCorePluginDetector.findPlugins(mod); } UniversalCorePluginDetector.handlePlugins(); } private void scanMod(File mod) { if (!mod.getName().endsWith(".jar") && !mod.getName().endsWith(".zip")) return; try { JarFile jar = new JarFile(mod); try { Manifest manifest = jar.getManifest(); if (manifest == null) return; Attributes attr = manifest.getMainAttributes(); if (attr == null) return; String pluginListener = attr.getValue("UCPluginListener"); if (pluginListener != null) { try { UniversalCorePluginDetector.registerPluginListener(Class.forName(pluginListener)); preLogger.info("Found new UCPluginListener: %S", pluginListener); } catch (Exception e) { e.printStackTrace(); } } } finally { jar.close(); } } catch (Exception e) { e.printStackTrace(); } } }