Minecraftのサーバープラグインのチャットの署名のメモ
このスクラップについて
Minecraft 1.19.1で実装されたチャットの署名を、サーバープラグインの観点からみてまとめる
Spigot(Bukkit)
AsyncPlayerChatEvent.setMessage
でチャットの編集ができる。
AsyncPlayerChatEvent.setCancelled(true)
でイベントのキャンセルも可。
Bungeecord(Waterfall)
ChatEvent.setMessage
でチャットの編集ができるそうだが、リスナーに時間がかかりすぎるとエラーが出る(Plugin listener took 52ms to process event !
)。
ChatEvent.setCancelled(true)
でキャンセルができる。
Velocity
そもそものチャット署名システムに非対応
チャットを編集することはできない。
PlayerChatEvent.setResult(PlayerChatEvent.ChatResult.denied())
でキャンセルができるが、UnsignedVelocityなどを使用しないとチャットを送った時点でキックされる
イベントのキャンセルを行った後に/tell
コマンドなどを実行すると、署名の検証に失敗してキックされる。
極力キャンセルを使用しない方が良さげ…?
追記(2023/06/09)
Spigot(Bukkit)ではキャンセルを行ってもエラーがでないことがわかった
おそらくエラーが発生するであろうコマンドたち
/me
/msg
/tell
/w
/teammsg(未検証)
/tm(未検証)
キックされる際のメッセージ
日: 受信したチャットパケットの署名が存在しないか、無効になっています
英: Received chat packet with missing or invalid signature.
id: multiplayer.disconnect.unsigned_chat
チャット→コマンドの順で発生
日: チャットメッセージの検証に失敗しました
英: Chat message validation failure
id: multiplayer.disconnect.chat_validation_failed
コマンド→チャット→コマンドの順で発生
違いはわかっていない