Class FilteringStorage<T>
- Type Parameters:
T
- The type of the stored resources.
- All Implemented Interfaces:
Storage<T>
Storage
implementation that delegates every call to another storage,
except that it only allows insertion or extraction if canInsert(T)
or canExtract(T)
allows it respectively.
This can for example be used to wrap the internal storage of some device behind additional insertion or extraction checks.
If one of these two functions is overridden to always return false, implementors may also wish to override
supportsInsertion()
and/or supportsExtraction()
.-
Field Summary
-
Constructor Summary
ConstructorDescriptionFilteringStorage(Supplier<Storage<T>> backingStorage)
Deprecated.Create a new filtering storage, with a supplier for the backing storage.FilteringStorage(Storage<T> backingStorage)
Deprecated.Create a new filtering storage, with a fixed backing storage. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
canExtract(T resource)
Deprecated.Return true if extraction of the passed resource should be forwarded to the backing storage, or false if it should fail.protected boolean
Deprecated.Return true if insertion of the passed resource should be forwarded to the backing storage, or false if it should fail.@Nullable StorageView<T>
exactView(TransactionContext transaction, T resource)
Deprecated.Return a view over this storage, for a specific resource, ornull
if none is quickly available.long
extract(T resource, long maxAmount, TransactionContext transaction)
Deprecated.Try to extract up to some amount of a resource from this storage.long
Deprecated.Return an integer representing the current version of this storage instance to allow for fast change detection: if the version hasn't changed since the last time, and the storage instance is the same, the storage has the same contents.long
insert(T resource, long maxAmount, TransactionContext transaction)
Deprecated.Try to insert up to some amount of a resource into this storage.iterator(TransactionContext transaction)
Deprecated.Iterate through the contents of this storage, for the scope of the passed transaction.boolean
Deprecated.Return false if callingStorage.extract(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
will absolutely always return 0, or true otherwise or in doubt.boolean
Deprecated.Return false if callingStorage.insert(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
will absolutely always return 0, or true otherwise or in doubt.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface net.fabricmc.fabric.api.transfer.v1.storage.Storage
iterable, simulateExtract, simulateInsert
-
Field Details
-
backingStorage
Deprecated.
-
-
Constructor Details
-
FilteringStorage
Deprecated.Create a new filtering storage, with a fixed backing storage. -
FilteringStorage
Deprecated.Create a new filtering storage, with a supplier for the backing storage. This allows the backing storage to change without having to create a new filtering storage. If that is unnecessary, the other overload can be used for convenience.
-
-
Method Details
-
canInsert
Deprecated.Return true if insertion of the passed resource should be forwarded to the backing storage, or false if it should fail. -
canExtract
Deprecated.Return true if extraction of the passed resource should be forwarded to the backing storage, or false if it should fail. -
supportsInsertion
public boolean supportsInsertion()Deprecated.Description copied from interface:Storage
Return false if callingStorage.insert(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
will absolutely always return 0, or true otherwise or in doubt.Note: This function is meant to be used by pipes or other devices that can transfer resources to know if they should interact with this storage at all.
- Specified by:
supportsInsertion
in interfaceStorage<T>
-
insert
Deprecated.Description copied from interface:Storage
Try to insert up to some amount of a resource into this storage.- Specified by:
insert
in interfaceStorage<T>
- 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.
-
supportsExtraction
public boolean supportsExtraction()Deprecated.Description copied from interface:Storage
Return false if callingStorage.extract(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
will absolutely always return 0, or true otherwise or in doubt.Note: This function is meant to be used by pipes or other devices that can transfer resources to know if they should interact with this storage at all.
- Specified by:
supportsExtraction
in interfaceStorage<T>
-
extract
Deprecated.Description copied from interface:Storage
Try to extract up to some amount of a resource from this storage.- Specified by:
extract
in interfaceStorage<T>
- Parameters:
resource
- The resource to extract. May not be blank.maxAmount
- The maximum amount of resource to extract. May not be negative.transaction
- The transaction this operation is part of.- Returns:
- A nonnegative integer not greater than maxAmount: the amount that was extracted.
-
iterator
Deprecated.Description copied from interface:Storage
Iterate through the contents of this storage, for the scope of the passed transaction. Every visitedStorageView
represents a stored resource and an amount. The iterator doesn't guarantee that a single resource only occurs once during an iteration.The returned iterator and any view it returns are only valid for the scope of to the passed transaction. They should not be used once that transaction is closed.
More precisely, as soon as the transaction is closed,
hasNext()
must returnfalse
, and any call tonext()
must throw aNoSuchElementException
.Storage.insert(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
andStorage.extract(T, long, net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext)
may be called safely during iteration. Extractions should be visible to an open iterator, but insertions are not required to. In particular, inventories with a fixed amount of slots may wish to make insertions visible to iterators, but inventories with a dynamic or very large amount of slots should not do that to ensure timely termination of the iteration. -
exactView
Deprecated.Description copied from interface:Storage
Return a view over this storage, for a specific resource, ornull
if none is quickly available.This function should only return a non-null view if this storage can provide it quickly, for example with a hashmap lookup. If returning the requested view would require iteration through a potentially large number of views,
null
should be returned instead.The returned view is tied to the passed transaction, and may never be used once the passed transaction has been closed.
- Specified by:
exactView
in interfaceStorage<T>
- Parameters:
transaction
- The transaction to which the scope of the returned storage view is tied.resource
- The resource for which a storage view is requested. May be blank, for example to estimate capacity.- Returns:
- A view over this storage for the passed resource, or
null
if none is quickly available.
-
getVersion
public long getVersion()Deprecated.Description copied from interface:Storage
Return an integer representing the current version of this storage instance to allow for fast change detection: if the version hasn't changed since the last time, and the storage instance is the same, the storage has the same contents. This can be used to avoid re-scanning the contents of the storage, which could be an expensive operation. It may be used like that:// Store storage and version: Storage<?> firstStorage = // ... long firstVersion = firstStorage.getVersion(); // Later, check if the secondStorage is the unchanged firstStorage: Storage<?> secondStorage = // ... long secondVersion = secondStorage.getVersion(); // We must check firstStorage == secondStorage first, otherwise versions may not be compared. if (firstStorage == secondStorage && firstVersion == secondVersion) { // storage contents are the same. } else { // storage contents might have changed. }
The version must change if the state of the storage has changed, generally after a direct modification, or at the end of a modifying transaction. The version may also change even if the state of the storage hasn't changed.
It is not valid to call this during a transaction, and implementations are encouraged to throw an exception if that happens.
- Specified by:
getVersion
in interfaceStorage<T>
-