001    package cpw.mods.fml.relauncher;
002    
003    import java.util.Map;
004    
005    /**
006     * The base plugin that provides class name meta information to FML to
007     * enhance the classloading lifecycle for mods in FML
008     *
009     * @author cpw
010     *
011     */
012    public interface IFMLLoadingPlugin
013    {
014        /**
015         * Return a list of classes that implement the ILibrarySet interface
016         *
017         * @return
018         */
019        String[] getLibraryRequestClass();
020        /**
021         * Return a list of classes that implements the IClassTransformer interface
022         * @return
023         */
024        String[] getASMTransformerClass();
025    
026        /**
027         * Return a class name that implements "ModContainer" for injection into the mod list
028         * The "getName" function should return a name that other mods can, if need be,
029         * depend on.
030         * Trivially, this modcontainer will be loaded before all regular mod containers,
031         * which means it will be forced to be "immutable" - not susceptible to normal
032         * sorting behaviour.
033         * All other mod behaviours are available however- this container can receive and handle
034         * normal loading events
035         */
036        String getModContainerClass();
037    
038        /**
039         * Return the class name of an implementor of "IFMLCallHook", that will be run, in the
040         * main thread, to perform any additional setup this coremod may require. It will be
041         * run <strong>prior</strong> to Minecraft starting, so it CANNOT operate on minecraft
042         * itself. The game will deliberately crash if this code is detected to trigger a
043         * minecraft class loading (TODO: implement crash ;) )
044         */
045        String getSetupClass();
046    
047        /**
048         * Inject coremod data into this coremod
049         * This data includes:
050         * "mcLocation" : the location of the minecraft directory,
051         * "coremodList" : the list of coremods
052         * "coremodLocation" : the file this coremod loaded from,
053         */
054        void injectData(Map<String, Object> data);
055    }