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