001 package cpw.mods.fml.relauncher; 002 003 import java.lang.annotation.ElementType; 004 import java.lang.annotation.Retention; 005 import java.lang.annotation.RetentionPolicy; 006 import java.lang.annotation.Target; 007 import java.util.Map; 008 009 /** 010 * The base plugin that provides class name meta information to FML to 011 * enhance the classloading lifecycle for mods in FML 012 * 013 * @author cpw 014 * 015 */ 016 public interface IFMLLoadingPlugin 017 { 018 /** 019 * Return a list of classes that implement the ILibrarySet interface 020 * 021 * @return a list of classes that implement the ILibrarySet interface 022 */ 023 String[] getLibraryRequestClass(); 024 /** 025 * Return a list of classes that implements the IClassTransformer interface 026 * @return a list of classes that implements the IClassTransformer interface 027 */ 028 String[] getASMTransformerClass(); 029 030 /** 031 * Return a class name that implements "ModContainer" for injection into the mod list 032 * The "getName" function should return a name that other mods can, if need be, 033 * depend on. 034 * Trivially, this modcontainer will be loaded before all regular mod containers, 035 * which means it will be forced to be "immutable" - not susceptible to normal 036 * sorting behaviour. 037 * All other mod behaviours are available however- this container can receive and handle 038 * normal loading events 039 */ 040 String getModContainerClass(); 041 042 /** 043 * Return the class name of an implementor of "IFMLCallHook", that will be run, in the 044 * main thread, to perform any additional setup this coremod may require. It will be 045 * run <strong>prior</strong> to Minecraft starting, so it CANNOT operate on minecraft 046 * itself. The game will deliberately crash if this code is detected to trigger a 047 * minecraft class loading (TODO: implement crash ;) ) 048 */ 049 String getSetupClass(); 050 051 /** 052 * Inject coremod data into this coremod 053 * This data includes: 054 * "mcLocation" : the location of the minecraft directory, 055 * "coremodList" : the list of coremods 056 * "coremodLocation" : the file this coremod loaded from, 057 */ 058 void injectData(Map<String, Object> data); 059 060 061 /** 062 * Annotate your load plugin with a list of package prefixes that will *not* be 063 * processed by the ASM transformation stack. 064 * 065 * Your plugin, and any transformers should *definitely* be in this list, because 066 * otherwise you can face problems with the classloader trying to transform classes 067 * with your transformer, whilst it is *loading* your transformer. Not pretty. 068 * 069 * @author cpw 070 * 071 */ 072 @Retention(RetentionPolicy.RUNTIME) 073 @Target(ElementType.TYPE) 074 public @interface TransformerExclusions 075 { 076 public String[] value() default ""; 077 } 078 }