001package net.minecraft.network.packet;
002
003import java.io.DataInputStream;
004import java.io.DataOutputStream;
005import java.io.IOException;
006
007public 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}