Skip to main content

steel_core/behavior/
item_utils.rs

1//! Helpers shared by item behavior implementations.
2
3use steel_registry::item_stack::ItemStack;
4
5use crate::behavior::UseItemContext;
6use crate::inventory::lock::ContainerId;
7use crate::player::player_inventory::PlayerInventory;
8
9/// Applies vanilla `ItemUtils.createFilledResult`.
10pub(crate) fn create_filled_result(
11    context: &UseItemContext,
12    result_stack: ItemStack,
13    limit_creative_stack_size: bool,
14) {
15    let player = context.player;
16    let overflow = context.inv.with_guard(|guard| {
17        let inv_id = ContainerId::from_arc(&player.inventory);
18        let Some(inv) = guard.get_typed_mut::<PlayerInventory>(inv_id) else {
19            return result_stack;
20        };
21
22        inv.apply_filled_result(
23            context.hand,
24            result_stack,
25            player.has_infinite_materials(),
26            limit_creative_stack_size,
27        )
28    });
29
30    if !overflow.is_empty() {
31        let _ = player.drop_item(overflow, false, false);
32    }
33}