Implementation Limits
These findings describe the supplied source as reviewed on 2026-10-05. They were identified by static inspection; the plugin source was not modified and no Unreal runtime test was performed.
Version and Platform Claims
The PDFs use v1.0 and state general UE 5.x/Linux support. Cube_Inventory_rep.uplugin declares VersionName 0.9, EngineVersion 5.7.0 and only Win64. This checkout does not prove additional engine/platform support.
Operation Defects
| Finding | Source and consequence |
|---|---|
| Specific remove ignores its explicit route during execution | InventorySubSystem.cpp constructs a target tag, but InventoryManager.cpp ProcessOperationState calls RemoveAmount for every Remove.FromInventory; it resolves the database default component |
| Public swap wrapper fails validation | TransferOwnSlot does not set RequestedAmount, whose default is zero; generic validation rejects it as Invalid amount |
| SetSlot does not replace the item | InventoryComponent.cpp SetSlot ignores its ItemID parameter and changes only the existing stack amount; equal amounts return immediately, so bypassing the wrapper does not yield a correct swap |
| Slot over-removal can fail after removal | Manager RemoveFromSlot removes first, then looks up ItemID after the slot may have been deleted; remainder processing can fail or route through the default database inventory |
| External transfer uses surprising direction labels | Context/parameter names imply the first tag is source, but the helper pulls from OtherPawn/second tag into RequestingPawn/first tag; configure tags for that actual direction |
| External rollback is ineffective | Target add returns void, AddedAmount is assigned RemovedAmount, and the less-than rollback condition cannot detect failure; context AppliedAmount is the requested count rather than necessarily the clamped count |
| No general transaction rollback | RunOperation transitions do not implement rollback for every multi-step mutation; merge has only a limited source re-add attempt |
Avoid treating these paths as production-safe until corrected and tested in a maintained implementation. A false/Failed result does not guarantee unchanged state.
Authority, Capacity and Weight
Component interface mutation implementations contain no general authority guard. Split dispatch calls the component directly; MergeSlots also lacks the authority check used by common helper methods. The project must keep all mutation entry points on authority.
Native systemic add fills stacks by ItemID/MaxStackSize without consulting bCanStack. Set MaxStackSize to 1 for nonstacking content. Direct SplitSlot does not check free slot capacity. CapacityType None returns false from the full-add check but can pass the unconstrained partial helper.
Weight capacity calculations assume valid positive Weight when computing partial quantities; zero is a declared master default and can reach a division by zero in that path. AddItemToSlot does not call UpdateInventoryCarryWeight, leaving the replicated carry-weight value stale until another recalculation. Raw interface/array edits can bypass manager capacity checks entirely.
Initialization and Presentation
- No public all-databases-ready event exists; DataTablesToLoad is not filled by initialization, so the index-built log cannot establish batch completion.
- Duplicate ItemIDs are skipped after the first registration; asynchronous load order makes duplicate winner selection unsuitable as a content contract.
- GetToolTipWidgetClass dereferences ToolTipMap.Find without checking for a missing non-None key. Configure a map entry for every displayed type.
- UI can be constructed before the master index is ready. Entries do not implement a general retry on database registration.
- Native server mutations mark Fast Array data dirty but do not broadcast corresponding slot events locally, affecting listen-server UI.
- Frame visual prediction lacks complete rejection/move restoration when authoritative state does not change.
- Repeated frame InitAfterBPConstruction can leave old children while rebuilding the entry map. Entry UpdateSlotData adds a delegate repeatedly; verify callback duplication/lifetime behavior.
- The supported removal notification path is list PreReplicatedRemove. Declared PostReplicatedRemove methods do not alone prove a valid Unreal receive hook; verify aggregate removed-count events in the engine.
Features Not Established by Scaffolding
Registered Move/Clear/Sort/Resize/Consume/Generate/InternalTransfer tags are not active operation branches. Additional enum states do not implement prediction/reconciliation/rollback phases. RequirementTags, action/trade metadata and empty typed assets do not enforce gameplay behavior. LootboxComponent is not a loot generator, and a native pickup actor or save system is not supplied.
The technical PDF's atomicity, rollback safety, universal authority and no-prediction claims must be read as design intent. The setup and API pages here document the actual current contracts and limitations.