Interface Inventory
- All Superinterfaces:
Clearable
- All Known Subinterfaces:
Hopper,LootableInventory,RecipeInputInventory,SidedInventory,SingleStackInventory,VehicleInventory
- All Known Implementing Classes:
AbstractFurnaceBlockEntity,BarrelBlockEntity,BlastFurnaceBlockEntity,BrewingStandBlockEntity,ChestBlockEntity,ChestBoatEntity,ChestMinecartEntity,ChiseledBookshelfBlockEntity,ComposterBlock.ComposterInventory,ComposterBlock.DummyInventory,ComposterBlock.FullComposterInventory,CrafterBlockEntity,CraftingInventory,CraftingResultInventory,DecoratedPotBlockEntity,DispenserBlockEntity,DoubleInventory,DropperBlockEntity,EnderChestInventory,FurnaceBlockEntity,HopperBlockEntity,HopperMinecartEntity,JukeboxBlockEntity,LockableContainerBlockEntity,LootableContainerBlockEntity,MerchantInventory,PlayerInventory,ShulkerBoxBlockEntity,SimpleInventory,SmokerBlockEntity,StorageMinecartEntity,TrappedChestBlockEntity
ItemStacks. In general, when a player stores an item stack
and can retrieve the same item stack back, that stack is stored in an
inventory. The inventory can be persistent, like chests or donkeys, or it can
be created without backing storage, like the slots in crafting tables.
It is the responsibility of the user to sync or save the contents of the
inventory.
Entities and block entities that can hold item stacks generally
implement this interface themselves, allowing hopper interactions. Call PlayerEntity.getInventory() to get the player's
inventory (including armors and offhand).
An inventory has a fixed size, and each element in the inventory is identified
by the slot number, which is between zero and size() - 1 like arrays.
When a slot of the inventory is empty, it should be filled with ItemStack.EMPTY.
An implementation of this interface should have a field of DefaultedList.ofSize(int, Object) with the second
argument as ItemStack.EMPTY, and implement methods by delegating to the
list. The list itself should not be modified directly, and the list's size
should remain constant throughout the lifetime of the inventory.
Implementations must call markDirty() when the inventory is modified.
- See Also:
- API Note:
- If an inventory is needed for temporary storage, use
SimpleInventory. For persistent storage in entities or block entities, useVehicleInventoryorLockableContainerBlockEntity. - Mappings:
Namespace Name official bjuintermediary net/minecraft/class_1263named net/minecraft/inventory/Inventory
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final int -
Method Summary
Modifier and TypeMethodDescriptionstatic booleancanPlayerUse(BlockEntity blockEntity, PlayerEntity player) Returns whetherplayercan use thisblockEntity.static booleancanPlayerUse(BlockEntity blockEntity, PlayerEntity player, int range) Returns whetherplayercan use thisblockEntity.booleancanPlayerUse(PlayerEntity player) Returns whetherplayercan use this inventory.default booleancanTransferTo(Inventory hopperInventory, int slot, ItemStack stack) Returns whether a hopper can transferstackfromslotto the hopper.default booleancontainsAny(Predicate<ItemStack> predicate) Returns whether this inventory contains any of the stacks matchingpredicate.default booleancontainsAny(Set<Item> items) Returns whether this inventory contains any ofitems.default intReturns the number of timesitemoccurs in this inventory across all stored stacks.default intReturns the maximum number of items a stack can contain when placed inside this inventory.getStack(int slot) Returns the stack currently stored atslot.booleanisEmpty()Returns whether the inventory consists entirely of empty item stacks.default booleanReturns whetherstackis valid for theslot.voidMarks the inventory as modified.default voidonClose(PlayerEntity player) Called when the inventory is closed.default voidonOpen(PlayerEntity player) Called when the inventory is opened.removeStack(int slot) Removes the stack currently stored atslot.removeStack(int slot, int amount) Removes a specific number of items fromslot.voidSets the stack stored atslottostack.intsize()Returns the size of the inventory.
-
Field Details
-
MAX_COUNT_PER_STACK
static final int MAX_COUNT_PER_STACK- See Also:
- Mappings:
Namespace Name Mixin selector official n_Lbju;n_:Iintermediary field_29952Lnet/minecraft/class_1263;field_29952:Inamed MAX_COUNT_PER_STACKLnet/minecraft/inventory/Inventory;MAX_COUNT_PER_STACK:I
-
field_42619
static final int field_42619- See Also:
- Mappings:
Namespace Name Mixin selector official o_Lbju;o_:Iintermediary field_42619Lnet/minecraft/class_1263;field_42619:Inamed field_42619Lnet/minecraft/inventory/Inventory;field_42619:I
-
-
Method Details
-
size
int size()Returns the size of the inventory.The inventory should support the slot ID from
0tosize() - 1. This should remain constant throughout the inventory's lifetime.- Returns:
- the size of the inventory
- Mappings:
Namespace Name Mixin selector official bLbju;b()Iintermediary method_5439Lnet/minecraft/class_1263;method_5439()Inamed sizeLnet/minecraft/inventory/Inventory;size()I
-
isEmpty
boolean isEmpty()Returns whether the inventory consists entirely of empty item stacks.- Returns:
- whether the inventory consists entirely of empty item stacks
- Mappings:
Namespace Name Mixin selector official ai_Lbju;ai_()Zintermediary method_5442Lnet/minecraft/class_1263;method_5442()Znamed isEmptyLnet/minecraft/inventory/Inventory;isEmpty()Z
-
getStack
Returns the stack currently stored atslot.If the slot is empty, or is outside the bounds of this inventory, this returns
ItemStack.EMPTY.- Returns:
- the stack currently stored at
slot - Mappings:
Namespace Name Mixin selector official aLbju;a(I)Lcmy;intermediary method_5438Lnet/minecraft/class_1263;method_5438(I)Lnet/minecraft/class_1799;named getStackLnet/minecraft/inventory/Inventory;getStack(I)Lnet/minecraft/item/ItemStack;
-
removeStack
Removes a specific number of items fromslot.- Returns:
- the removed items as a stack
- Mappings:
Namespace Name Mixin selector official aLbju;a(II)Lcmy;intermediary method_5434Lnet/minecraft/class_1263;method_5434(II)Lnet/minecraft/class_1799;named removeStackLnet/minecraft/inventory/Inventory;removeStack(II)Lnet/minecraft/item/ItemStack;
-
removeStack
Removes the stack currently stored atslot.- Returns:
- the stack previously stored at the indicated slot
- Mappings:
Namespace Name Mixin selector official bLbju;b(I)Lcmy;intermediary method_5441Lnet/minecraft/class_1263;method_5441(I)Lnet/minecraft/class_1799;named removeStackLnet/minecraft/inventory/Inventory;removeStack(I)Lnet/minecraft/item/ItemStack;
-
setStack
Sets the stack stored atslottostack.- Mappings:
Namespace Name Mixin selector official aLbju;a(ILcmy;)Vintermediary method_5447Lnet/minecraft/class_1263;method_5447(ILnet/minecraft/class_1799;)Vnamed setStackLnet/minecraft/inventory/Inventory;setStack(ILnet/minecraft/item/ItemStack;)V
-
getMaxCountPerStack
default int getMaxCountPerStack()Returns the maximum number of items a stack can contain when placed inside this inventory.No slots may have more than this number of items. It is effectively the stacking limit for this inventory's slots.
- Returns:
- the maximum number of items a stack can contain when placed inside this inventory
- Mappings:
Namespace Name Mixin selector official ak_Lbju;ak_()Iintermediary method_5444Lnet/minecraft/class_1263;method_5444()Inamed getMaxCountPerStackLnet/minecraft/inventory/Inventory;getMaxCountPerStack()I
-
markDirty
void markDirty()Marks the inventory as modified. Implementations should call this method every time the inventory is changed in any way.- See Also:
- API Note:
- Implementations should mark the inventory for synchronization or
saving in this method. Since this is called frequently, it is not recommended to
synchronize or save the inventory directly in this method. If this inventory is
implemented in a block entity, then it should always call
super.markDirty();to ensure the block entity gets saved. - Mappings:
Namespace Name Mixin selector official eLbju;e()Vintermediary method_5431Lnet/minecraft/class_1263;method_5431()Vnamed markDirtyLnet/minecraft/inventory/Inventory;markDirty()V
-
canPlayerUse
Returns whetherplayercan use this inventory.This is called by
ScreenHandler.canUse(net.minecraft.screen.ScreenHandlerContext, net.minecraft.entity.player.PlayerEntity, net.minecraft.block.Block).- Returns:
- whether
playercan use this inventory - See Also:
- API Note:
- Implementations should check the distance between the inventory
holder and
player. For convenience, this interface offers two methods used by block entities to implement this check. - Mappings:
Namespace Name Mixin selector official aLbju;a(Lcfi;)Zintermediary method_5443Lnet/minecraft/class_1263;method_5443(Lnet/minecraft/class_1657;)Znamed canPlayerUseLnet/minecraft/inventory/Inventory;canPlayerUse(Lnet/minecraft/entity/player/PlayerEntity;)Z
-
onOpen
Called when the inventory is opened. Specifically, this is called inside theScreenHandlerconstructor. This does nothing by default.The method is called in both the client and the server. However, because clientside screen handler is created with a
SimpleInventory, other implementations can (and the vanilla code does) assume that the method is called in the server.- Mappings:
Namespace Name Mixin selector official d_Lbju;d_(Lcfi;)Vintermediary method_5435Lnet/minecraft/class_1263;method_5435(Lnet/minecraft/class_1657;)Vnamed onOpenLnet/minecraft/inventory/Inventory;onOpen(Lnet/minecraft/entity/player/PlayerEntity;)V
-
onClose
Called when the inventory is closed. Specifically, this is called insideScreenHandler.onClosed(net.minecraft.entity.player.PlayerEntity). This does nothing by default.The method is called in both the client and the server. However, because clientside screen handler is created with a
SimpleInventory, other implementations can (and the vanilla code does) assume that the method is called in the server.- Mappings:
Namespace Name Mixin selector official cLbju;c(Lcfi;)Vintermediary method_5432Lnet/minecraft/class_1263;method_5432(Lnet/minecraft/class_1657;)Vnamed onCloseLnet/minecraft/inventory/Inventory;onClose(Lnet/minecraft/entity/player/PlayerEntity;)V
-
isValid
Returns whetherstackis valid for theslot.Implementations can, for example, use this to check whether the item is in a specific tag. This returns
trueby default.- Returns:
- whether
stackis valid for theslot - Mappings:
Namespace Name Mixin selector official bLbju;b(ILcmy;)Zintermediary method_5437Lnet/minecraft/class_1263;method_5437(ILnet/minecraft/class_1799;)Znamed isValidLnet/minecraft/inventory/Inventory;isValid(ILnet/minecraft/item/ItemStack;)Z
-
canTransferTo
Returns whether a hopper can transferstackfromslotto the hopper.This returns
trueby default.- Returns:
- whether a hopper can transfer
stackfromslotto the hopper - Mappings:
Namespace Name Mixin selector official aLbju;a(Lbju;ILcmy;)Zintermediary method_49104Lnet/minecraft/class_1263;method_49104(Lnet/minecraft/class_1263;ILnet/minecraft/class_1799;)Znamed canTransferToLnet/minecraft/inventory/Inventory;canTransferTo(Lnet/minecraft/inventory/Inventory;ILnet/minecraft/item/ItemStack;)Z
-
count
Returns the number of timesitemoccurs in this inventory across all stored stacks.- Returns:
- the number of times
itemoccurs in this inventory across all stored stacks - Mappings:
Namespace Name Mixin selector official a_Lbju;a_(Lcmt;)Iintermediary method_18861Lnet/minecraft/class_1263;method_18861(Lnet/minecraft/class_1792;)Inamed countLnet/minecraft/inventory/Inventory;count(Lnet/minecraft/item/Item;)I
-
containsAny
Returns whether this inventory contains any ofitems.- Returns:
- whether this inventory contains any of
items - See Also:
- Mappings:
Namespace Name Mixin selector official aLbju;a(Ljava/util/Set;)Zintermediary method_18862Lnet/minecraft/class_1263;method_18862(Ljava/util/Set;)Znamed containsAnyLnet/minecraft/inventory/Inventory;containsAny(Ljava/util/Set;)Z
-
containsAny
Returns whether this inventory contains any of the stacks matchingpredicate.- Returns:
- whether this inventory contains any of the stacks matching
predicate - See Also:
- Mappings:
Namespace Name Mixin selector official a_Lbju;a_(Ljava/util/function/Predicate;)Zintermediary method_43256Lnet/minecraft/class_1263;method_43256(Ljava/util/function/Predicate;)Znamed containsAnyLnet/minecraft/inventory/Inventory;containsAny(Ljava/util/function/Predicate;)Z
-
canPlayerUse
Returns whetherplayercan use thisblockEntity.- Returns:
- whether
playercan use thisblockEntity - See Also:
- API Note:
- This is used by block entities to implement
canPlayerUse(PlayerEntity). - Implementation Note:
- This method checks whether the given block entity exists and whether the player is within 8 blocks of the block entity.
- Mappings:
Namespace Name Mixin selector official aLbju;a(Ldgv;Lcfi;)Zintermediary method_49105Lnet/minecraft/class_1263;method_49105(Lnet/minecraft/class_2586;Lnet/minecraft/class_1657;)Znamed canPlayerUseLnet/minecraft/inventory/Inventory;canPlayerUse(Lnet/minecraft/block/entity/BlockEntity;Lnet/minecraft/entity/player/PlayerEntity;)Z
-
canPlayerUse
Returns whetherplayercan use thisblockEntity.- Returns:
- whether
playercan use thisblockEntity - See Also:
- API Note:
- This is used by block entities to implement
canPlayerUse(PlayerEntity). - Implementation Note:
- This method checks whether the given block entity exists and whether
the player is within
rangeblocks of the block entity. - Mappings:
Namespace Name Mixin selector official aLbju;a(Ldgv;Lcfi;I)Zintermediary method_49106Lnet/minecraft/class_1263;method_49106(Lnet/minecraft/class_2586;Lnet/minecraft/class_1657;I)Znamed canPlayerUseLnet/minecraft/inventory/Inventory;canPlayerUse(Lnet/minecraft/block/entity/BlockEntity;Lnet/minecraft/entity/player/PlayerEntity;I)Z
-