mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
Add masked chat type/event (#118)
This commit is contained in:
parent
cc976c6873
commit
888c276503
4 changed files with 29 additions and 4 deletions
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use azalea_chat::FormattedText;
|
use azalea_chat::FormattedText;
|
||||||
use azalea_protocol::packets::game::{
|
use azalea_protocol::packets::game::{
|
||||||
|
clientbound_disguised_chat_packet::ClientboundMaskedChatPacket,
|
||||||
clientbound_player_chat_packet::ClientboundPlayerChatPacket,
|
clientbound_player_chat_packet::ClientboundPlayerChatPacket,
|
||||||
clientbound_system_chat_packet::ClientboundSystemChatPacket,
|
clientbound_system_chat_packet::ClientboundSystemChatPacket,
|
||||||
serverbound_chat_command_packet::ServerboundChatCommandPacket,
|
serverbound_chat_command_packet::ServerboundChatCommandPacket,
|
||||||
|
@ -30,6 +31,7 @@ use crate::{
|
||||||
pub enum ChatPacket {
|
pub enum ChatPacket {
|
||||||
System(Arc<ClientboundSystemChatPacket>),
|
System(Arc<ClientboundSystemChatPacket>),
|
||||||
Player(Arc<ClientboundPlayerChatPacket>),
|
Player(Arc<ClientboundPlayerChatPacket>),
|
||||||
|
Masked(Arc<ClientboundMaskedChatPacket>),
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! regex {
|
macro_rules! regex {
|
||||||
|
@ -45,6 +47,7 @@ impl ChatPacket {
|
||||||
match self {
|
match self {
|
||||||
ChatPacket::System(p) => p.content.clone(),
|
ChatPacket::System(p) => p.content.clone(),
|
||||||
ChatPacket::Player(p) => p.message(),
|
ChatPacket::Player(p) => p.message(),
|
||||||
|
ChatPacket::Masked(p) => p.message.clone(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +75,16 @@ impl ChatPacket {
|
||||||
return (Some(m[1].to_string()), m[2].to_string());
|
return (Some(m[1].to_string()), m[2].to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(None, message)
|
||||||
|
}
|
||||||
|
ChatPacket::Masked(p) => {
|
||||||
|
let message = p.message.to_string();
|
||||||
|
// It's a system message, so we'll have to match the content
|
||||||
|
// with regex
|
||||||
|
if let Some(m) = regex!("^<([a-zA-Z_0-9]{1,16})> (.+)$").captures(&message) {
|
||||||
|
return (Some(m[1].to_string()), m[2].to_string());
|
||||||
|
}
|
||||||
|
|
||||||
(None, message)
|
(None, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,6 +104,7 @@ impl ChatPacket {
|
||||||
match self {
|
match self {
|
||||||
ChatPacket::System(_) => None,
|
ChatPacket::System(_) => None,
|
||||||
ChatPacket::Player(m) => Some(m.sender),
|
ChatPacket::Player(m) => Some(m.sender),
|
||||||
|
ChatPacket::Masked(_) => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1382,7 +1382,18 @@ pub fn process_packet_events(ecs: &mut World) {
|
||||||
ClientboundGamePacket::TabList(_) => {}
|
ClientboundGamePacket::TabList(_) => {}
|
||||||
ClientboundGamePacket::TagQuery(_) => {}
|
ClientboundGamePacket::TagQuery(_) => {}
|
||||||
ClientboundGamePacket::TakeItemEntity(_) => {}
|
ClientboundGamePacket::TakeItemEntity(_) => {}
|
||||||
ClientboundGamePacket::DisguisedChat(_) => {}
|
ClientboundGamePacket::MaskedChat(p) => {
|
||||||
|
debug!("Got masked chat packet {p:?}");
|
||||||
|
|
||||||
|
let mut system_state: SystemState<EventWriter<ChatReceivedEvent>> =
|
||||||
|
SystemState::new(ecs);
|
||||||
|
let mut chat_events = system_state.get_mut(ecs);
|
||||||
|
|
||||||
|
chat_events.send(ChatReceivedEvent {
|
||||||
|
entity: player_entity,
|
||||||
|
packet: ChatPacket::Masked(Arc::new(p.clone())),
|
||||||
|
});
|
||||||
|
}
|
||||||
ClientboundGamePacket::Bundle(_) => {}
|
ClientboundGamePacket::Bundle(_) => {}
|
||||||
ClientboundGamePacket::DamageEvent(_) => {}
|
ClientboundGamePacket::DamageEvent(_) => {}
|
||||||
ClientboundGamePacket::HurtAnimation(_) => {}
|
ClientboundGamePacket::HurtAnimation(_) => {}
|
||||||
|
|
|
@ -3,8 +3,8 @@ use azalea_buf::McBuf;
|
||||||
use azalea_chat::FormattedText;
|
use azalea_chat::FormattedText;
|
||||||
use azalea_protocol_macros::ClientboundGamePacket;
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket, PartialEq)]
|
||||||
pub struct ClientboundDisguisedChatPacket {
|
pub struct ClientboundMaskedChatPacket {
|
||||||
pub message: FormattedText,
|
pub message: FormattedText,
|
||||||
pub chat_type: ChatTypeBound,
|
pub chat_type: ChatTypeBound,
|
||||||
}
|
}
|
||||||
|
|
|
@ -255,7 +255,7 @@ declare_state_packets!(
|
||||||
0x19: clientbound_damage_event_packet::ClientboundDamageEventPacket,
|
0x19: clientbound_damage_event_packet::ClientboundDamageEventPacket,
|
||||||
0x1a: clientbound_delete_chat_packet::ClientboundDeleteChatPacket,
|
0x1a: clientbound_delete_chat_packet::ClientboundDeleteChatPacket,
|
||||||
0x1b: clientbound_disconnect_packet::ClientboundDisconnectPacket,
|
0x1b: clientbound_disconnect_packet::ClientboundDisconnectPacket,
|
||||||
0x1c: clientbound_disguised_chat_packet::ClientboundDisguisedChatPacket,
|
0x1c: clientbound_disguised_chat_packet::ClientboundMaskedChatPacket,
|
||||||
0x1d: clientbound_entity_event_packet::ClientboundEntityEventPacket,
|
0x1d: clientbound_entity_event_packet::ClientboundEntityEventPacket,
|
||||||
0x1e: clientbound_explode_packet::ClientboundExplodePacket,
|
0x1e: clientbound_explode_packet::ClientboundExplodePacket,
|
||||||
0x1f: clientbound_forget_level_chunk_packet::ClientboundForgetLevelChunkPacket,
|
0x1f: clientbound_forget_level_chunk_packet::ClientboundForgetLevelChunkPacket,
|
||||||
|
|
Loading…
Add table
Reference in a new issue