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