use azalea::inventory::components::{CustomName, Damage, MaxDamage}; use mlua::{UserData, UserDataFields, UserDataMethods}; pub struct ItemStack { pub inner: azalea::inventory::ItemStack, } impl UserData for ItemStack { fn add_fields>(f: &mut F) { f.add_field_method_get("is_empty", |_, this| Ok(this.inner.is_empty())); f.add_field_method_get("is_present", |_, this| Ok(this.inner.is_present())); f.add_field_method_get("count", |_, this| Ok(this.inner.count())); f.add_field_method_get("kind", |_, this| Ok(this.inner.kind().to_string())); f.add_field_method_get("custom_name", |_, this| { Ok(if let Some(data) = this.inner.as_present() { data.components .get::() .map(|n| n.name.to_string()) } else { None }) }); f.add_field_method_get("damage", |_, this| { Ok(if let Some(data) = this.inner.as_present() { data.components.get::().map(|d| d.amount) } else { None }) }); f.add_field_method_get("max_damage", |_, this| { Ok(if let Some(data) = this.inner.as_present() { data.components.get::().map(|d| d.amount) } else { None }) }); } fn add_methods>(m: &mut M) { m.add_method_mut("split", |_, this, count: u32| { Ok(ItemStack { inner: this.inner.split(count), }) }); m.add_method_mut("update_empty", |_, this, (): ()| { this.inner.update_empty(); Ok(()) }); } }