chunkedge_protocol/packets/play/
set_player_team_s2c.rs

1use std::borrow::Cow;
2
3use bitfield_struct::bitfield;
4use chunkedge_binary::{Decode, Encode, TextComponent};
5
6use crate::Packet;
7
8#[derive(Clone, Debug, Encode, Decode, Packet)]
9pub struct SetPlayerTeamS2c<'a> {
10    pub team_name: &'a str,
11    pub mode: Mode<'a>,
12}
13
14#[derive(Clone, PartialEq, Debug, Encode, Decode)]
15pub enum Mode<'a> {
16    CreateTeam {
17        team_display_name: Cow<'a, TextComponent>,
18        friendly_flags: TeamFlags,
19        name_tag_visibility: NameTagVisibility,
20        collision_rule: CollisionRule,
21        team_color: TeamColor,
22        team_prefix: Cow<'a, TextComponent>,
23        team_suffix: Cow<'a, TextComponent>,
24        entities: Vec<&'a str>,
25    },
26    RemoveTeam,
27    UpdateTeamInfo {
28        team_display_name: Cow<'a, TextComponent>,
29        friendly_flags: TeamFlags,
30        name_tag_visibility: NameTagVisibility,
31        collision_rule: CollisionRule,
32        team_color: TeamColor,
33        team_prefix: Cow<'a, TextComponent>,
34        team_suffix: Cow<'a, TextComponent>,
35    },
36    AddEntities {
37        entities: Vec<&'a str>,
38    },
39    RemoveEntities {
40        entities: Vec<&'a str>,
41    },
42}
43
44#[bitfield(u8)]
45#[derive(PartialEq, Eq, Encode, Decode)]
46pub struct TeamFlags {
47    pub friendly_fire: bool,
48    pub see_invisible_teammates: bool,
49    #[bits(6)]
50    _pad: u8,
51}
52
53#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode)]
54pub enum NameTagVisibility {
55    Always,
56    Never,
57    HideForOtherTeams,
58    HideForOwnTeams,
59}
60
61#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode)]
62pub enum CollisionRule {
63    Always,
64    Never,
65    PushOtherTeams,
66    PushOwnTeam,
67}
68
69#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode)]
70pub enum TeamColor {
71    Black,
72    DarkBlue,
73    DarkGreen,
74    DarkCyan,
75    DarkRed,
76    Purple,
77    Gold,
78    Gray,
79    DarkGray,
80    Blue,
81    BrightGreen,
82    Cyan,
83    Red,
84    Pink,
85    Yellow,
86    White,
87    Obfuscated,
88    Bold,
89    Strikethrough,
90    Underlined,
91    Italic,
92    Reset,
93}