minecraft_command_types/command/
team.rs

1use crate::command::enums::team_collision_rule::TeamCollisionRule;
2use crate::command::enums::team_color::TeamColor;
3use crate::command::enums::team_visibility::TeamVisibility;
4use crate::entity_selector::EntitySelector;
5use crate::snbt::SNBT;
6use minecraft_command_types_derive::HasMacro;
7use std::fmt::{Display, Formatter};
8
9#[derive(Debug, Clone, Eq, PartialEq, Hash, HasMacro)]
10pub enum TeamOption {
11    DisplayName(SNBT),
12    Color(TeamColor),
13    FriendlyFire(bool),
14    SeeFriendlyInvisibles(bool),
15    NametagVisibility(TeamVisibility),
16    DeathMessageVisibility(TeamVisibility),
17    CollisionRule(TeamCollisionRule),
18    Prefix(SNBT),
19    Suffix(SNBT),
20}
21
22impl Display for TeamOption {
23    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
24        match self {
25            TeamOption::DisplayName(display_name) => {
26                write!(f, "displayName {}", display_name)
27            }
28            TeamOption::Color(color) => {
29                write!(f, "color {}", color)
30            }
31            TeamOption::FriendlyFire(friendly_fire) => {
32                write!(f, "friendlyFire {}", friendly_fire)
33            }
34            TeamOption::SeeFriendlyInvisibles(see_friendly_invisibles) => {
35                write!(f, "seeFriendlyInvisibles {}", see_friendly_invisibles)
36            }
37            TeamOption::NametagVisibility(visibility) => {
38                write!(f, "nametagVisibility {}", visibility)
39            }
40            TeamOption::DeathMessageVisibility(visibility) => {
41                write!(f, "deathMessageVisibility {}", visibility)
42            }
43            TeamOption::CollisionRule(collision_rule) => {
44                write!(f, "collisionRule {}", collision_rule)
45            }
46            TeamOption::Prefix(prefix) => {
47                write!(f, "prefix {}", prefix)
48            }
49            TeamOption::Suffix(suffix) => {
50                write!(f, "suffix {}", suffix)
51            }
52        }
53    }
54}
55#[derive(Debug, Clone, Eq, PartialEq, Hash, HasMacro)]
56pub enum TeamCommand {
57    List(Option<String>),
58    Add(String, Option<SNBT>),
59    Remove(String),
60    Empty(String),
61    Join(String, Option<EntitySelector>),
62    Leave(EntitySelector),
63    Modify(String, TeamOption),
64}
65
66impl Display for TeamCommand {
67    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
68        match self {
69            TeamCommand::List(name) => {
70                f.write_str("list")?;
71
72                if let Some(name) = name {
73                    write!(f, " {}", name)?;
74                }
75
76                Ok(())
77            }
78            TeamCommand::Add(name, display_name) => {
79                write!(f, "add {}", name)?;
80
81                if let Some(display_name) = display_name {
82                    write!(f, " {}", display_name)?;
83                }
84
85                Ok(())
86            }
87            TeamCommand::Remove(name) => {
88                write!(f, "remove {}", name)
89            }
90            TeamCommand::Empty(name) => {
91                write!(f, "empty {}", name)
92            }
93            TeamCommand::Join(name, selector) => {
94                write!(f, "join {}", name)?;
95
96                if let Some(selector) = selector {
97                    write!(f, " {}", selector)?;
98                }
99
100                Ok(())
101            }
102            TeamCommand::Leave(selector) => {
103                write!(f, "leave {}", selector)
104            }
105            TeamCommand::Modify(name, option) => {
106                write!(f, "modify {} {}", name, option)
107            }
108        }
109    }
110}