Class VanillaContainerWrapper
- All Implemented Interfaces:
 ResourceHandler<ItemResource>
- Direct Known Subclasses:
 PlayerInventoryWrapper
ResourceHandler<ItemResource> for vanilla's Container.
 Important note: This wrapper assumes that the container owns its slots. If the container does not own its slots, for example because it delegates to another container, this wrapper should not be used!
- See Also:
 
- 
Nested Class Summary
Nested Classes - 
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Containerprivate final RootCommitJournal(package private) int(package private) final List<VanillaContainerWrapper.SlotWrapper> private static final Map<Container, VanillaContainerWrapper> Global wrapper concurrent map. - 
Constructor Summary
Constructors - 
Method Summary
Modifier and TypeMethodDescriptionintextract(int index, ItemResource resource, int amount, TransactionContext transaction) Extracts up to the given amount of a resource from the handler at the given index.longgetAmountAsLong(int index) Returns the amount of the currently stored resource at the given index, as along.longgetCapacityAsLong(int index, ItemResource resource) Returns the capacity of the handler at the given index and for the given resource, irrespective of the current amount or resource currently at that index, as along.getResource(int index) Returns the resource at the given index, which may be empty.(package private) VanillaContainerWrapper.SlotWrappergetSlotWrapper(int index) intinsert(int index, ItemResource resource, int amount, TransactionContext transaction) Inserts up to the given amount of a resource into the handler at the given index.(package private) static VanillaContainerWrapperinternalOf(Container container) booleanisValid(int index, ItemResource resource) Returns whether the given resource is generally allowed to be contained at the given index, irrespective of the current amount or resource currently at that index.static ResourceHandler<ItemResource> Wraps a vanilla container into aResourceHandlerofItemResources.(package private) void(package private) voidresize()intsize()Returns the current number of indices in this resource handler.toString()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface net.neoforged.neoforge.transfer.ResourceHandler
extract, getAmountAsInt, getCapacityAsInt, insert 
- 
Field Details
- 
wrappers
Global wrapper concurrent map.Note on thread-safety: we assume that Containers are inherently single-threaded, and no attempt is made at synchronization. However, the access to implementations can happen on multiple threads concurrently, which is why we use a thread-safe wrapper map.
We use weak keys and values to avoid keeping a strong reference to the Container until the next time the map is cleaned. As long as a slot wrapper is used, there is a strong reference to the outer
VanillaContainerWrapperclass, which also references the container. This ensures that the entries remain in the map at least as long as the wrappers are in use.Note that
MapMaker.weakKeys()makes the map use identity semantics for the keys, which is desirable here. - 
container
 - 
size
int size - 
slotWrappers
 - 
setChangedJournal
 
 - 
 - 
Constructor Details
- 
VanillaContainerWrapper
VanillaContainerWrapper(Container container)  
 - 
 - 
Method Details
- 
of
Wraps a vanilla container into aResourceHandlerofItemResources.If the container is a player
Inventory, usePlayerInventoryWrapperinstead which adds convenience methods for players.If the container is a
WorldlyContainer, useWorldlyContainerWrapperinstead which checks the extra methods of worldy containers. - 
internalOf
 - 
resize
void resize() - 
getSlotWrapper
 - 
onRootCommit
void onRootCommit() - 
size
public int size()Description copied from interface:ResourceHandlerReturns the current number of indices in this resource handler.This size provides a bound on the valid indices for this handler, see the documentation of
ResourceHandler.- Specified by:
 sizein interfaceResourceHandler<ItemResource>- Returns:
 - The size of the resource handler. Can be 
0if the handler currently has no indices. 
 - 
insert
Description copied from interface:ResourceHandlerInserts up to the given amount of a resource into the handler at the given index.Changes to the handler are made in the context of a transaction.
- Specified by:
 insertin interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to insert the resource into.resource- The resource to insert. Must be non-empty.amount- The maximum amount of the resource to insert. Must be non-negative.transaction- The transaction that this operation is part of.- Returns:
 - The amount that was inserted. Between 
0(inclusive, nothing was inserted) andamount(inclusive, everything was inserted). - See Also:
 
 - 
extract
Description copied from interface:ResourceHandlerExtracts up to the given amount of a resource from the handler at the given index.Changes to the handler are made in the context of a transaction.
- Specified by:
 extractin interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to extract the resource from.resource- The resource to extract. Must be non-empty.amount- The maximum amount of the resource to extract. Must be non-negative.transaction- The transaction that this operation is part of.- Returns:
 - The amount that was extracted. Between 
0(inclusive, nothing was extracted) andamount(inclusive, everything was extracted). - See Also:
 
 - 
getResource
Description copied from interface:ResourceHandlerReturns the resource at the given index, which may be empty.If the resource is empty, the stored amount must be 0.
- Specified by:
 getResourcein interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to get the resource from.- Returns:
 - the resource at the given index, which may be empty
 
 - 
getAmountAsLong
public long getAmountAsLong(int index) Description copied from interface:ResourceHandlerReturns the amount of the currently stored resource at the given index, as along.In general, resource handlers can report
longamounts. However, if the handler is known to only support amounts up toInteger.MAX_VALUE, or if the caller prefers to deal inints only, the int-returning overload can be used instead.The returned amount must be non-negative. If the stored resource is empty, the amount must be 0.
- Specified by:
 getAmountAsLongin interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to get the amount from.- Returns:
 - the amount at the given index, as a long
 - See Also:
 
 - 
getCapacityAsLong
Description copied from interface:ResourceHandlerReturns the capacity of the handler at the given index and for the given resource, irrespective of the current amount or resource currently at that index, as along.In general, resource handlers can report
longcapacities. However, if the handler is known to only support capacities up toInteger.MAX_VALUE, or if the caller prefers to deal inints only, the int-returning overload can be used instead.This function serves as a hint on the maximum amount the resource handler might contain, for example the handler can be considered full if
amount >= capacity. Note that the returned capacity may overestimate the actual allowed amount, and it might be smaller than the current amount. The only way to know if a handler will accept a resource, is to try toinsertit.- Specified by:
 getCapacityAsLongin interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to get the capacity for.resource- The resource to get the capacity for. May be empty to get the general capacity at the index.- Returns:
 - the capacity at the given index, as a long
 - See Also:
 
 - 
isValid
Description copied from interface:ResourceHandlerReturns whether the given resource is generally allowed to be contained at the given index, irrespective of the current amount or resource currently at that index.This function serves as a hint on whether the resource handler can contain the resource or not. The only way to know if a handler will accept a resource, is to try to
insertit.- Specified by:
 isValidin interfaceResourceHandler<ItemResource>- Parameters:
 index- The index to check.resource- The resource to check. Must be non-empty.- Returns:
 - whether the given resource is generally allowed to be contained at the given index, irrespective of the current amount or resource currently at that index
 
 - 
toString
 
 -