diff options
author | Jason Mitchell <mitchej+github@gmail.com> | 2021-12-27 03:29:42 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-27 12:29:42 +0100 |
commit | 95e80b7b3ab9c0002c4ff440fd4e0ff323b7cdf2 (patch) | |
tree | ff79399bcdb9a146e1a523de01c61f8e6be901e2 /src/main/java/gregtech/common | |
parent | 07745f72ffbd2ecd2724549093857851930f9137 (diff) | |
download | GT5-Unofficial-95e80b7b3ab9c0002c4ff440fd4e0ff323b7cdf2.tar.gz GT5-Unofficial-95e80b7b3ab9c0002c4ff440fd4e0ff323b7cdf2.tar.bz2 GT5-Unofficial-95e80b7b3ab9c0002c4ff440fd4e0ff323b7cdf2.zip |
Allows GT_Network to be created from addon mods. Similar to how the network handler is implemented in GT6. Adds some extra validation that the packet IDs line up appropriately. (#836)
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r-- | src/main/java/gregtech/common/GT_Network.java | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java index c17ffcecbb..96ca384949 100644 --- a/src/main/java/gregtech/common/GT_Network.java +++ b/src/main/java/gregtech/common/GT_Network.java @@ -35,22 +35,45 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet> private final GT_Packet[] mSubChannels; public GT_Network() { - this.mChannel = NetworkRegistry.INSTANCE.newChannel("GregTech", this, new HandlerShared()); - // last known packet id is 13 - this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution(), new MessageSetFlaskCapacity(), new GT_Packet_TileEntityCover(), new GT_Packet_TileEntityCoverGUI(), new MessageUpdateFluidDisplayItem(), new GT_Packet_ClientPreference(), new GT_Packet_WirelessRedstoneCover(), new GT_Packet_TileEntityCoverNew(), new GT_Packet_SetConfigurationCircuit(), new GT_Packet_UpdateItem()}; + this("GregTech", + new GT_Packet_TileEntity(), + new GT_Packet_Sound(), + new GT_Packet_Block_Event(), + new GT_Packet_Ores(), + new GT_Packet_Pollution(), + new MessageSetFlaskCapacity(), + new GT_Packet_TileEntityCover(), + new GT_Packet_TileEntityCoverGUI(), + new MessageUpdateFluidDisplayItem(), + new GT_Packet_ClientPreference(), + new GT_Packet_WirelessRedstoneCover(), + new GT_Packet_TileEntityCoverNew(), + new GT_Packet_SetConfigurationCircuit(), + new GT_Packet_UpdateItem() + ); } - + + public GT_Network(String channelName, GT_Packet... packetTypes) { + this.mChannel = NetworkRegistry.INSTANCE.newChannel(channelName, this, new HandlerShared()); + this.mSubChannels = new GT_Packet[packetTypes.length]; + for (GT_Packet packetType : packetTypes) { + final int pId = packetType.getPacketID(); + if (this.mSubChannels[pId] == null) + this.mSubChannels[pId] = packetType; + else + throw new IllegalArgumentException("Duplicate Packet ID! " + pId); + } + } + @Override - protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List<Object> aOutput) - throws Exception { + protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List<Object> aOutput) throws Exception { ByteBuf tBuf = Unpooled.buffer().writeByte(aPacket.getPacketID()); aPacket.encode(tBuf); aOutput.add(new FMLProxyPacket(tBuf, aContext.channel().attr(NetworkRegistry.FML_CHANNEL).get())); } @Override - protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List<Object> aOutput) - throws Exception { + protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List<Object> aOutput) throws Exception { ByteArrayDataInput aData = ByteStreams.newDataInput(aPacket.payload().array()); GT_Packet tPacket = this.mSubChannels[aData.readByte()].decode(aData); tPacket.setINetHandler(aPacket.handler()); @@ -102,12 +125,11 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet> } @ChannelHandler.Sharable - static final class HandlerShared - extends SimpleChannelInboundHandler<GT_Packet> { + static final class HandlerShared extends SimpleChannelInboundHandler<GT_Packet> { @Override protected void channelRead0(ChannelHandlerContext ctx, GT_Packet aPacket) { - EntityPlayer aPlayer = GT_Values.GT.getThePlayer(); - aPacket.process(aPlayer == null ? null : GT_Values.GT.getThePlayer().worldObj); + final EntityPlayer aPlayer = GT_Values.GT.getThePlayer(); + aPacket.process(aPlayer == null ? null : aPlayer.worldObj); } } } |