Interface IIngredientComponentStorage<T,M>
- Type Parameters:
T
- The instance type.M
- The matching condition parameter, may be Void. Instances MUST properly implement the equals method.
- All Superinterfaces:
Iterable<T>
- All Known Subinterfaces:
IIngredientComponentStorageSlotted<T,
M>
- All Known Implementing Classes:
IngredientComponentStorageEmpty
,IngredientComponentStorageSlottedEmpty
,IngredientComponentStorageWrapperHandlerEnergyStorage.ComponentStorageWrapper
,IngredientComponentStorageWrapperHandlerFluidStack.ComponentStorageWrapper
,IngredientComponentStorageWrapperHandlerItemStack.ComponentStorageWrapper
,IngredientComponentStorageWrapperHandlerItemStack.ComponentStorageWrapperCombined
,IngredientComponentStorageWrapperHandlerItemStackSlotless.ComponentStorageWrapper
A minimal storage for a type of ingredient component.
By not taking into account slots, the storage provider instead of the consumer
is responsible for providing an efficient insertion and extraction algorithm.
The is interface defines no requirements on how instances must be stored internally.
For example, an implementing storage could combine internally several instances together
that are equal to each other and take the sum of their quantities.
Note: The storage provider MUST ensure deterministic behaviour for extraction and insertion.
For example, the three first returned ingredients hereafter must equal each other.
ingredient1 = insert(myIngredient, true); ingredient2 = insert(myIngredient, true); ingredient3 = insert(myIngredient, false); ingredient4 = insert(myIngredient, true); // Can be different againThe same applies to extraction. This should not be used as a capability, instead the
IIngredientComponentStorageHandler
capability should be used,
as this can hold storage for different ingredient components.-
Method Summary
Modifier and TypeMethodDescriptionextract
(long maxQuantity, boolean simulate) Extract any ingredient, but the given maximum amount from the storage.Extract an ingredient matching the given prototype from the storage.long
Inserts an ingredient into the storage and return the remainder.iterator()
Get all ingredients in this storage.Find all ingredients matching the given prototype from the storage.Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Method Details
-
getComponent
IngredientComponent<T,M> getComponent()- Returns:
- The ingredient component type this storage applies to.
-
iterator
Get all ingredients in this storage. -
iterator
Find all ingredients matching the given prototype from the storage. Calling this method will not modify the storage in any way. Results from this method MUST NOT be modified.- Parameters:
prototype
- The ingredient to search for.matchCondition
- The flags to compare the given prototype by according toIngredientComponent.getMatcher()
.- Returns:
- An iterator over ingredients that match the given prototype, which may potentially be empty.
-
getMaxQuantity
long getMaxQuantity()- Returns:
- The maximum allowed quantity over all instances.
-
insert
Inserts an ingredient into the storage and return the remainder. The ingredient should not be modified in this function!- Parameters:
ingredient
- Ingredient to insert.simulate
- If true, the insertion is only simulated.- Returns:
- The remaining ingredient that was not inserted (if the entire ingredient is accepted,
then return
IIngredientMatcher.getEmptyInstance()
). May be the same as the input ingredient if unchanged, otherwise a new ingredient.
-
extract
Extract an ingredient matching the given prototype from the storage. Note that only the extracted ingredient must match the prototype under the given condition. Internally, ingredients can be combined and matched in any way. For example, an exact match could be produced by combining several ingredients. If the primary quantifier (as identified byIngredientComponent.getPrimaryQuantifier()
) IS NOT part of the match condition, then the quantity of the given prototype MUST be interpreted as the maximum quantity that must be extracted. If the primary quantifier (as identified byIngredientComponent.getPrimaryQuantifier()
) IS part of the match condition, then the quantity of the given prototype MUST be interpreted as the exact quantity that must be extracted. If the storage has a HIGHER OR EQUAL available quantity, then the storage MUST allow the given quantity to be extracted. If the storage on the other hand has a LOWER available quantity, then extraction is not allowed.- Parameters:
prototype
- The ingredient to search for.matchCondition
- The flags to compare the given prototype by according toIngredientComponent.getMatcher()
.simulate
- If true, the insertion is only simulated- Returns:
- Ingredient extracted from the slot, must be
IIngredientMatcher.getEmptyInstance()
, if nothing can be extracted
-
extract
Extract any ingredient, but the given maximum amount from the storage.- Parameters:
maxQuantity
- The maximum amount to extract.simulate
- If true, the insertion is only simulated- Returns:
- Ingredient extracted from the slot, must be
IIngredientMatcher.getEmptyInstance()
, if nothing can be extracted
-