use potato_derive::ItemComponent; use serde::{Deserialize, Serialize}; use crate::identifier::Identifier; #[derive(Debug, Serialize, Deserialize, Clone, ItemComponent)] #[item_component(namespace = "minecraft", id = "attribute_modifiers")] pub struct AttributeModifiers(Vec); #[derive(Debug, Serialize, Deserialize, Clone)] pub struct AttributeModifier { pub r#type: String, #[serde(default)] pub slot: AttributeModifierSlot, pub id: Identifier, pub amount: f64, pub operation: AttributeModifierOperation, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[serde(rename_all = "snake_case")] pub enum AttributeModifierSlot { #[default] Any, Hand, Armor, Mainhand, Offhand, Head, Chest, Legs, Feet, Body, } #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "snake_case")] pub enum AttributeModifierOperation { AddValue, AddMultipliedBase, AddMultipliedTotal, }