diff options
Diffstat (limited to 'azalea-core/src/attribute_modifier_operation.rs')
| -rw-r--r-- | azalea-core/src/attribute_modifier_operation.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/azalea-core/src/attribute_modifier_operation.rs b/azalea-core/src/attribute_modifier_operation.rs new file mode 100644 index 00000000..ff92a44a --- /dev/null +++ b/azalea-core/src/attribute_modifier_operation.rs @@ -0,0 +1,33 @@ +use std::str::FromStr; + +use azalea_buf::AzBuf; +use serde::Serialize; +use simdnbt::{FromNbtTag, borrow::NbtTag}; + +#[derive(Clone, Copy, PartialEq, AzBuf, Debug, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum AttributeModifierOperation { + AddValue, + AddMultipliedBase, + AddMultipliedTotal, +} + +impl FromStr for AttributeModifierOperation { + type Err = (); + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let value: AttributeModifierOperation = match s { + "add_value" => Self::AddValue, + "add_multiplied_base" => Self::AddMultipliedBase, + "add_multiplied_total" => Self::AddMultipliedTotal, + _ => return Err(()), + }; + Ok(value) + } +} +impl FromNbtTag for AttributeModifierOperation { + fn from_nbt_tag(tag: NbtTag) -> Option<Self> { + let v = tag.string()?; + Self::from_str(&v.to_str()).ok() + } +} |
