public override string ToString()
        {
            StringBuilder Result = new StringBuilder();

            Result.Append(packageType.ToString());
            Result.Append("|");
            Result.Append(packageLenght.ToString());
            Result.Append("|");
            Result.Append(messageBody);

            return(Result.ToString());
        }
        protected ByteBuffer BuildBuffer(T data)
        {
            var buffer = new ByteBuffer();

            buffer.WriteInteger((int)PackageType);
            buffer.WriteInteger(PackageId);
            buffer.WriteInteger(EntityId);
            DebugLog.LogPackets($"[NetworkMagic] Writing a packet of type {PackageType.ToString()}:");
            foreach (var field in typeof(T).GetFields())
            {
                if (field.Name == nameof(NetworkData.ConnId))
                {
                    continue;
                }

                var value = field.GetValue(data);
                switch (value)
                {
                case string s:
                    DebugLog.LogPackets($"writing a string for {field.Name}: {s.ToString()}");
                    buffer.WriteString(s);
                    break;

                case float f:
                    DebugLog.LogPackets($"writing a float for {field.Name}: {f.ToString()}");
                    buffer.WriteFloat(f);
                    break;

                case bool b:
                    DebugLog.LogPackets($"writing a bool for {field.Name}: {b.ToString()}");
                    buffer.WriteBool(b);
                    break;

                case int i:
                    DebugLog.LogPackets($"writing an int: {i.ToString()}");
                    buffer.WriteInteger(i);
                    break;

                case PointF p:
                    DebugLog.LogPackets($"writing a PointF: {p.ToString()}");
                    buffer.WriteFloat(p.X);
                    buffer.WriteFloat(p.Y);
                    break;

                case Vec2 p:
                    DebugLog.LogPackets($"writing a Vec2: X: {p.X}, Y: {p.Y}");
                    buffer.WriteFloat(p.X);
                    buffer.WriteFloat(p.Y);
                    break;

                case List <string> list:
                {
                    DebugLog.LogPackets($"writing a list of string: {string.Join(", ", list)}");
                    buffer.WriteInteger(list.Count);
                    foreach (var item in list)
                    {
                        buffer.WriteString(item);
                    }

                    break;
                }

                default:
                    DebugLog.Severe($"[NetworkMagic] You are trying to encrypt an unknown data type for {typeof(T).FullName}!");
                    break;
                }
            }
            DebugLog.LogPackets("Writing---");
            return(buffer);
        }