package hunternif.mc.atlas.network; import hunternif.mc.atlas.AntiqueAtlasMod; import hunternif.mc.atlas.network.bidirectional.DeleteMarkerPacket; import hunternif.mc.atlas.network.bidirectional.PutBiomeTilePacket; import hunternif.mc.atlas.network.client.*; import hunternif.mc.atlas.network.server.AddMarkerPacket; import hunternif.mc.atlas.network.server.BrowsingPositionPacket; import hunternif.mc.atlas.network.server.RegisterTileIdPacket; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; /** * * A wrapper class for the SimpleNetworkWrapper * */ public class PacketDispatcher { private static byte packetId = 0; private static final SimpleNetworkWrapper dispatcher = NetworkRegistry.INSTANCE.newSimpleChannel(AntiqueAtlasMod.CHANNEL); /** No need to allow instantiation */ private PacketDispatcher() {} /** * Registers all packets and handlers - call this during {@link FMLPreInitializationEvent} */ public static void registerPackets() { // Bi-directional messages registerMessage(DeleteMarkerPacket.class); registerMessage(PutBiomeTilePacket.class); // Messages sent to CLIENT registerMessage(MapDataPacket.class); registerMessage(TileNameIDPacket.class); registerMessage(TilesPacket.class); registerMessage(MarkersPacket.class); registerMessage(DeleteCustomGlobalTilePacket.class); // Messages sent to SERVER registerMessage(AddMarkerPacket.class); registerMessage(RegisterTileIdPacket.class); registerMessage(BrowsingPositionPacket.class); } /** * Registers an {@link AbstractMessage} to the appropriate side(s) */ private static <T extends AbstractMessage<T> & IMessageHandler<T, IMessage>> void registerMessage(Class<T> clazz) { if (AbstractMessage.AbstractClientMessage.class.isAssignableFrom(clazz)) { PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.CLIENT); } else if (AbstractMessage.AbstractServerMessage.class.isAssignableFrom(clazz)) { PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER); } else { PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId, Side.CLIENT); PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER); } } /** * Send this message to everyone. * See {@link SimpleNetworkWrapper#sendToAll(IMessage)} */ public static void sendToAll(IMessage message) { PacketDispatcher.dispatcher.sendToAll(message); } /** * Send this message to the specified player. * See {@link SimpleNetworkWrapper#sendTo(IMessage, EntityPlayerMP)} */ public static void sendTo(IMessage message, EntityPlayerMP player) { PacketDispatcher.dispatcher.sendTo(message, player); } /** * Send this message to everyone within a certain range of a point. * See {@link SimpleNetworkWrapper#sendToAllAround(IMessage, NetworkRegistry.TargetPoint)} */ private static void sendToAllAround(IMessage message, NetworkRegistry.TargetPoint point) { PacketDispatcher.dispatcher.sendToAllAround(message, point); } /** * Sends a message to everyone within a certain range of the coordinates in the same dimension. */ private static void sendToAllAround(IMessage message, int dimension, double x, double y, double z, double range) { PacketDispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(dimension, x, y, z, range)); } /** * Sends a message to everyone within a certain range of the player provided. */ public static void sendToAllAround(IMessage message, EntityPlayer player, double range) { PacketDispatcher.sendToAllAround(message, player.getEntityWorld().provider.getDimension(), player.posX, player.posY, player.posZ, range); } /** * Send this message to everyone within the supplied dimension. * See {@link SimpleNetworkWrapper#sendToDimension(IMessage, int)} */ public static void sendToDimension(IMessage message, int dimensionId) { PacketDispatcher.dispatcher.sendToDimension(message, dimensionId); } /** * Send this message to the server. * See {@link SimpleNetworkWrapper#sendToServer(IMessage)} */ public static void sendToServer(IMessage message) { PacketDispatcher.dispatcher.sendToServer(message); } }