pub trait Slot:
ErasedType
+ Send
+ Sync {
Show 19 methods
// Required methods
fn storage(&self) -> &SlotStorage;
fn get_item<'a>(&self, guard: &'a ContainerLockGuard) -> &'a ItemStack;
fn get_item_mut<'a>(
&self,
guard: &'a mut ContainerLockGuard,
) -> &'a mut ItemStack;
fn set_item(&self, guard: &mut ContainerLockGuard, stack: ItemStack);
fn get_max_stack_size(&self, guard: &ContainerLockGuard) -> i32;
fn set_changed(&self, guard: &mut ContainerLockGuard);
fn get_container_slot(&self) -> usize;
// Provided methods
fn set_by_player(
&self,
guard: &mut ContainerLockGuard,
stack: ItemStack,
_previous: &ItemStack,
) { ... }
fn has_item(&self, guard: &ContainerLockGuard) -> bool { ... }
fn may_place(&self, _stack: &ItemStack) -> bool { ... }
fn may_pickup(&self, _guard: &ContainerLockGuard, _player: &Player) -> bool { ... }
fn allow_modification(
&self,
guard: &ContainerLockGuard,
player: &Player,
) -> bool { ... }
fn get_max_stack_size_for_item(
&self,
guard: &ContainerLockGuard,
stack: &ItemStack,
) -> i32 { ... }
fn remove(&self, guard: &mut ContainerLockGuard, amount: i32) -> ItemStack { ... }
fn try_remove(
&self,
guard: &mut ContainerLockGuard,
amount: i32,
max_amount: i32,
player: &Player,
) -> Option<ItemStack> { ... }
fn on_take(
&self,
guard: &mut ContainerLockGuard,
_stack: &ItemStack,
_player: &Player,
) -> Option<ItemStack> { ... }
fn safe_take(
&self,
guard: &mut ContainerLockGuard,
amount: i32,
max_amount: i32,
player: &Player,
) -> ItemStack { ... }
fn safe_insert(
&self,
guard: &mut ContainerLockGuard,
input: ItemStack,
amount: i32,
) -> ItemStack { ... }
fn is_fake(&self) -> bool { ... }
}Expand description
A view into a single position in a container, accessed via a ContainerLockGuard.
Concrete implementations must implement steel_utils::DowncastType with
a unique, stable key so erased slot references can recover their type, and
retain one SlotStorage descriptor for their full container dependency
set.
Required Methods§
Sourcefn storage(&self) -> &SlotStorage
fn storage(&self) -> &SlotStorage
Returns this slot’s physical storage and auxiliary dependencies.
Sourcefn get_item<'a>(&self, guard: &'a ContainerLockGuard) -> &'a ItemStack
fn get_item<'a>(&self, guard: &'a ContainerLockGuard) -> &'a ItemStack
Returns a reference to the item in this slot.
Sourcefn get_item_mut<'a>(
&self,
guard: &'a mut ContainerLockGuard,
) -> &'a mut ItemStack
fn get_item_mut<'a>( &self, guard: &'a mut ContainerLockGuard, ) -> &'a mut ItemStack
Returns a mutable reference to the item in this slot.
Sourcefn set_item(&self, guard: &mut ContainerLockGuard, stack: ItemStack)
fn set_item(&self, guard: &mut ContainerLockGuard, stack: ItemStack)
Sets the item in this slot.
Sourcefn get_max_stack_size(&self, guard: &ContainerLockGuard) -> i32
fn get_max_stack_size(&self, guard: &ContainerLockGuard) -> i32
Returns the maximum stack size for this slot.
Sourcefn set_changed(&self, guard: &mut ContainerLockGuard)
fn set_changed(&self, guard: &mut ContainerLockGuard)
Marks the slot’s container as changed.
Sourcefn get_container_slot(&self) -> usize
fn get_container_slot(&self) -> usize
Returns the container slot index.
Provided Methods§
Sourcefn set_by_player(
&self,
guard: &mut ContainerLockGuard,
stack: ItemStack,
_previous: &ItemStack,
)
fn set_by_player( &self, guard: &mut ContainerLockGuard, stack: ItemStack, _previous: &ItemStack, )
Sets the item, triggered by a player action. previous is the prior item.
Sourcefn has_item(&self, guard: &ContainerLockGuard) -> bool
fn has_item(&self, guard: &ContainerLockGuard) -> bool
Returns true if this slot has an item.
Sourcefn may_place(&self, _stack: &ItemStack) -> bool
fn may_place(&self, _stack: &ItemStack) -> bool
Returns true if the given item can be placed in this slot.
Sourcefn may_pickup(&self, _guard: &ContainerLockGuard, _player: &Player) -> bool
fn may_pickup(&self, _guard: &ContainerLockGuard, _player: &Player) -> bool
Returns true if items can be picked up from this slot.
Sourcefn allow_modification(
&self,
guard: &ContainerLockGuard,
player: &Player,
) -> bool
fn allow_modification( &self, guard: &ContainerLockGuard, player: &Player, ) -> bool
Returns true if partial removal is allowed from this slot.
Sourcefn get_max_stack_size_for_item(
&self,
guard: &ContainerLockGuard,
stack: &ItemStack,
) -> i32
fn get_max_stack_size_for_item( &self, guard: &ContainerLockGuard, stack: &ItemStack, ) -> i32
Returns the max stack size for stack here (min of slot and item limits).
Sourcefn remove(&self, guard: &mut ContainerLockGuard, amount: i32) -> ItemStack
fn remove(&self, guard: &mut ContainerLockGuard, amount: i32) -> ItemStack
Removes up to amount items from this slot and returns them.
Sourcefn try_remove(
&self,
guard: &mut ContainerLockGuard,
amount: i32,
max_amount: i32,
player: &Player,
) -> Option<ItemStack>
fn try_remove( &self, guard: &mut ContainerLockGuard, amount: i32, max_amount: i32, player: &Player, ) -> Option<ItemStack>
Tries to remove items from this slot with validation.
Sourcefn on_take(
&self,
guard: &mut ContainerLockGuard,
_stack: &ItemStack,
_player: &Player,
) -> Option<ItemStack>
fn on_take( &self, guard: &mut ContainerLockGuard, _stack: &ItemStack, _player: &Player, ) -> Option<ItemStack>
Called when an item is taken. Returns any remainder that couldn’t be placed back.
Sourcefn safe_take(
&self,
guard: &mut ContainerLockGuard,
amount: i32,
max_amount: i32,
player: &Player,
) -> ItemStack
fn safe_take( &self, guard: &mut ContainerLockGuard, amount: i32, max_amount: i32, player: &Player, ) -> ItemStack
Takes items with all checks and callbacks. Returns the items taken.
Sourcefn safe_insert(
&self,
guard: &mut ContainerLockGuard,
input: ItemStack,
amount: i32,
) -> ItemStack
fn safe_insert( &self, guard: &mut ContainerLockGuard, input: ItemStack, amount: i32, ) -> ItemStack
Inserts up to amount items, firing set callbacks.
Sourcefn is_fake(&self) -> bool
fn is_fake(&self) -> bool
Returns true if normal menu persistence and transfer rules must not be applied to this slot.
A container-backed fake slot must be the menu’s only view of its
physical SlotStorage::physical_key.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".