001    package cpw.mods.fml.common.event;
002    
003    import java.io.File;
004    import java.security.CodeSource;
005    import java.security.cert.Certificate;
006    import java.util.Properties;
007    import java.util.logging.Logger;
008    
009    import cpw.mods.fml.common.FMLLog;
010    import cpw.mods.fml.common.LoaderState.ModState;
011    import cpw.mods.fml.common.FMLModContainer;
012    import cpw.mods.fml.common.ModContainer;
013    import cpw.mods.fml.common.ModMetadata;
014    import cpw.mods.fml.common.discovery.ASMDataTable;
015    
016    public class FMLPreInitializationEvent extends FMLStateEvent
017    {
018        private ModMetadata modMetadata;
019        private File sourceFile;
020        private File configurationDir;
021        private File suggestedConfigFile;
022        private ASMDataTable asmData;
023        private ModContainer modContainer;
024    
025        public FMLPreInitializationEvent(Object... data)
026        {
027            super(data);
028            this.asmData = (ASMDataTable)data[0];
029            this.configurationDir = (File)data[1];
030        }
031    
032        @Override
033        public ModState getModState()
034        {
035            return ModState.PREINITIALIZED;
036        }
037    
038        @Override
039        public void applyModContainer(ModContainer activeContainer)
040        {
041            this.modContainer = activeContainer;
042            this.modMetadata = activeContainer.getMetadata();
043            this.sourceFile = activeContainer.getSource();
044            this.suggestedConfigFile = new File(configurationDir, activeContainer.getModId()+".cfg");
045        }
046    
047        public File getSourceFile()
048        {
049            return sourceFile;
050        }
051    
052        public ModMetadata getModMetadata()
053        {
054            return modMetadata;
055        }
056    
057        public File getModConfigurationDirectory()
058        {
059            return configurationDir;
060        }
061    
062        public File getSuggestedConfigurationFile()
063        {
064            return suggestedConfigFile;
065        }
066    
067        public ASMDataTable getAsmData()
068        {
069            return asmData;
070        }
071    
072        public Properties getVersionProperties()
073        {
074            if (this.modContainer instanceof FMLModContainer)
075            {
076                return ((FMLModContainer)this.modContainer).searchForVersionProperties();
077            }
078    
079            return null;
080        }
081    
082        /**
083         * Get a logger instance configured to write to the FML Log as a parent, identified by modid. Handy for mod logging!
084         *
085         * @return A logger
086         */
087        public Logger getModLog()
088        {
089            Logger log = Logger.getLogger(modContainer.getModId());
090            log.setParent(FMLLog.getLogger());
091            return log;
092        }
093    
094    
095        /**
096         * Retrieve the FML signing certificates, if any. Validate these against the
097         * published FML certificates in your mod, if you wish.
098         *
099         * Deprecated because mods should <b>NOT</b> trust this code. Rather
100         * they should copy this, or something like this, into their own mods.
101         *
102         * @return Certificates used to sign FML and Forge
103         */
104        @Deprecated
105        public Certificate[] getFMLSigningCertificates()
106        {
107            CodeSource codeSource = getClass().getClassLoader().getParent().getClass().getProtectionDomain().getCodeSource();
108            Certificate[] certs = codeSource.getCertificates();
109            if (certs == null)
110            {
111                return new Certificate[0];
112            }
113            else
114            {
115                return certs;
116            }
117        }
118    }