azalea_inventory/item/mod.rs
1use azalea_registry::builtin::ItemKind;
2
3use crate::{components::MaxStackSize, default_components::get_default_component};
4
5pub mod consume_effect;
6
7pub trait MaxStackSizeExt {
8 /// Get the maximum stack size for this item.
9 ///
10 /// This is a signed integer to be consistent with the `count` field of
11 /// [`ItemStackData`].
12 ///
13 /// [`ItemStackData`]: crate::ItemStackData
14 fn max_stack_size(&self) -> i32;
15
16 /// Whether this item can be stacked with other items.
17 ///
18 /// This is equivalent to `self.max_stack_size() > 1`.
19 fn stackable(&self) -> bool {
20 self.max_stack_size() > 1
21 }
22}
23
24impl MaxStackSizeExt for ItemKind {
25 fn max_stack_size(&self) -> i32 {
26 get_default_component::<MaxStackSize>(*self).map_or(64, |s| s.count)
27 }
28}