/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.network; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; import io.netty.channel.ChannelHandler; import matteroverdrive.Reference; import matteroverdrive.network.packet.AbstractBiPacketHandler; import matteroverdrive.network.packet.bi.PacketFirePlasmaShot; import matteroverdrive.network.packet.bi.PacketMatterScannerGetDatabase; import matteroverdrive.network.packet.bi.PacketStarLoading; import matteroverdrive.network.packet.bi.PacketWeaponTick; import matteroverdrive.network.packet.client.*; import matteroverdrive.network.packet.client.quest.PacketSyncQuests; import matteroverdrive.network.packet.client.quest.PacketUpdateQuest; import matteroverdrive.network.packet.client.starmap.PacketUpdateGalaxy; import matteroverdrive.network.packet.client.starmap.PacketUpdatePlanet; import matteroverdrive.network.packet.client.starmap.PacketUpdateTravelEvents; import matteroverdrive.network.packet.server.*; import matteroverdrive.network.packet.server.starmap.PacketStarMapAttack; import matteroverdrive.network.packet.server.starmap.PacketStarMapClientCommands; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraft.world.WorldProvider; /** * Created by Simeon on 3/5/2015. */ @ChannelHandler.Sharable public class PacketPipeline { protected int packetID; public SimpleNetworkWrapper dispatcher; public PacketPipeline() { dispatcher = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.CHANNEL_NAME); packetID = 0; } public void registerPackets() { registerPacket(PacketMatterScannerUpdate.ServerHandler.class, PacketMatterScannerUpdate.class); registerPacket(PacketPowerUpdate.ClientHandler.class, PacketPowerUpdate.class); registerPacket(PacketMatterUpdate.ClientHandler.class, PacketMatterUpdate.class); registerPacket(PacketPatternMonitorSync.ClientHandler.class,PacketPatternMonitorSync.class); registerPacket(PacketPatternMonitorCommands.ServerHandler.class,PacketPatternMonitorCommands.class); registerPacket(PacketReplicationComplete.ClientHandler.class,PacketReplicationComplete.class); registerPacket(PacketRemoveTask.ServerHandler.class,PacketRemoveTask.class); registerPacket(PacketSyncTransportProgress.ClientHandler.class,PacketSyncTransportProgress.class); registerBiPacket(PacketMatterScannerGetDatabase.Handler.class, PacketMatterScannerGetDatabase.class); registerPacket(PacketUpdateMatterRegistry.ClientHandler.class, PacketUpdateMatterRegistry.class); registerPacket(PacketSyncAndroid.ClientHandler.class,PacketSyncAndroid.class); registerPacket(PacketUnlockBioticStat.ServerHandler.class,PacketUnlockBioticStat.class); registerPacket(PacketTeleportPlayer.ServerHandler.class,PacketTeleportPlayer.class); registerPacket(PacketSpawnParticle.ClientHandler.class,PacketSpawnParticle.class); registerPacket(PacketUpdatePlanet.ClientHandler.class,PacketUpdatePlanet.class); registerPacket(PacketUpdateGalaxy.ClientHandler.class,PacketUpdateGalaxy.class); registerPacket(PacketStarMapClientCommands.ServerHandler.class,PacketStarMapClientCommands.class); registerPacket(PacketStarMapAttack.ServerHandler.class,PacketStarMapAttack.class); registerPacket(PacketUpdateTravelEvents.ClientHandler.class,PacketUpdateTravelEvents.class); registerPacket(PacketAndroidChangeAbility.ServerHandler.class,PacketAndroidChangeAbility.class); registerBiPacket(PacketFirePlasmaShot.BiHandler.class, PacketFirePlasmaShot.class); registerPacket(PacketReloadEnergyWeapon.ServerHandler.class, PacketReloadEnergyWeapon.class); registerBiPacket(PacketManageConversation.BiHandler.class, PacketManageConversation.class); registerPacket(PacketConversationInteract.ServerHandler.class, PacketConversationInteract.class); registerBiPacket(PacketSendMachineNBT.BiHandler.class, PacketSendMachineNBT.class); registerPacket(PacketSendQueueFlash.ClientHandler.class, PacketSendQueueFlash.class); registerPacket(PacketDataPadCommands.ServerHandler.class,PacketDataPadCommands.class); registerPacket(PacketSendMinimapInfo.ClientHandler.class,PacketSendMinimapInfo.class); registerPacket(PacketResetBioStats.ServerHandler.class,PacketResetBioStats.class); registerPacket(PacketDigBlock.ServerHandler.class,PacketDigBlock.class); registerPacket(PacketUpdateQuest.ClientHandler.class,PacketUpdateQuest.class); registerPacket(PacketSyncQuests.ClientHandler.class,PacketSyncQuests.class); registerPacket(PacketQuestActions.ServerHandler.class,PacketQuestActions.class); registerPacket(PacketWeaponTick.ServerHandler.class,PacketWeaponTick.class); registerBiPacket(PacketStarLoading.BiHandler.class,PacketStarLoading.class); registerPacket(PacketAndroidTransformation.ClientHandler.class,PacketAndroidTransformation.class); registerPacket(PacketSyncTaskQueue.ClientHandler.class,PacketSyncTaskQueue.class); registerPacket(PacketBioticActionKey.ServerHandler.class,PacketBioticActionKey.class); } public <REQ extends IMessage, REPLY extends IMessage> void registerPacket(Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestMessageType) { try { Side side = AbstractClientPacketHandler.class.isAssignableFrom(messageHandler) ? Side.CLIENT : Side.SERVER; dispatcher.registerMessage(messageHandler, requestMessageType, packetID++, side); }catch (Exception e) { e.printStackTrace(); } } public <REQ extends IMessage, REPLY extends IMessage> void registerBiPacket(Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestMessageType) { if (AbstractBiPacketHandler.class.isAssignableFrom(messageHandler)) { dispatcher.registerMessage(messageHandler,requestMessageType,packetID,Side.CLIENT); dispatcher.registerMessage(messageHandler,requestMessageType,packetID++,Side.SERVER); } else { throw new IllegalArgumentException("Cannot register " + messageHandler.getName() + " on both sides - must extend AbstractBiMessageHandler!"); } } //region Util functions public void sendToServer(IMessage message) { dispatcher.sendToServer(message); } public void sendToAllAround(IMessage message,NetworkRegistry.TargetPoint point) { dispatcher.sendToAllAround(message, point); } public void sendToAllAround(IMessage message,int dimention,double x,double y,double z,double range) { dispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(dimention, x, y, z, range)); } public void sendToAllAround(IMessage message,EntityPlayer player,double range) { dispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(player.worldObj.provider.dimensionId,player.posX,player.posY,player.posZ,range)); } public void sendToAllAround(IMessage message,TileEntity tileEntity,double range) { dispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(tileEntity.getWorldObj().provider.dimensionId,tileEntity.xCoord,tileEntity.yCoord,tileEntity.zCoord,range)); } public void sendTo(IMessage message,EntityPlayerMP player) { dispatcher.sendTo(message, player); } public void sendToDimention(IMessage message,int dimention) { dispatcher.sendToDimension(message, dimention); } public void sendToDimention(IMessage message,World world) { sendToDimention(message,world.provider); } public void sendToDimention(IMessage message,WorldProvider worldProvider) { dispatcher.sendToDimension(message, worldProvider.dimensionId); } //endregion }