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 }