Interface PlayerInventoryStorage

All Superinterfaces:
InventoryStorage, Storage<ItemVariant>

@Experimental @NonExtendable public interface PlayerInventoryStorage extends InventoryStorage
A Storage<ItemVariant> implementation for a PlayerInventory. This is a specialized version of InventoryStorage, with an additional transactional wrapper for PlayerInventory.offerOrDrop(net.minecraft.item.ItemStack).

Note that this is a wrapper around all the slots of the player inventory. However, insert(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext) is overriden to behave like offer(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext). For simple insertions, offer(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext) or offerOrDrop(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext) is recommended. InventoryStorage.getSlots() can also be used and combined with CombinedStorage to retrieve a wrapper around a specific range of slots.

Experimental feature, we reserve the right to remove or change it without further notice. The transfer API is a complex addition, and we want to be able to correct possible design mistakes.

  • Method Details

    • of

      static PlayerInventoryStorage of(net.minecraft.entity.player.PlayerEntity player)
      Return an instance for the passed player's inventory.
    • of

      static PlayerInventoryStorage of(net.minecraft.entity.player.PlayerInventory playerInventory)
      Return an instance for the passed player inventory.
    • getCursorStorage

      static SingleSlotStorage<ItemVariant> getCursorStorage(net.minecraft.screen.ScreenHandler screenHandler)
      Return a wrapper around the cursor slot of a screen handler, i.e. the stack that can be manipulated with ScreenHandler.getCursorStack() and ScreenHandler.setCursorStack(net.minecraft.item.ItemStack).
    • insert

      long insert(ItemVariant resource, long maxAmount, TransactionContext transaction)
      Insert items into this player inventory. Behaves the same as offer(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext). More fine-tuned insertion, for example over a specific range of slots, is possible with the slot list.
      Specified by:
      insert in interface Storage<ItemVariant>
      Parameters:
      resource - The resource to insert. May not be blank.
      maxAmount - The maximum amount of resource to insert. May not be negative.
      transaction - The transaction this operation is part of.
      Returns:
      A nonnegative integer not greater than maxAmount: the amount that was inserted.
      See Also:
    • offerOrDrop

      default void offerOrDrop(ItemVariant variant, long amount, TransactionContext transaction)
      Add items to the inventory if possible, and drop any leftover items in the world, similar to PlayerInventory.offerOrDrop(net.minecraft.item.ItemStack).

      Note: This function has full transaction support, and will not actually drop the items until the outermost transaction is committed.

      Parameters:
      variant - The variant to insert.
      amount - How many of the variant to insert.
      transaction - The transaction this operation is part of.
    • offer

      long offer(ItemVariant variant, long maxAmount, TransactionContext transaction)
      Try to add items to the inventory if possible, stacking like PlayerInventory.offer(net.minecraft.item.ItemStack, boolean). Unlike offerOrDrop(net.fabricmc.fabric.api.transfer.v1.item.ItemVariant, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext), this function will not drop excess items.

      The exact behavior is:

      1. Try to stack inserted items with existing items in the main hand, then the offhand.
      2. Try to stack remaining inserted items with existing items in the player main inventory.
      3. Try to insert the remainder into empty slots of the player main inventory.
      Parameters:
      variant - The variant to insert.
      maxAmount - How many of the variant to insert, at most.
      transaction - The transaction this operation is part of.
      Returns:
      How many items could be inserted.
    • drop

      void drop(ItemVariant variant, long amount, boolean throwRandomly, boolean retainOwnership, TransactionContext transaction)
      Throw items in the world from the player's location.

      Note: This function has full transaction support, and will not actually drop the items until the outermost transaction is committed.

      Parameters:
      variant - The variant to drop.
      amount - How many of the variant to drop.
      throwRandomly - If true, the variant will be thrown in a random direction from the entity regardless of which direction the entity is facing.
      retainOwnership - If true, set the Thrower NBT data to the player's UUID.
      transaction - The transaction this operation is part of.
      See Also:
      • PlayerEntity.dropItem(ItemStack, boolean, boolean)
    • drop

      default void drop(ItemVariant variant, long amount, boolean retainOwnership, TransactionContext transaction)
      Throw items in the world from the player's location.

      Note: This function has full transaction support, and will not actually drop the items until the outermost transaction is committed.

      Parameters:
      variant - The variant to drop.
      amount - How many of the variant to drop.
      retainOwnership - If true, set the Thrower NBT data to the player's UUID.
      transaction - The transaction this operation is part of.
      See Also:
      • PlayerEntity.dropItem(ItemStack, boolean, boolean)
    • drop

      default void drop(ItemVariant variant, long amount, TransactionContext transaction)
      Throw items in the world from the player's location.

      Note: This function has full transaction support, and will not actually drop the items until the outermost transaction is committed.

      Parameters:
      variant - The variant to drop.
      amount - How many of the variant to drop.
      transaction - The transaction this operation is part of.
      See Also:
      • PlayerEntity.dropItem(ItemStack, boolean, boolean)
    • getHandSlot

      SingleSlotStorage<ItemVariant> getHandSlot(net.minecraft.util.Hand hand)
      Return a wrapper around the current slot of the passed hand.