Just extend AbstractMessage to get all of that. So:
@Serializable
public class HelloMessage extends AbstractMessage {
String hello = "Hello!";
}
Though, obviously, most messages will have constructors, get methods, etc. most likely. Just remember that if you add your own constructors that all Messages need to also have a no-arg constructor.
For the other…
setReliable() tells SM how you’d like the message to be sent… basically TCP=reliable, UDP=fast but unreliable.
setReliable() returns Message because the old one did and I saw no reason to change it. It allows you to do things like:
client.send( new MyMessage().setReliable(true) );