001/* 002 * Forge Mod Loader 003 * Copyright (c) 2012-2013 cpw. 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser Public License v2.1 006 * which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 008 * 009 * Contributors: 010 * cpw - implementation 011 */ 012 013package cpw.mods.fml.common.discovery; 014 015import java.io.File; 016import java.util.List; 017 018import com.google.common.collect.Lists; 019 020import cpw.mods.fml.common.FMLLog; 021import cpw.mods.fml.common.ModContainer; 022import cpw.mods.fml.common.discovery.asm.ASMModParser; 023 024 025public class ModCandidate 026{ 027 private File classPathRoot; 028 private File modContainer; 029 private ContainerType sourceType; 030 private boolean classpath; 031 private List<String> baseModTypes = Lists.newArrayList(); 032 private boolean isMinecraft; 033 private List<ASMModParser> baseModCandidateTypes = Lists.newArrayListWithCapacity(1); 034 035 public ModCandidate(File classPathRoot, File modContainer, ContainerType sourceType) 036 { 037 this(classPathRoot, modContainer, sourceType, false, false); 038 } 039 public ModCandidate(File classPathRoot, File modContainer, ContainerType sourceType, boolean isMinecraft, boolean classpath) 040 { 041 this.classPathRoot = classPathRoot; 042 this.modContainer = modContainer; 043 this.sourceType = sourceType; 044 this.isMinecraft = isMinecraft; 045 this.classpath = classpath; 046 } 047 048 public File getClassPathRoot() 049 { 050 return classPathRoot; 051 } 052 053 public File getModContainer() 054 { 055 return modContainer; 056 } 057 058 public ContainerType getSourceType() 059 { 060 return sourceType; 061 } 062 public List<ModContainer> explore(ASMDataTable table) 063 { 064 List<ModContainer> mods = sourceType.findMods(this, table); 065 if (!baseModCandidateTypes.isEmpty()) 066 { 067 FMLLog.info("Attempting to reparse the mod container %s", getModContainer().getName()); 068 return sourceType.findMods(this, table); 069 } 070 else 071 { 072 return mods; 073 } 074 } 075 076 public boolean isClasspath() 077 { 078 return classpath; 079 } 080 public void rememberBaseModType(String className) 081 { 082 baseModTypes.add(className); 083 } 084 public List<String> getRememberedBaseMods() 085 { 086 return baseModTypes; 087 } 088 public boolean isMinecraftJar() 089 { 090 return isMinecraft; 091 } 092 public void rememberModCandidateType(ASMModParser modParser) 093 { 094 baseModCandidateTypes.add(modParser); 095 } 096}