Open7

Minecraftのサーバープラグインのチャットの署名のメモ

BlueSheepBlueSheep

このスクラップについて

Minecraft 1.19.1で実装されたチャットの署名を、サーバープラグインの観点からみてまとめる

BlueSheepBlueSheep

Spigot(Bukkit)

AsyncPlayerChatEvent.setMessageでチャットの編集ができる。
AsyncPlayerChatEvent.setCancelled(true)でイベントのキャンセルも可。

BlueSheepBlueSheep

Bungeecord(Waterfall)

ChatEvent.setMessageでチャットの編集ができるそうだが、リスナーに時間がかかりすぎるとエラーが出る(Plugin listener took 52ms to process event !)。
ChatEvent.setCancelled(true)でキャンセルができる。

BlueSheepBlueSheep

Velocity

そもそものチャット署名システムに非対応
チャットを編集することはできない。
PlayerChatEvent.setResult(PlayerChatEvent.ChatResult.denied())でキャンセルができるが、UnsignedVelocityなどを使用しないとチャットを送った時点でキックされる

BlueSheepBlueSheep

イベントのキャンセルを行った後に/tellコマンドなどを実行すると、署名の検証に失敗してキックされる。
極力キャンセルを使用しない方が良さげ…?

追記(2023/06/09)
Spigot(Bukkit)ではキャンセルを行ってもエラーがでないことがわかった

BlueSheepBlueSheep

おそらくエラーが発生するであろうコマンドたち

/me
/msg
/tell
/w
/teammsg(未検証)
/tm(未検証)
BlueSheepBlueSheep

キックされる際のメッセージ

日: 受信したチャットパケットの署名が存在しないか、無効になっています
英: Received chat packet with missing or invalid signature.
id: multiplayer.disconnect.unsigned_chat
チャット→コマンドの順で発生

日: チャットメッセージの検証に失敗しました
英: Chat message validation failure
id: multiplayer.disconnect.chat_validation_failed
コマンド→チャット→コマンドの順で発生

違いはわかっていない