Class DirectFixedItemInv

java.lang.Object
alexiil.mc.lib.attributes.item.impl.DirectFixedItemInv
All Implemented Interfaces:
Convertible, AbstractItemInvView, FixedItemInv, FixedItemInv.ModifiableFixedItemInv, FixedItemInvView, GroupedItemInv, GroupedItemInvView, ItemExtractable, ItemInsertable, ItemTransferable, LimitedConsumer<net.minecraft.item.ItemStack>, Saveable

public class DirectFixedItemInv extends Object implements FixedItemInv.ModifiableFixedItemInv, GroupedItemInv, Saveable
A simple implementation of FixedItemInv.ModifiableFixedItemInv that supports all of the features that the interface exposes. For simplicities sake this also implements GroupedItemInv, however none of the grouped methods run in O(1).
  • Constructor Details

    • DirectFixedItemInv

      public DirectFixedItemInv(int slotCount)
  • Method Details

    • get

      @Deprecated(since="0.5.0", forRemoval=true) public final net.minecraft.item.ItemStack get(int slot)
      Deprecated, for removal: This API element is subject to removal in a future version.
      This used to be necessary in 0.4.x, but since 0.5.0 getInvStack(int) just returns the itemstack in the slot index.
    • set

      @Deprecated(since="0.5.0", forRemoval=true) public final void set(int slot, net.minecraft.item.ItemStack stack)
      Deprecated, for removal: This API element is subject to removal in a future version.
      This used to be necessary in 0.4.x, but since 0.5.0 this is unnecessary.
    • markDirty

      public final void markDirty()
      Description copied from interface: FixedItemInv.ModifiableFixedItemInv
      Informs this inventory that the ItemStack returned by FixedItemInv.ModifiableFixedItemInv.getInvStack(int) has been changed.
      Specified by:
      markDirty in interface FixedItemInv.ModifiableFixedItemInv
    • invalidateListeners

      public final void invalidateListeners()
      Removes every listener currently registered to this inventory.
    • validateSlotIndex

      public void validateSlotIndex(int slot)
    • 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
    • getSlotCount

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

      public net.minecraft.item.ItemStack getInvStack(int slot)
      Specified by:
      getInvStack in interface FixedItemInv
      Specified by:
      getInvStack in interface FixedItemInv.ModifiableFixedItemInv
      Specified by:
      getInvStack 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:
      The ItemStack that is stored in this FixedItemInv. Changing this will always change this inventory. As such you must always call FixedItemInv.ModifiableFixedItemInv.markDirty() or FixedItemInv.ModifiableFixedItemInv.setInvStack(int, ItemStack, Simulation) after you have finished modifying it.
    • isItemValidForSlot

      public boolean isItemValidForSlot(int slot, net.minecraft.item.ItemStack stack)
      Description copied from interface: FixedItemInv.ModifiableFixedItemInv
      Checks to see if the given stack is valid for a given slot. This ignores any current stacks in the slot. Note that this should only compare the Item contained in ItemStack's, because callers can always modify any other properties (like count or NBT) themselves
      Specified by:
      isItemValidForSlot in interface FixedItemInv
      Specified by:
      isItemValidForSlot in interface FixedItemInv.ModifiableFixedItemInv
      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).
      stack - 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.
    • addListener

      public final ListenerToken addListener(InvMarkDirtyListener listener, ListenerRemovalToken removalToken)
      Description copied from interface: AbstractItemInvView
      Adds the given listener to this inventory, such that InvMarkDirtyListener.onMarkDirty(AbstractItemInvView) will be called every time that any stored stack is changed (either from FixedItemInv.setInvStack(int, ItemStack, Simulation) or FixedItemInv.ModifiableFixedItemInv.markDirty()).

      If the listener is registered (and thus this returns null) then it implies that AbstractItemInvView.getChangeValue() will change every time that the given listener is invoked, always just-before it is invoked.

      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 AbstractItemInvView
      Specified by:
      addListener in interface GroupedItemInvView
      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(InvMarkDirtyListener ownerListener)
      Sets the owner listener callback, which is never removed from the listener list when invalidateListeners() is called.
    • 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
      Specified by:
      setInvStack in interface FixedItemInv.ModifiableFixedItemInv
      to - The new stack to set this to. If this is identically equal (with ==) to the stack held in this inventory (so it was returned by FixedItemInv.ModifiableFixedItemInv.getInvStack(int)) then this will return true.
      Returns:
      True if the modification was allowed, false otherwise. (For example if the given stack doesn't pass the FixedItemInvView.isItemValidForSlot(int, ItemStack) test).
    • 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.

    • getStoredStacks

      public Set<net.minecraft.item.ItemStack> getStoredStacks()
      Specified by:
      getStoredStacks in interface GroupedItemInvView
      Returns:
      a set containing all of the ItemStack's that are stored in the inventory. NOTE: This must return a set using one of the Hash.Strategy's in ItemStackCollections otherwise comparison methods won't work correctly!
    • getTotalCapacity

      public int getTotalCapacity()
      Specified by:
      getTotalCapacity in interface GroupedItemInvView
      Returns:
      The total capacity for every ItemStack that can be stored in this inventory.

      NOTE: This value might not be equal to the sum of GroupedItemInvView.getCapacity(ItemStack) over GroupedItemInvView.getStoredStacks()!

    • getStatistics

      public GroupedItemInvView.ItemInvStatistic getStatistics(ItemFilter filter)
      Specified by:
      getStatistics in interface GroupedItemInvView
      Parameters:
      filter - The filter to check on.
      Returns:
      Statistics about the currently stored amount, capacity, and space for everything that matches the given filter.
    • addListener

      public ListenerToken addListener(ItemInvAmountChangeListener listener, ListenerRemovalToken removalToken)
      Description copied from interface: GroupedItemInvView
      Adds the given listener to this inventory, such that the ItemInvAmountChangeListener.onChange(GroupedItemInvView, ItemStack, int, int) 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 GroupedItemInvView
      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.
    • 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.
    • 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.
    • extract

      public net.minecraft.item.ItemStack extract(int slot, int count)
      Splits off the given amount from the ItemStack in the given slot.
    • insert

      public net.minecraft.item.ItemStack insert(int slot, net.minecraft.item.ItemStack stack)
      Tries to insert the given stack into the given slot.
      Returns:
      The result that couldn't be inserted.