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 }