    001package cpw.mods.fml.common.discovery;
    002
    003import java.io.File;
    004import java.util.List;
    005
    006import com.google.common.collect.Lists;
    007
    008import cpw.mods.fml.common.FMLLog;
    009import cpw.mods.fml.common.ModContainer;
    010import cpw.mods.fml.common.discovery.asm.ASMModParser;
    011
    012
    013public class ModCandidate
    014{
    015    private File classPathRoot;
    016    private File modContainer;
    017    private ContainerType sourceType;
    018    private boolean classpath;
    019    private List<String> baseModTypes = Lists.newArrayList();
    020    private boolean isMinecraft;
    021    private List<ASMModParser> baseModCandidateTypes = Lists.newArrayListWithCapacity(1);
    022
    023    public ModCandidate(File classPathRoot, File modContainer, ContainerType sourceType)
    024    {
    025        this(classPathRoot, modContainer, sourceType, false, false);
    026    }
    027    public ModCandidate(File classPathRoot, File modContainer, ContainerType sourceType, boolean isMinecraft, boolean classpath)
    028    {
    029        this.classPathRoot = classPathRoot;
    030        this.modContainer = modContainer;
    031        this.sourceType = sourceType;
    032        this.isMinecraft = isMinecraft;
    033        this.classpath = classpath;
    034    }
    035
    036    public File getClassPathRoot()
    037    {
    038        return classPathRoot;
    039    }
    040
    041    public File getModContainer()
    042    {
    043        return modContainer;
    044    }
    045
    046    public ContainerType getSourceType()
    047    {
    048        return sourceType;
    049    }
    050    public List<ModContainer> explore(ASMDataTable table)
    051    {
    052        List<ModContainer> mods = sourceType.findMods(this, table);
    053        if (!baseModCandidateTypes.isEmpty())
    054        {
    055            FMLLog.info("Attempting to reparse the mod container %s", getModContainer().getName());
    056            return sourceType.findMods(this, table);
    057        }
    058        else
    059        {
    060            return mods;
    061        }
    062    }
    063
    064    public boolean isClasspath()
    065    {
    066        return classpath;
    067    }
    068    public void rememberBaseModType(String className)
    069    {
    070        baseModTypes.add(className);
    071    }
    072    public List<String> getRememberedBaseMods()
    073    {
    074        return baseModTypes;
    075    }
    076    public boolean isMinecraftJar()
    077    {
    078        return isMinecraft;
    079    }
    080    public void rememberModCandidateType(ASMModParser modParser)
    081    {
    082        baseModCandidateTypes.add(modParser);
    083    }
    084}