From 4eea97520c69bcc071f122cdc9c7fe96066b346a Mon Sep 17 00:00:00 2001 From: ice_iix Date: Sun, 7 Aug 2022 18:19:09 -0700 Subject: [PATCH] Add new SystemChatMessage and handle in server --- protocol/src/protocol/packet.rs | 7 +++++++ protocol/src/protocol/versions/v1_19.rs | 2 +- src/server/mod.rs | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/protocol/src/protocol/packet.rs b/protocol/src/protocol/packet.rs index abc9a70..20befa6 100644 --- a/protocol/src/protocol/packet.rs +++ b/protocol/src/protocol/packet.rs @@ -911,6 +911,13 @@ state_packets!( field nodes: LenPrefixed =, field root_index: VarInt =, } + /// SystemChatMessage is sent by the server for system messages, the system/chat + /// distinction exists to respect the user's chat visibility settings. + packet SystemChatMessage { + field message: format::Component =, + /// Whether the message is an actionbar or chat message + field overlay: bool =, + } /// ServerMessage is a message sent by the server. It could be from a player /// or just a system message. The Type field controls the location the /// message is displayed at and when the message is displayed. diff --git a/protocol/src/protocol/versions/v1_19.rs b/protocol/src/protocol/versions/v1_19.rs index 1cf0380..0b88129 100644 --- a/protocol/src/protocol/versions/v1_19.rs +++ b/protocol/src/protocol/versions/v1_19.rs @@ -155,7 +155,7 @@ protocol_packet_ids!( 0x5c => EntitySoundEffect 0x5d => SoundEffect 0x5e => StopSound - //0x5f => SystemChatMessage // TODO + 0x5f => SystemChatMessage 0x60 => PlayerListHeaderFooter 0x61 => NBTQueryResponse 0x62 => CollectItem diff --git a/src/server/mod.rs b/src/server/mod.rs index 5192ce1..cc3d277 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -680,6 +680,7 @@ impl Server { UpdateSign_u16 => on_sign_update_u16, PlayerInfo => on_player_info, PlayerInfo_String => on_player_info_string, + SystemChatMessage => on_system_chat_message, ServerMessage_NoPosition => on_servermessage_noposition, ServerMessage_Position => on_servermessage_position, ServerMessage_Sender => on_servermessage_sender, @@ -1996,6 +1997,14 @@ impl Server { } } + fn on_system_chat_message( + &mut self, + m: packet::play::clientbound::SystemChatMessage, + ) { + // TODO: flag as system message (vs chat message) + self.on_servermessage(&m.message, None, None); + } + fn on_servermessage_noposition( &mut self, m: packet::play::clientbound::ServerMessage_NoPosition,