Struct valence_inventory::Inventory
source · pub struct Inventory { /* private fields */ }
Implementations§
source§impl Inventory
impl Inventory
pub fn new(kind: InventoryKind) -> Self
pub fn with_title<'a>(kind: InventoryKind, title: impl IntoText<'a>) -> Self
pub fn slot(&self, idx: u16) -> Option<&ItemStack>
sourcepub fn set_slot(&mut self, idx: u16, item: impl Into<Option<ItemStack>>)
pub fn set_slot(&mut self, idx: u16, item: impl Into<Option<ItemStack>>)
Sets the slot at the given index to the given item stack.
See also Inventory::replace_slot
.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
assert_eq!(inv.slot(0).unwrap().item, ItemKind::Diamond);
sourcepub fn replace_slot(
&mut self,
idx: u16,
item: impl Into<Option<ItemStack>>
) -> Option<ItemStack>
pub fn replace_slot( &mut self, idx: u16, item: impl Into<Option<ItemStack>> ) -> Option<ItemStack>
Replaces the slot at the given index with the given item stack, and returns the old stack in that slot.
See also Inventory::set_slot
.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
let old = inv.replace_slot(0, ItemStack::new(ItemKind::IronIngot, 1, None));
assert_eq!(old.unwrap().item, ItemKind::Diamond);
sourcepub fn swap_slot(&mut self, idx_a: u16, idx_b: u16)
pub fn swap_slot(&mut self, idx_a: u16, idx_b: u16)
Swap the contents of two slots. If the slots are the same, nothing happens.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
assert_eq!(inv.slot(1), None);
inv.swap_slot(0, 1);
assert_eq!(inv.slot(1).unwrap().item, ItemKind::Diamond);
sourcepub fn set_slot_amount(&mut self, idx: u16, amount: u8)
pub fn set_slot_amount(&mut self, idx: u16, amount: u8)
Set the amount of items in the given slot without replacing the slot
entirely. Valid values are 1-127, inclusive, and amount
will be
clamped to this range. If the slot is empty, nothing happens.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
inv.set_slot_amount(0, 64);
assert_eq!(inv.slot(0).unwrap().count(), 64);
pub fn slot_count(&self) -> u16
pub fn slots( &self ) -> impl ExactSizeIterator<Item = Option<&ItemStack>> + DoubleEndedIterator + FusedIterator + Clone + '_
pub fn kind(&self) -> InventoryKind
sourcepub fn title(&self) -> &Text
pub fn title(&self) -> &Text
The text displayed on the inventory’s title bar.
let inv = Inventory::with_title(InventoryKind::Generic9x3, "Box of Holding");
assert_eq!(inv.title(), &Text::from("Box of Holding"));
sourcepub fn set_title<'a>(&mut self, title: impl IntoText<'a>)
pub fn set_title<'a>(&mut self, title: impl IntoText<'a>)
Set the text displayed on the inventory’s title bar.
To get the old title, use Inventory::replace_title
.
let mut inv = Inventory::new(InventoryKind::Generic9x3);
inv.set_title("Box of Holding");
sourcepub fn replace_title<'a>(&mut self, title: impl IntoText<'a>) -> Text
pub fn replace_title<'a>(&mut self, title: impl IntoText<'a>) -> Text
Replace the text displayed on the inventory’s title bar, and returns the old text.
sourcepub fn first_empty_slot_in(&self, range: Range<u16>) -> Option<u16>
pub fn first_empty_slot_in(&self, range: Range<u16>) -> Option<u16>
Returns the first empty slot in the given range, or None
if there are
no empty slots in the range.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 1, None));
inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None));
assert_eq!(inv.first_empty_slot_in(0..6), Some(1));
assert_eq!(inv.first_empty_slot_in(2..6), Some(4));
sourcepub fn first_empty_slot(&self) -> Option<u16>
pub fn first_empty_slot(&self) -> Option<u16>
Returns the first empty slot in the inventory, or None
if there are no
empty slots.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 1, None));
inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None));
assert_eq!(inv.first_empty_slot(), Some(1));
sourcepub fn first_slot_with_item_in(
&self,
item: ItemKind,
stack_max: u8,
range: Range<u16>
) -> Option<u16>
pub fn first_slot_with_item_in( &self, item: ItemKind, stack_max: u8, range: Range<u16> ) -> Option<u16>
Returns the first slot with the given [ItemKind
] in the inventory
where count() < stack_max
, or None
if there are no empty slots.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 64, None));
inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None));
inv.set_slot(4, ItemStack::new(ItemKind::GoldIngot, 1, None));
assert_eq!(
inv.first_slot_with_item_in(ItemKind::GoldIngot, 64, 0..5),
Some(4)
);
sourcepub fn first_slot_with_item(&self, item: ItemKind, stack_max: u8) -> Option<u16>
pub fn first_slot_with_item(&self, item: ItemKind, stack_max: u8) -> Option<u16>
Returns the first slot with the given [ItemKind
] in the inventory
where count() < stack_max
, or None
if there are no empty slots.
let mut inv = Inventory::new(InventoryKind::Generic9x1);
inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None));
inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 64, None));
inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None));
inv.set_slot(4, ItemStack::new(ItemKind::GoldIngot, 1, None));
assert_eq!(inv.first_slot_with_item(ItemKind::GoldIngot, 64), Some(4));
Trait Implementations§
source§impl Component for Inventorywhere
Self: Send + Sync + 'static,
impl Component for Inventorywhere Self: Send + Sync + 'static,
§type Storage = TableStorage
type Storage = TableStorage
TableStorage
or SparseStorage
.Auto Trait Implementations§
impl RefUnwindSafe for Inventory
impl Send for Inventory
impl Sync for Inventory
impl Unpin for Inventory
impl UnwindSafe for Inventory
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId) )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> Cwhere F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a, Aligned>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.