001    package cpw.mods.fml.common.discovery;
002    
003    import java.io.File;
004    import java.util.List;
005    
006    import com.google.common.collect.Lists;
007    
008    import cpw.mods.fml.common.FMLLog;
009    import cpw.mods.fml.common.ModContainer;
010    import cpw.mods.fml.common.discovery.asm.ASMModParser;
011    
012    
013    public 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    }