Advertisement
Atijaf

PacketDispatcher

Jan 31st, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.13 KB | None | 0 0
  1. public class PacketDispatcher
  2. {
  3.     // a simple counter will allow us to get rid of 'magic' numbers used during packet registration
  4.     private static byte packetId = 0;
  5.     private boolean used;
  6.  
  7.     /**
  8.      * The SimpleNetworkWrapper instance is used both to register and send packets.
  9.      * Since I will be adding wrapper methods, this field is private, but you should
  10.      * make it public if you plan on using it directly.
  11.      */
  12.     private static final SimpleNetworkWrapper dispatcher = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MOD_ID);
  13.  
  14.  
  15.     /**
  16.      * Call this during pre-init or loading and register all of your packets (messages) here
  17.      */
  18.     public static final void registerPackets() {
  19.        
  20.         registerMessage(SyncTeleporterContents.class);
  21.        
  22.         // Packets handled on CLIENT
  23.  
  24.         // Packets handled on SERVER
  25.         //registerMessage(OpenGuiMessage.class);
  26.  
  27.         // If you don't want to make a 'registerMessage' method, you can do it directly:
  28.         //PacketDispatcher.dispatcher.registerMessage(SyncPlayerPropsMessage.class, SyncPlayerPropsMessage.class, packetId++, Side.CLIENT);
  29.         //PacketDispatcher.dispatcher.registerMessage(OpenGuiMessage.class, OpenGuiMessage.class, packetId++, Side.SERVER);
  30.  
  31.         // The following two packets are not used in this demo, but have been used in my other mods
  32.         // I include them here simply for the sake of demonstrating packets that can be sent to both sides
  33.  
  34.         // Bidirectional packets:
  35.         //registerMessage(PlaySoundPacket.class);
  36.         //registerMessage(AttackTimePacket.class);
  37.     }
  38.  
  39.     /**
  40.      * Registers an {@link AbstractMessage} to the appropriate side(s)
  41.      */
  42.     private static final <T extends AbstractMessage<T> & IMessageHandler<T, IMessage>> void registerMessage(Class<T> clazz) {
  43.         // We can tell by the message class which side to register it on by using #isAssignableFrom (google it)
  44.  
  45.         // Also, one can see the convenience of using a static counter 'packetId' to keep
  46.         // track of the current index, rather than hard-coding them all, plus it's one less
  47.         // parameter to pass.
  48.         if (AbstractMessage.AbstractClientMessage.class.isAssignableFrom(clazz)) {
  49.             PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.CLIENT);
  50.         } else if (AbstractMessage.AbstractServerMessage.class.isAssignableFrom(clazz)) {
  51.             PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER);
  52.         } else {
  53.             // hopefully you didn't forget to extend the right class, or you will get registered on both sides
  54.             PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId, Side.CLIENT);
  55.             PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER);
  56.         }
  57.     }
  58.  
  59.     //========================================================//
  60.     // The following methods are the 'wrapper' methods; again,
  61.     // this just makes sending a message slightly more compact
  62.     // and is purely a matter of stylistic preference
  63.     //========================================================//
  64.  
  65.    
  66.    
  67.     /**
  68.      * Send this message to the specified player's client-side counterpart.
  69.      * See {@link SimpleNetworkWrapper#sendTo(IMessage, EntityPlayerMP)}
  70.      */
  71.     public static final void sendTo(IMessage message, EntityPlayerMP player) {
  72.         PacketDispatcher.dispatcher.sendTo(message, player);
  73.     }
  74.  
  75.     /**
  76.      * Send this message to everyone.
  77.      * See {@link SimpleNetworkWrapper#sendToAll(IMessage)}
  78.      */
  79.     public static void sendToAll(IMessage message) {
  80.         PacketDispatcher.dispatcher.sendToAll(message);
  81.     }
  82.  
  83.     /**
  84.      * Send this message to everyone within a certain range of a point.
  85.      * See {@link SimpleNetworkWrapper#sendToAllAround(IMessage, NetworkRegistry.TargetPoint)}
  86.      */
  87.     public static final void sendToAllAround(IMessage message, NetworkRegistry.TargetPoint point) {
  88.         PacketDispatcher.dispatcher.sendToAllAround(message, point);
  89.     }
  90.  
  91.     /**
  92.      * Sends a message to everyone within a certain range of the coordinates in the same dimension.
  93.      * Shortcut to {@link SimpleNetworkWrapper#sendToAllAround(IMessage, NetworkRegistry.TargetPoint)}
  94.      */
  95.     public static final void sendToAllAround(IMessage message, int dimension, double x, double y, double z, double range) {
  96.         PacketDispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(dimension, x, y, z, range));
  97.     }
  98.  
  99.     /**
  100.      * Sends a message to everyone within a certain range of the player provided.
  101.      * Shortcut to {@link SimpleNetworkWrapper#sendToAllAround(IMessage, NetworkRegistry.TargetPoint)}
  102.      */
  103.     public static final void sendToAllAround(IMessage message, EntityPlayer player, double range) {
  104.         PacketDispatcher.sendToAllAround(message, player.worldObj.provider.getDimensionId(), player.posX, player.posY, player.posZ, range);
  105.     }
  106.  
  107.     /**
  108.      * Send this message to everyone within the supplied dimension.
  109.      * See {@link SimpleNetworkWrapper#sendToDimension(IMessage, int)}
  110.      */
  111.     public static final void sendToDimension(IMessage message, int dimensionId) {
  112.         PacketDispatcher.dispatcher.sendToDimension(message, dimensionId);
  113.     }
  114.  
  115.     /**
  116.      * Send this message to the server.
  117.      * See {@link SimpleNetworkWrapper#sendToServer(IMessage)}
  118.      */
  119.     public static final void sendToServer(IMessage message) {
  120.         PacketDispatcher.dispatcher.sendToServer(message);
  121.     }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement