* Account for null/missing values when deserializing the 'resolved' and
'generation' fields.
* Serialize the book pages as JSON strings.
* Avoid redundant conversion from strings to components to JSON and back to
components during deserialization.
Add CraftChatMessage.fromJSONOrString that accepts a maxLength argument
and remove the no longer used fromJSONOrStringToJSON, fromStringToJSON,
and fromJSONComponent helper methods.
By: blablubbabc <lukas@wirsindwir.de>