From 95e80b7b3ab9c0002c4ff440fd4e0ff323b7cdf2 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Mon, 27 Dec 2021 03:29:42 -0800 Subject: 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) --- src/main/java/gregtech/common/GT_Network.java | 46 ++++++++++++++++++++------- 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'src') 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 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 aOutput) - throws Exception { + protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List 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 aOutput) - throws Exception { + protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List 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 } @ChannelHandler.Sharable - static final class HandlerShared - extends SimpleChannelInboundHandler { + static final class HandlerShared extends SimpleChannelInboundHandler { @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); } } } -- cgit