001    package net.minecraft.network.packet;
002    
003    import java.io.DataInputStream;
004    import java.io.DataOutputStream;
005    import java.io.IOException;
006    
007    public class Packet250CustomPayload extends Packet
008    {
009        /** Name of the 'channel' used to send data */
010        public String channel;
011    
012        /** Length of the data to be read */
013        public int length;
014    
015        /** Any data */
016        public byte[] data;
017    
018        public Packet250CustomPayload() {}
019    
020        public Packet250CustomPayload(String par1Str, byte[] par2ArrayOfByte)
021        {
022            this.channel = par1Str;
023            this.data = par2ArrayOfByte;
024    
025            if (par2ArrayOfByte != null)
026            {
027                this.length = par2ArrayOfByte.length;
028    
029                if (this.length > 32767)
030                {
031                    throw new IllegalArgumentException("Payload may not be larger than 32k");
032                }
033            }
034        }
035    
036        /**
037         * Abstract. Reads the raw packet data from the data stream.
038         */
039        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
040        {
041            this.channel = readString(par1DataInputStream, 20);
042            this.length = par1DataInputStream.readShort();
043    
044            if (this.length > 0 && this.length < 32767)
045            {
046                this.data = new byte[this.length];
047                par1DataInputStream.readFully(this.data);
048            }
049        }
050    
051        /**
052         * Abstract. Writes the raw packet data to the data stream.
053         */
054        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
055        {
056            writeString(this.channel, par1DataOutputStream);
057            par1DataOutputStream.writeShort((short)this.length);
058    
059            if (this.data != null)
060            {
061                par1DataOutputStream.write(this.data);
062            }
063        }
064    
065        /**
066         * Passes this Packet on to the NetHandler for processing.
067         */
068        public void processPacket(NetHandler par1NetHandler)
069        {
070            par1NetHandler.handleCustomPayload(this);
071        }
072    
073        /**
074         * Abstract. Return the size of the packet (not counting the header).
075         */
076        public int getPacketSize()
077        {
078            return 2 + this.channel.length() * 2 + 2 + this.length;
079        }
080    }