@Override protected void decode( ChannelHandlerContext channelHandlerContext, FMLProxyPacket fmlProxyPacket, List<Object> out) throws Exception { ByteBuf payload = fmlProxyPacket.payload(); byte discriminator = payload.readByte(); Class<? extends AbstractPacketOld> clazz = this.packets.get(discriminator); if (clazz == null) { throw new NullPointerException("No packet registered for discriminator: " + discriminator); } AbstractPacketOld packet = clazz.newInstance(); packet.decodeInto(channelHandlerContext, payload.slice()); EntityPlayer player; switch (FMLCommonHandler.instance().getEffectiveSide()) { case CLIENT: player = PacketHandlerOld.getClientPlayer(); packet.handleClientSide(player); break; case SERVER: INetHandler netHandler = channelHandlerContext.channel().attr(NetworkRegistry.NET_HANDLER).get(); player = ((NetHandlerPlayServer) netHandler).playerEntity; packet.handleServerSide(player); break; default: } out.add(packet); }
@Override protected void encode( ChannelHandlerContext channelHandlerContext, AbstractPacketOld abstractPacketOld, List<Object> out) throws Exception { ByteBuf buffer = Unpooled.buffer(); Class<? extends AbstractPacketOld> clazz = abstractPacketOld.getClass(); if (!this.packets.contains(abstractPacketOld.getClass())) { throw new NullPointerException( "No Packet Registered for: " + abstractPacketOld.getClass().getCanonicalName()); } byte discriminator = (byte) this.packets.indexOf(clazz); buffer.writeByte(discriminator); abstractPacketOld.encodeInto(channelHandlerContext, buffer); FMLProxyPacket proxyPacket = new FMLProxyPacket( new PacketBuffer(buffer.copy()), channelHandlerContext.channel().attr(NetworkRegistry.FML_CHANNEL).get()); out.add(proxyPacket); }