Class FullFixedItemInv

java.lang.Object
alexiil.mc.lib.attributes.item.impl.FullFixedItemInv
All Implemented Interfaces:
Convertible, AbstractItemInvView, FixedItemInv, FixedItemInv.CopyingFixedItemInv, FixedItemInvView, ItemExtractable, ItemInsertable, ItemTransferable, LimitedConsumer<net.minecraft.item.ItemStack>, Saveable
Direct Known Subclasses:
SimpleFixedItemInv

public class FullFixedItemInv extends Object implements FixedItemInv.CopyingFixedItemInv, ItemTransferable, Saveable
A simple, extendible, fixed size item inventory that supports all of the features that FixedItemInv.CopyingFixedItemInv exposes.

Extending classes should take care to override getFilterForSlot(int) if they also override isItemValidForSlot(int, ItemStack).

  • Field Details

    • slots

      protected final net.minecraft.util.collection.DefaultedList<net.minecraft.item.ItemStack> slots
  • Constructor Details

    • FullFixedItemInv

      public FullFixedItemInv(int invSize)
  • Method Details

    • getSlotCount

      public final int getSlotCount()
      Specified by:
      getSlotCount in interface FixedItemInvView
      Returns:
      The number of slots in this inventory.
    • getUnmodifiableInvStack

      public net.minecraft.item.ItemStack getUnmodifiableInvStack(int slot)
      Specified by:
      getUnmodifiableInvStack in interface FixedItemInv.CopyingFixedItemInv
      Returns:
      The ItemStack that is held by this inventory. Modifying the returned ItemStack in any way will (most likely - depending on the implementation) throw an exception (at some point).
    • isItemValidForSlot

      public boolean isItemValidForSlot(int slot, net.minecraft.item.ItemStack item)
      Description copied from interface: FixedItemInv
      Checks to see if the given stack would be valid for this slot, ignoring the current contents. Note that this method should adhere to the requirements of ItemFilter.matches(ItemStack), so this must not care about the ItemStack.getCount(). Passing empty stacks will generally not return useful results.

      Note that just because an ItemStack passes this validity test, and is stackable with the current stack, does not mean that you can insert the stack into this inventory..

      Specified by:
      isItemValidForSlot in interface FixedItemInv
      Specified by:
      isItemValidForSlot in interface FixedItemInvView
      Parameters:
      slot - The slot index. Must be a value between 0 (inclusive) and FixedItemInvView.getSlotCount() (exclusive) to be valid. (Like in arrays, lists, etc).
      item - The ItemStack to check. It's undefined what is returned if an empty stack is passed in, but it is not generally expected to be useful.
    • getFilterForSlot

      public ItemFilter getFilterForSlot(int slot)
      Description copied from interface: FixedItemInvView
      Exposes FixedItemInvView.isItemValidForSlot(int, ItemStack) as a (potentially) readable filter.
      Specified by:
      getFilterForSlot in interface FixedItemInvView
      Parameters:
      slot - The slot index. Must be a value between 0 (inclusive) and FixedItemInvView.getSlotCount() (exclusive) to be valid. (Like in arrays, lists, etc).
      Returns:
      An ItemFilter for what may be present in this slot. If this slot is filtered by an ItemFilter internally then it is highly recommended that this be overridden to return that filter rather than the default opaque wrapper around FixedItemInvView.isItemValidForSlot(int, ItemStack).
    • getGroupedInv

      public GroupedItemInv getGroupedInv()
      Specified by:
      getGroupedInv in interface FixedItemInv
      Specified by:
      getGroupedInv in interface FixedItemInvView
      Returns:
      A GroupedItemInv for this inventory. The returned value must always be valid for the lifetime of this FixedItemInv object. (In other words it must always be valid to cache this returned value and use it alongside a cached instance of this object).
    • getChangeValue

      public int getChangeValue()
      Specified by:
      getChangeValue in interface AbstractItemInvView
      Returns:
      A value that indicates whether an inventory might have changed if it differs from the last value returned. This number doesn't have to start at 0, but it must change every time that the inventory is changed, although it can change even without any observable changes to this inventory.

      Inventories that don't support this might increment the change number every time that this is called - so you should never write a loop that depends on the returned value settling down on a particular value.

      Inventories that support listeners highly encouraged to support this - by definition if an inventory knows when it changed then it should be able to count the number of changes. It is also implied that any changes to this value will also invoke every registered InvMarkDirtyListener.

      The default implementation returns an ever-increasing value.

    • addListener

      public ListenerToken addListener(ItemInvSlotChangeListener listener, ListenerRemovalToken removalToken)
      Description copied from interface: FixedItemInv.CopyingFixedItemInv
      Adds the given listener to this inventory, such that the ItemInvSlotChangeListener.onChange(FixedItemInvView, int, ItemStack, ItemStack) will be called every time that this inventory changes. However if this inventory doesn't support listeners then this will return a null token.

      The default implementation refuses to accept any listeners, but implementations are highly encouraged to override this if they are able to!

      Specified by:
      addListener in interface FixedItemInv.CopyingFixedItemInv
      removalToken - A token that will be called whenever the given listener is removed from this inventory (or if this inventory itself is unloaded or otherwise invalidated).
      Returns:
      A token that represents the listener, or null if the listener could not be added.
    • setOwnerListener

      public void setOwnerListener(ItemInvSlotChangeListener ownerListener)
      Sets the owner listener callback, which is never removed from the listener list when invalidateListeners() is called.
    • invalidateListeners

      public void invalidateListeners()
    • fireSlotChange

      protected final void fireSlotChange(int slot, net.minecraft.item.ItemStack previous, net.minecraft.item.ItemStack current)
    • setInvStack

      public boolean setInvStack(int slot, net.minecraft.item.ItemStack to, Simulation simulation)
      Description copied from interface: FixedItemInv
      Sets the stack in the given slot to the given stack.
      Specified by:
      setInvStack in interface FixedItemInv
      to - The new ItemStack. It is not defined if you are allowed to modify this or not.
      Returns:
      True if the modification was allowed, false otherwise. (For example if the given stack doesn't pass the FixedItemInvView.isItemValidForSlot(int, ItemStack) test).
    • toTag

      public final net.minecraft.nbt.NbtCompound toTag()
      Specified by:
      toTag in interface Saveable
    • toTag

      public net.minecraft.nbt.NbtCompound toTag(net.minecraft.nbt.NbtCompound tag)
      Specified by:
      toTag in interface Saveable
    • fromTag

      public void fromTag(net.minecraft.nbt.NbtCompound tag)
      Specified by:
      fromTag in interface Saveable
    • attemptInsertion

      public net.minecraft.item.ItemStack attemptInsertion(net.minecraft.item.ItemStack stack, Simulation simulation)
      Description copied from interface: ItemInsertable
      Inserts the given stack into this insertable, and returns the excess.
      Specified by:
      attemptInsertion in interface ItemInsertable
      Parameters:
      stack - The incoming stack. Must not be modified by this call.
      simulation - If Simulation.SIMULATE then this shouldn't modify anything.
      Returns:
      the excess ItemStack that wasn't accepted. This will be independent of this insertable, however it might be the given stack instead of a completely new object.
    • getInsertionFilter

      public ItemFilter getInsertionFilter()
      Description copied from interface: ItemInsertable
      Returns an ItemFilter to determine if ItemInsertable.attemptInsertion(ItemStack, Simulation) will accept a stack. The default implementation is a call to attemptInsertion(stack, Simulation.SIMULATE), and it is only useful to override this if the resulting filter contains information that might be usable by the caller.
      Specified by:
      getInsertionFilter in interface ItemInsertable
      Returns:
      A filter to determine if ItemInsertable.attemptInsertion(ItemStack, Simulation) will accept the entirety of a given stack.
    • attemptExtraction

      public net.minecraft.item.ItemStack attemptExtraction(ItemFilter filter, int maxAmount, Simulation simulation)
      Description copied from interface: ItemExtractable
      Attempt to extract *any* ItemStack from this that matches the given ItemFilter.
      Specified by:
      attemptExtraction in interface ItemExtractable
      maxAmount - The maximum number of items that can be extracted. Negative numbers throw an exception.
      simulation - If Simulation.SIMULATE then this should return the same result that a call with Simulation.ACTION would do, but without modifying anything else.
      Returns:
      A new, independent ItemStack that was extracted.
    • attemptAnyExtraction

      public net.minecraft.item.ItemStack attemptAnyExtraction(int maxAmount, Simulation simulation)
      Description copied from interface: ItemExtractable
      Specified by:
      attemptAnyExtraction in interface ItemExtractable