Fabric Loader 0.14.8+ required to launch clients due to Mojang's changes. Fabric API versions branched due to Fabric Message API breaking changes, etc.
The chat reporting feature allows Mojang to review and take appropriate actions against people sending illegal, extreme, or harmful messages via chat. This is a controversial change (to the point where people call it "1.19.84", give Miranda warning-like "fact" to friends, and all Mojang reddit posts get instant downvotes). Here I list FACTS, DISPUTED OFFICIAL MESSAGES, and INCORRECT/UNVERIFIED information separately.
These are confirmed by verifiable sources and code analysis by people independent from Mojang, or self-incrimination by Mojang (information which is provided by Mojang that affects the users in generally non-positive ways).
- Chat reporting is added in 22w24a.
- Messages sent by players can be reported via Social Interactions page.
- The report must contain the category, the reason, and the message(s) to report.
- The reporter can include additional messages as context.
- Even if they don't, some messages preceding and succeeding the reported message are sent automatically.
- The report goes to Mojang's server.
- Mojang lists several reasons for report category in-game: self-harm, child abuse, terrorism, hate speech, threats to harm others, non-consensual intimate imagery, harassment, defamation, drug abuse or underage drinking.
- "Profanity", "Nudity or pornography", and "Extreme violence or gore" categories were removed from the list.
- Chat messages are signed, which means other people cannot fake what you sent, as long as your account/computer is secure.
- Chat preview allows the server to modify the message while still allowing it to be signed.
- Chat preview can be opted out.
- The player has an opportunity to review the server's modification before sending, by either utilising the default 200-ms cooldown or by enabling "Confirm" mode that requires you to first press Enter to preview the message, and then pressing Enter again.
- Signed parts include: timestamp, sender profile UUID, message digest (SHA-256 hash), the previous message's signature, and messages the client has seen.
- "Chain manipulation" exploit, where a malicious reporter intentionally omits a report context message or adds other servers' messages as contexts, are no longer viable with fixes in Pre-release 4.
- If the report is sound (i.e. is verified and has valid reasons), the reported person can receive temporary or permanent bans.
- There exists an appeal form to appeal permanent or long-duration bans.
- Banned players can still play in singleplayer.
- Banned players cannot play multiplayer or Realms while banned. The multiplayer button gets disabled in recent versions; in older versions, joining a server fails with authentication server errors.
- It is a bannable offense to abuse the reporting system.
These are claims that Mojang has made, but are disputed by some of the members, and cannot be otherwise proven or disproven.
- Reported messages are manually reviewed.
- Appeals are reviewed and handled.
- Profanity cannot cause a ban.
- Mojang can see all messages without chat reporting outside Realms: Incorrect.
/execute
command can be used to create a signed message: Incorrect.
Various refactors have been done to chat and networking. The basic post-22w17a framework is the same, but there are some big differences:
- Messages are split into
MessageHeader
andMessageBody
. Header is the sender UUID and "preceding message signature". Body includes other metadata, such as content, timestamp, and "last seen messages".SignedMessage
is now a class holding both (and unsigned messages). - "Preceding message signature" is the signature of the message the client has last seen when sending.
- Clients signing a message with its preceding message's signature is called "packing", and the server creating a signed message with its preceding message's signature is called "unpacking". Unpacked messages can then be verified to check the chain's legitimacy.
- The message also has "last seen messages"/"last acknowledgment" field; list of up to 5 pairs of sender and message signature and the last received message.
- Message type is no longer used for game messages; the previous, overlay boolean system is used instead. Also, message types can no longer show messages in overlay. Chats go to chat hud, folks!
- Message type values are now in
MessageType.Parameters
, notMessageSender
(which has since been renamed). The two changes affect Fabric Message API's events (but not message decorators). - If a message is censored per-player, they receive the message header without body so that the preceding message signature can continue.
- The message's receivers will send acknowledgments to the server about the received messages. They are sent when there are 64 received messages after the last acknowledgment, or when the receiver sends a message/command.
- Acknowledgments are validated, so out-of-order or unknown messages or removal of messages from acknowledgments can cause the client to be disconnected.
- If there are more than 4096 messages without acknowledgment, the client gets disconnected. I don't know how many people would receive 4096 messages in normal gameplay, to be honest.
- Friendly reminder to add
Locale.ROOT
/ENGLISH
toString.format
with numeric (non-hex) formats like%d
/toLowerCase
/toUpperCase
calls, and not useString.formatted
with numeric (non-hex) formats! They can break in Persian and other OS locales. (See also: MC-252702, Fabric Loader fix) ServerPlayNetworkHandler
/ServerLoginNetworkHandler
tick
methods now implement new interface,TickablePacketListener
, which hastick
methods. Mods that mixin to those might need recompiling for potential intermediary changes.- Chat input autocompletion is here! This works like command autocompletion, but requires the server to send the custom packet.
run_command
click event can no longer send signed-message-sending like/say
or/me
commands without/execute
. They can no longer send non-command chat messages, either.- Commands like
/say
or/me
, if executed from/execute
, now output messages as game message, not chat message.