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 Packet3Chat extends Packet
008    {
009        /** Maximum number of characters allowed in chat string in each packet. */
010        public static int maxChatLength = 119;
011    
012        /** The message being sent. */
013        public String message;
014        private boolean isServer;
015    
016        public Packet3Chat()
017        {
018            this.isServer = true;
019        }
020    
021        public Packet3Chat(String par1Str)
022        {
023            this(par1Str, true);
024        }
025    
026        public Packet3Chat(String par1Str, boolean par2)
027        {
028            this.isServer = true;
029    
030            if (par1Str.length() > maxChatLength)
031            {
032                par1Str = par1Str.substring(0, maxChatLength);
033            }
034    
035            this.message = par1Str;
036            this.isServer = par2;
037        }
038    
039        /**
040         * Abstract. Reads the raw packet data from the data stream.
041         */
042        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
043        {
044            this.message = readString(par1DataInputStream, maxChatLength);
045        }
046    
047        /**
048         * Abstract. Writes the raw packet data to the data stream.
049         */
050        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
051        {
052            writeString(this.message, par1DataOutputStream);
053        }
054    
055        /**
056         * Passes this Packet on to the NetHandler for processing.
057         */
058        public void processPacket(NetHandler par1NetHandler)
059        {
060            par1NetHandler.handleChat(this);
061        }
062    
063        /**
064         * Abstract. Return the size of the packet (not counting the header).
065         */
066        public int getPacketSize()
067        {
068            return 2 + this.message.length() * 2;
069        }
070    
071        /**
072         * Get whether this is a server
073         */
074        public boolean getIsServer()
075        {
076            return this.isServer;
077        }
078    
079        /**
080         * If this returns true, the packet may be processed on any thread; otherwise it is queued for the main thread to
081         * handle.
082         */
083        public boolean canProcessAsync()
084        {
085            return !this.message.startsWith("/");
086        }
087    }