Class 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 java.lang.Object implements FixedItemInv.ModifiableFixedItemInv, GroupedItemInv, Saveable
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).-
Nested Class Summary
Nested classes/interfaces inherited from interface alexiil.mc.lib.attributes.item.AbstractItemInvView
AbstractItemInvView.DefaultChangeTracker
Nested classes/interfaces inherited from interface alexiil.mc.lib.attributes.item.FixedItemInv
FixedItemInv.CopyingFixedItemInv, FixedItemInv.ModifiableFixedItemInv
Nested classes/interfaces inherited from interface alexiil.mc.lib.attributes.item.GroupedItemInvView
GroupedItemInvView.ItemInvStatistic
-
Constructor Summary
Constructors Constructor Description DirectFixedItemInv(int slotCount)
-
Method Summary
Modifier and Type Method Description ListenerToken
addListener(InvMarkDirtyListener listener, ListenerRemovalToken removalToken)
Adds the given listener to this inventory, such thatInvMarkDirtyListener.onMarkDirty(AbstractItemInvView)
will be called every time that any stored stack is changed (either fromFixedItemInv.setInvStack(int, ItemStack, Simulation)
orFixedItemInv.ModifiableFixedItemInv.markDirty()
).ListenerToken
addListener(ItemInvAmountChangeListener listener, ListenerRemovalToken removalToken)
Adds the given listener to this inventory, such that theItemInvAmountChangeListener.onChange(GroupedItemInvView, ItemStack, int, int)
will be called every time that this inventory changes.net.minecraft.item.ItemStack
attemptExtraction(ItemFilter filter, int maxAmount, Simulation simulation)
net.minecraft.item.ItemStack
attemptInsertion(net.minecraft.item.ItemStack stack, Simulation simulation)
Inserts the given stack into this insertable, and returns the excess.net.minecraft.item.ItemStack
extract(int slot, int count)
Splits off the given amount from theItemStack
in the given slot.void
fromTag(net.minecraft.nbt.CompoundTag tag)
net.minecraft.item.ItemStack
get(int slot)
Deprecated.This used to be necessary in 0.4.x, but since 0.5.0getInvStack(int)
just returns the itemstack in the slot index.int
getChangeValue()
net.minecraft.item.ItemStack
getInvStack(int slot)
int
getSlotCount()
GroupedItemInvView.ItemInvStatistic
getStatistics(ItemFilter filter)
java.util.Set<net.minecraft.item.ItemStack>
getStoredStacks()
int
getTotalCapacity()
net.minecraft.item.ItemStack
insert(int slot, net.minecraft.item.ItemStack stack)
Tries to insert the given stack into the given slot.void
invalidateListeners()
Removes every listener currently registered to this inventory.boolean
isItemValidForSlot(int slot, net.minecraft.item.ItemStack stack)
Checks to see if the given stack is valid for a given slot.void
markDirty()
Informs this inventory that theItemStack
returned byFixedItemInv.ModifiableFixedItemInv.getInvStack(int)
has been changed.void
set(int slot, net.minecraft.item.ItemStack stack)
Deprecated.This used to be necessary in 0.4.x, but since 0.5.0 this is unnecessary.boolean
setInvStack(int slot, net.minecraft.item.ItemStack to, Simulation simulation)
Sets the stack in the given slot to the given stack.void
setOwnerListener(InvMarkDirtyListener ownerListener)
Sets the owner listener callback, which is never removed from the listener list wheninvalidateListeners()
is called.net.minecraft.nbt.CompoundTag
toTag()
net.minecraft.nbt.CompoundTag
toTag(net.minecraft.nbt.CompoundTag tag)
void
validateSlotIndex(int slot)
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface alexiil.mc.lib.attributes.item.FixedItemInv
createLimitedFixedInv, extractStack, forceSetInvStack, getExtractable, getGroupedInv, getInsertable, getMappedInv, getSlot, getSubInv, getTransferable, insertStack, modifySlot, slotIterable
Methods inherited from interface alexiil.mc.lib.attributes.item.FixedItemInv.ModifiableFixedItemInv
getFilterForSlot
Methods inherited from interface alexiil.mc.lib.attributes.item.FixedItemInvView
convertTo, getFixedView, getMaxAmount, offerSelfAsAttribute, stackIterable
Methods inherited from interface alexiil.mc.lib.attributes.item.GroupedItemInv
createLimitedGroupedInv, filtered
Methods inherited from interface alexiil.mc.lib.attributes.item.GroupedItemInvView
getAmount, getAmount, getCapacity, getGroupedView, getSpace, getStatistics, isEmpty
Methods inherited from interface alexiil.mc.lib.attributes.item.ItemExtractable
attemptAnyExtraction, couldExtractAnything, extract, extract, extract, getPureExtractable
Methods inherited from interface alexiil.mc.lib.attributes.item.ItemInsertable
getInsertionFilter, getPureInsertable, insert, offer, offer, wouldAccept, wouldPartiallyAccept
-
Constructor Details
-
DirectFixedItemInv
public DirectFixedItemInv(int slotCount)
-
-
Method Details
-
get
@Deprecated public final net.minecraft.item.ItemStack get(int slot)Deprecated.This used to be necessary in 0.4.x, but since 0.5.0getInvStack(int)
just returns the itemstack in the slot index. -
set
@Deprecated public final void set(int slot, net.minecraft.item.ItemStack stack)Deprecated.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 theItemStack
returned byFixedItemInv.ModifiableFixedItemInv.getInvStack(int)
has been changed.- Specified by:
markDirty
in interfaceFixedItemInv.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.CompoundTag toTag() -
toTag
public net.minecraft.nbt.CompoundTag toTag(net.minecraft.nbt.CompoundTag tag) -
fromTag
public void fromTag(net.minecraft.nbt.CompoundTag tag) -
getSlotCount
public int getSlotCount()- Specified by:
getSlotCount
in interfaceFixedItemInvView
- Returns:
- The number of slots in this inventory.
-
getInvStack
public net.minecraft.item.ItemStack getInvStack(int slot)- Specified by:
getInvStack
in interfaceFixedItemInv
- Specified by:
getInvStack
in interfaceFixedItemInv.ModifiableFixedItemInv
- Specified by:
getInvStack
in interfaceFixedItemInvView
- Parameters:
slot
- The slot index. Must be a value between 0 (inclusive) andFixedItemInvView.getSlotCount()
(exclusive) to be valid. (Like in arrays, lists, etc).- Returns:
- The
ItemStack
that is stored in thisFixedItemInv
. Changing this will always change this inventory. As such you must always callFixedItemInv.ModifiableFixedItemInv.markDirty()
orFixedItemInv.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 theItem
contained inItemStack
's, because callers can always modify any other properties (like count or NBT) themselves- Specified by:
isItemValidForSlot
in interfaceFixedItemInv
- Specified by:
isItemValidForSlot
in interfaceFixedItemInv.ModifiableFixedItemInv
- Specified by:
isItemValidForSlot
in interfaceFixedItemInvView
- Parameters:
slot
- The slot index. Must be a value between 0 (inclusive) andFixedItemInvView.getSlotCount()
(exclusive) to be valid. (Like in arrays, lists, etc).stack
- TheItemStack
to check. It's undefined what is returned if anempty
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 thatInvMarkDirtyListener.onMarkDirty(AbstractItemInvView)
will be called every time that any stored stack is changed (either fromFixedItemInv.setInvStack(int, ItemStack, Simulation)
orFixedItemInv.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 interfaceAbstractItemInvView
- Specified by:
addListener
in interfaceGroupedItemInvView
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
Sets the owner listener callback, which is never removed from the listener list wheninvalidateListeners()
is called. -
setInvStack
Description copied from interface:FixedItemInv
Sets the stack in the given slot to the given stack.- Specified by:
setInvStack
in interfaceFixedItemInv
- Specified by:
setInvStack
in interfaceFixedItemInv.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 byFixedItemInv.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 interfaceAbstractItemInvView
- 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 registeredInvMarkDirtyListener
.The default implementation returns an ever-increasing value.
-
getStoredStacks
public java.util.Set<net.minecraft.item.ItemStack> getStoredStacks()- Specified by:
getStoredStacks
in interfaceGroupedItemInvView
- Returns:
- a set containing all of the
ItemStack
's that are stored in the inventory. NOTE: This must return a set using one of theHash.Strategy
's inItemStackCollections
otherwise comparison methods won't work correctly!
-
getTotalCapacity
public int getTotalCapacity()- Specified by:
getTotalCapacity
in interfaceGroupedItemInvView
- 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)
overGroupedItemInvView.getStoredStacks()
!
-
getStatistics
- Specified by:
getStatistics
in interfaceGroupedItemInvView
- 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 theItemInvAmountChangeListener.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 nulltoken
.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 interfaceGroupedItemInvView
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 interfaceItemInsertable
- Parameters:
stack
- The incoming stack. Must not be modified by this call.simulation
- IfSimulation.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
- Specified by:
attemptExtraction
in interfaceItemExtractable
maxAmount
- The maximum number of items that can be extracted. Negative numbers throw an exception.simulation
- IfSimulation.SIMULATE
then this should return the same result that a call withSimulation.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 theItemStack
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.
-