    001/*
    002 * Forge Mod Loader
    003 * Copyright (c) 2012-2013 cpw.
    004 * All rights reserved. This program and the accompanying materials
    005 * are made available under the terms of the GNU Lesser Public License v2.1
    006 * which accompanies this distribution, and is available at
    007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
    008 *
    009 * Contributors:
    010 *     cpw - implementation
    011 */
    012
    013package cpw.mods.fml.common;
    014
    015import java.io.File;
    016import java.security.cert.Certificate;
    017import java.util.List;
    018import java.util.Set;
    019
    020import com.google.common.eventbus.EventBus;
    021
    022import cpw.mods.fml.common.versioning.ArtifactVersion;
    023import cpw.mods.fml.common.versioning.VersionRange;
    024
    025/**
    026 * The container that wraps around mods in the system.
    027 * <p>
    028 * The philosophy is that individual mod implementation technologies should not
    029 * impact the actual loading and management of mod code. This interface provides
    030 * a mechanism by which we can wrap actual mod code so that the loader and other
    031 * facilities can treat mods at arms length.
    032 * </p>
    033 *
    034 * @author cpw
    035 *
    036 */
    037
    038public interface ModContainer
    039{
    040    /**
    041     * The globally unique modid for this mod
    042     */
    043    String getModId();
    044
    045    /**
    046     * A human readable name
    047     */
    048
    049    String getName();
    050
    051    /**
    052     * A human readable version identifier
    053     */
    054    String getVersion();
    055
    056    /**
    057     * The location on the file system which this mod came from
    058     */
    059    File getSource();
    060
    061    /**
    062     * The metadata for this mod
    063     */
    064    ModMetadata getMetadata();
    065
    066    /**
    067     * Attach this mod to it's metadata from the supplied metadata collection
    068     */
    069    void bindMetadata(MetadataCollection mc);
    070
    071    /**
    072     * Set the enabled/disabled state of this mod
    073     */
    074    void setEnabledState(boolean enabled);
    075
    076    /**
    077     * A list of the modids that this mod requires loaded prior to loading
    078     */
    079    Set<ArtifactVersion> getRequirements();
    080
    081    /**
    082     * A list of modids that should be loaded prior to this one. The special
    083     * value <strong>*</strong> indicates to load <em>after</em> any other mod.
    084     */
    085    List<ArtifactVersion> getDependencies();
    086
    087    /**
    088     * A list of modids that should be loaded <em>after</em> this one. The
    089     * special value <strong>*</strong> indicates to load <em>before</em> any
    090     * other mod.
    091     */
    092    List<ArtifactVersion> getDependants();
    093
    094    /**
    095     * A representative string encapsulating the sorting preferences for this
    096     * mod
    097     */
    098    String getSortingRules();
    099
    100    /**
    101     * Register the event bus for the mod and the controller for error handling
    102     * Returns if this bus was successfully registered - disabled mods and other
    103     * mods that don't need real events should return false and avoid further
    104     * processing
    105     *
    106     * @param bus
    107     * @param controller
    108     */
    109    boolean registerBus(EventBus bus, LoadController controller);
    110
    111    /**
    112     * Does this mod match the supplied mod
    113     *
    114     * @param mod
    115     */
    116    boolean matches(Object mod);
    117
    118    /**
    119     * Get the actual mod object
    120     */
    121    Object getMod();
    122
    123    ArtifactVersion getProcessedVersion();
    124
    125    boolean isImmutable();
    126
    127    boolean isNetworkMod();
    128
    129    String getDisplayVersion();
    130
    131    VersionRange acceptableMinecraftVersionRange();
    132
    133    Certificate getSigningCertificate();
    134}