001    package cpw.mods.fml.common.event;
002    
003    import java.io.File;
004    import java.util.Properties;
005    import java.util.logging.Logger;
006    
007    import cpw.mods.fml.common.FMLLog;
008    import cpw.mods.fml.common.LoaderState.ModState;
009    import cpw.mods.fml.common.FMLModContainer;
010    import cpw.mods.fml.common.ModContainer;
011    import cpw.mods.fml.common.ModMetadata;
012    import cpw.mods.fml.common.discovery.ASMDataTable;
013    
014    public class FMLPreInitializationEvent extends FMLStateEvent
015    {
016        private ModMetadata modMetadata;
017        private File sourceFile;
018        private File configurationDir;
019        private File suggestedConfigFile;
020        private ASMDataTable asmData;
021        private ModContainer modContainer;
022    
023        public FMLPreInitializationEvent(Object... data)
024        {
025            super(data);
026            this.asmData = (ASMDataTable)data[0];
027            this.configurationDir = (File)data[1];
028        }
029    
030        @Override
031        public ModState getModState()
032        {
033            return ModState.PREINITIALIZED;
034        }
035    
036        @Override
037        public void applyModContainer(ModContainer activeContainer)
038        {
039            this.modContainer = activeContainer;
040            this.modMetadata = activeContainer.getMetadata();
041            this.sourceFile = activeContainer.getSource();
042            this.suggestedConfigFile = new File(configurationDir, activeContainer.getModId()+".cfg");
043        }
044    
045        public File getSourceFile()
046        {
047            return sourceFile;
048        }
049    
050        public ModMetadata getModMetadata()
051        {
052            return modMetadata;
053        }
054    
055        public File getModConfigurationDirectory()
056        {
057            return configurationDir;
058        }
059    
060        public File getSuggestedConfigurationFile()
061        {
062            return suggestedConfigFile;
063        }
064    
065        public ASMDataTable getAsmData()
066        {
067            return asmData;
068        }
069    
070        public Properties getVersionProperties()
071        {
072            if (this.modContainer instanceof FMLModContainer)
073            {
074                return ((FMLModContainer)this.modContainer).searchForVersionProperties();
075            }
076    
077            return null;
078        }
079    
080        /**
081         * Get a logger instance configured to write to the FML Log as a parent, identified by modid. Handy for mod logging!
082         *
083         * @return A logger
084         */
085        public Logger getModLog()
086        {
087            Logger log = Logger.getLogger(modContainer.getModId());
088            log.setParent(FMLLog.getLogger());
089            return log;
090        }
091    }