aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-04-25 07:24:12 +0900
committermat <git@matdoes.dev>2025-04-25 07:24:12 +0900
commit8012fb90b5b2b09674f3307a27ed97cbfcc10571 (patch)
treede2832cbf6cfb74058c496888d5ccf2e4c343abe /azalea-protocol/src
parentc7d53d6532681da0162c900266641dc7512896a7 (diff)
downloadazalea-drasl-8012fb90b5b2b09674f3307a27ed97cbfcc10571.tar.xz
update serialization for set_player_team
Diffstat (limited to 'azalea-protocol/src')
-rw-r--r--azalea-protocol/src/packets/game/c_set_player_team.rs94
1 files changed, 45 insertions, 49 deletions
diff --git a/azalea-protocol/src/packets/game/c_set_player_team.rs b/azalea-protocol/src/packets/game/c_set_player_team.rs
index 38249cf3..f73835f7 100644
--- a/azalea-protocol/src/packets/game/c_set_player_team.rs
+++ b/azalea-protocol/src/packets/game/c_set_player_team.rs
@@ -1,7 +1,5 @@
-use std::io::{Cursor, Write};
-
-use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite, BufReadError};
-use azalea_chat::{style::ChatFormatting, FormattedText};
+use azalea_buf::AzBuf;
+use azalea_chat::{FormattedText, style::ChatFormatting};
use azalea_protocol_macros::ClientboundGamePacket;
#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)]
@@ -10,7 +8,7 @@ pub struct ClientboundSetPlayerTeam {
pub method: Method,
}
-#[derive(Clone, Debug)]
+#[derive(Clone, Debug, AzBuf)]
pub enum Method {
Add((Parameters, PlayerList)),
Remove,
@@ -19,56 +17,54 @@ pub enum Method {
Leave(PlayerList),
}
-impl AzaleaRead for Method {
- 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)]
+#[derive(Clone, Debug, AzBuf)]
pub struct Parameters {
pub display_name: FormattedText,
pub options: u8,
- pub nametag_visibility: String,
- pub collision_rule: String,
+ pub nametag_visibility: NameTagVisibility,
+ pub collision_rule: CollisionRule,
pub color: ChatFormatting,
pub player_prefix: 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>;
+
+#[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);
+ }
+}