public void SendCpeMessage(CpeMessageType type, string message)
        {
            if (type != CpeMessageType.Normal && !Supports(CpeExt.MessageTypes))
            {
                if (type == CpeMessageType.Announcement)
                {
                    type = CpeMessageType.Normal;
                }
                else
                {
                    return;
                }
            }

            message = Chat.Format(message, this);
            message = LineWrapper.CleanupColors(message, this);
            Send(Packet.Message(message, type, hasCP437));
        }
        public virtual void SendMessage(byte id, string message)
        {
            // Message should start with server color if no initial color
            if (message.Length > 0 && !(message[0] == '&' || message[0] == '%'))
            {
                message = ServerConfig.DefaultColor + message;
            }
            message = Chat.Format(message, this);

            int totalTries = 0;

            OnMessageRecievedEvent.Call(this, message);
            if (cancelmessage)
            {
                cancelmessage = false; return;
            }

            retryTag : try {
                foreach (string raw in LineWrapper.Wordwrap(message))
                {
                    string line = raw;
                    if (!Supports(CpeExt.EmoteFix) && LineEndsInEmote(line))
                    {
                        line += '\'';
                    }

                    Send(Packet.Message(line, (CpeMessageType)id, hasCP437));
                }
            } catch (Exception e) {
                message = "&f" + message;
                totalTries++;
                if (totalTries < 10)
                {
                    goto retryTag;
                }
                else
                {
                    Logger.LogError(e);
                }
            }
        }