As diesieben07 has said, yes there is a (surprisingly) vanilla way to do it.
HOWEVER I have noticed that it doesn't look very nice and it it looks very rasterized. If you want it to look better with higher quality, you will need to do your own research on how to use LWJGL to draw ttf fonts.
Sorry if I'm not giving enough information, I'm not exactly knowledgeable in this topic.
But you can catch sent packets on the server (spigot) using something like ProtocolLib.
And to send them (forge) you can use SimpleImpl.
(Make sure you have a set id, and that the spigot plugin and forge mod have the same id for the packet)
(Maybe add some sort of id at the beginning of the packet that is shared between the mod and spigot?)