minecraft_command_types/command/
item.rs

1use crate::command::item_source::ItemSource;
2use crate::item::ItemStack;
3use crate::snbt::SNBT;
4use minecraft_command_types_derive::HasMacro;
5use std::fmt::{Display, Formatter};
6
7#[derive(Debug, Clone, Eq, PartialEq, Hash, HasMacro)]
8pub enum ItemCommand {
9    Modifier(SNBT),
10    With(ItemStack, Option<i32>),
11    From(ItemSource, String, Option<SNBT>),
12}
13
14impl Display for ItemCommand {
15    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
16        match self {
17            ItemCommand::Modifier(item) => item.fmt(f),
18            ItemCommand::With(item, count) => {
19                write!(f, "with {}", item)?;
20
21                if let Some(count) = count {
22                    write!(f, " {}", count)?;
23                }
24
25                Ok(())
26            }
27            ItemCommand::From(source, slot, modifier) => {
28                write!(f, "from {} {}", source, slot)?;
29
30                if let Some(modifier) = modifier {
31                    write!(f, " {}", modifier)?;
32                }
33
34                Ok(())
35            }
36        }
37    }
38}