    001    package cpw.mods.fml.common.network;
    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
    008    @Retention(RetentionPolicy.RUNTIME)
    009    @Target(ElementType.TYPE)
    010    public @interface NetworkMod
    011    {
    012        /**
    013         * Does this mod require the client side to be present when installed on a server?
    014         */
    015        boolean clientSideRequired() default false;
    016        /**
    017         * Does this mod require the server side to be present when installed on a client?
    018         */
    019        boolean serverSideRequired() default false;
    020        /**
    021         * A list of Packet250 network channels to register for this mod - these channels
    022         * will be universal and will require a universal packethandler to handle them
    023         */
    024        String[] channels() default {};
    025        /**
    026         * An optional range check for client to server communication version compatibility
    027         */
    028        String versionBounds() default "";
    029
    030        /**
    031         * A packet handler implementation for channels registered through this annotation
    032         * - this packet handler will be universal and handle both client and server
    033         * requests.
    034         */
    035        Class<? extends IPacketHandler> packetHandler() default NULL.class;
    036
    037        /**
    038         * A tiny packet handler implementation based on {@link Packet131MapData} for "small"
    039         * data packet loads.
    040         */
    041        Class<? extends ITinyPacketHandler> tinyPacketHandler() default NULL.class;
    042        /**
    043         * A connection handler implementation for this network mod
    044         */
    045        Class<? extends IConnectionHandler> connectionHandler() default NULL.class;
    046        /**
    047         * A packet handler and channels to register for the client side
    048         */
    049        SidedPacketHandler clientPacketHandlerSpec() default @SidedPacketHandler(channels = {}, packetHandler = NULL.class );
    050
    051        /**
    052         * A packet handler and channels to register for the server side
    053         */
    054        SidedPacketHandler serverPacketHandlerSpec() default @SidedPacketHandler(channels = {}, packetHandler = NULL.class );
    055
    056        /**
    057         * Special dummy class for handling stupid annotation default values
    058         * @author cpw
    059         *
    060         */
    061        static interface NULL extends IPacketHandler, IConnectionHandler, ITinyPacketHandler {};
    062
    063        /**
    064         * A marker for a method that will be offered the client's version string
    065         * if more sophisticated version rejection handling is required:
    066         * The method should accept a "String", a "NetworkManager" and return a boolean true
    067         * if the version can be accepted.
    068         * @author cpw
    069         *
    070         */
    071        @Retention(RetentionPolicy.RUNTIME)
    072        @Target(ElementType.METHOD)
    073        public @interface VersionCheckHandler { }
    074
    075        /**
    076         * Bundles together a packet handler and it's associated channels for the sided packet handlers
    077         * @author cpw
    078         *
    079         */
    080        public @interface SidedPacketHandler {
    081            String[] channels();
    082            Class<? extends IPacketHandler> packetHandler();
    083        }
    084
    085    }