1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

update serialization for set_player_team

This commit is contained in:
mat 2025-04-25 07:24:12 +09:00
parent c7d53d6532
commit 8012fb90b5
2 changed files with 48 additions and 50 deletions

View file

@ -1554,7 +1554,9 @@ impl GamePacketHandler<'_> {
pub fn set_display_objective(&mut self, _p: &ClientboundSetDisplayObjective) {} pub fn set_display_objective(&mut self, _p: &ClientboundSetDisplayObjective) {}
pub fn set_objective(&mut self, _p: &ClientboundSetObjective) {} pub fn set_objective(&mut self, _p: &ClientboundSetObjective) {}
pub fn set_passengers(&mut self, _p: &ClientboundSetPassengers) {} pub fn set_passengers(&mut self, _p: &ClientboundSetPassengers) {}
pub fn set_player_team(&mut self, _p: &ClientboundSetPlayerTeam) {} pub fn set_player_team(&mut self, p: &ClientboundSetPlayerTeam) {
debug!("Got set player team packet {p:?}");
}
pub fn set_score(&mut self, _p: &ClientboundSetScore) {} pub fn set_score(&mut self, _p: &ClientboundSetScore) {}
pub fn set_simulation_distance(&mut self, _p: &ClientboundSetSimulationDistance) {} pub fn set_simulation_distance(&mut self, _p: &ClientboundSetSimulationDistance) {}
pub fn set_subtitle_text(&mut self, _p: &ClientboundSetSubtitleText) {} pub fn set_subtitle_text(&mut self, _p: &ClientboundSetSubtitleText) {}

View file

@ -1,7 +1,5 @@
use std::io::{Cursor, Write}; use azalea_buf::AzBuf;
use azalea_chat::{FormattedText, style::ChatFormatting};
use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite, BufReadError};
use azalea_chat::{style::ChatFormatting, FormattedText};
use azalea_protocol_macros::ClientboundGamePacket; use azalea_protocol_macros::ClientboundGamePacket;
#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] #[derive(Clone, Debug, AzBuf, ClientboundGamePacket)]
@ -10,7 +8,7 @@ pub struct ClientboundSetPlayerTeam {
pub method: Method, pub method: Method,
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug, AzBuf)]
pub enum Method { pub enum Method {
Add((Parameters, PlayerList)), Add((Parameters, PlayerList)),
Remove, Remove,
@ -19,56 +17,54 @@ pub enum Method {
Leave(PlayerList), Leave(PlayerList),
} }
impl AzaleaRead for Method { #[derive(Clone, Debug, AzBuf)]
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
Ok(match u8::azalea_read(buf)? {
0 => Method::Add((Parameters::azalea_read(buf)?, PlayerList::azalea_read(buf)?)),
1 => Method::Remove,
2 => Method::Change(Parameters::azalea_read(buf)?),
3 => Method::Join(PlayerList::azalea_read(buf)?),
4 => Method::Leave(PlayerList::azalea_read(buf)?),
id => return Err(BufReadError::UnexpectedEnumVariant { id: i32::from(id) }),
})
}
}
impl AzaleaWrite for Method {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
match self {
Method::Add((parameters, playerlist)) => {
0u8.azalea_write(buf)?;
parameters.azalea_write(buf)?;
playerlist.azalea_write(buf)?;
}
Method::Remove => {
1u8.azalea_write(buf)?;
}
Method::Change(parameters) => {
2u8.azalea_write(buf)?;
parameters.azalea_write(buf)?;
}
Method::Join(playerlist) => {
3u8.azalea_write(buf)?;
playerlist.azalea_write(buf)?;
}
Method::Leave(playerlist) => {
4u8.azalea_write(buf)?;
playerlist.azalea_write(buf)?;
}
}
Ok(())
}
}
#[derive(AzBuf, Clone, Debug)]
pub struct Parameters { pub struct Parameters {
pub display_name: FormattedText, pub display_name: FormattedText,
pub options: u8, pub options: u8,
pub nametag_visibility: String, pub nametag_visibility: NameTagVisibility,
pub collision_rule: String, pub collision_rule: CollisionRule,
pub color: ChatFormatting, pub color: ChatFormatting,
pub player_prefix: FormattedText, pub player_prefix: FormattedText,
pub player_suffix: FormattedText, pub player_suffix: FormattedText,
} }
#[derive(Clone, Copy, Debug, AzBuf)]
pub enum CollisionRule {
Always,
Never,
PushOtherTeams,
PushOwnTeam,
}
#[derive(Clone, Copy, Debug, AzBuf)]
pub enum NameTagVisibility {
Always,
Never,
HideForOtherTeams,
HideForOwnTeam,
}
type PlayerList = Vec<String>; type PlayerList = Vec<String>;
#[cfg(test)]
mod tests {
use std::io::Cursor;
use azalea_buf::AzaleaRead;
use crate::packets::game::ClientboundSetPlayerTeam;
#[test]
fn test_read_set_player_team() {
let contents = [
16, 99, 111, 108, 108, 105, 100, 101, 82, 117, 108, 101, 95, 57, 52, 53, 54, 0, 8, 0,
16, 99, 111, 108, 108, 105, 100, 101, 82, 117, 108, 101, 95, 57, 52, 53, 54, 1, 0, 1,
21, 8, 0, 0, 8, 0, 0, 0,
];
let mut buf = Cursor::new(contents.as_slice());
let packet = ClientboundSetPlayerTeam::azalea_read(&mut buf).unwrap();
println!("{:?}", packet);
assert_eq!(buf.position(), contents.len() as u64);
}
}