Use API methods for adding items to inventories #7986
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Attempting to add items to inventories could result in some slots being deleted (set to air). With Player inventories, leggings/boots were cleared.
Solution
Currently, we grab the inventory contents (not just storage contents either) as an array and attempt to modify ItemStacks to add in the ItemStack(s) represented by the ItemType. However, inventories may have differing implementations for how ItemStacks should be added. I have updated the method to instead use the Inventory API methods to add ItemStacks, which correctly accounts for existing slots, maximum stack sizes, etc. I have also corrected the
getStorageContents()method.Unfortunately, on older versions (1.20.6 specifically), the API methods for adding items to inventories due not work properly with large quantities.... For older versions (those below 1.21), I have elected to preserve the existing method. There have been no reported issues with adding items to inventories on those versions.
Testing Completed
I tested in-game before/after and confirmed the issue is resolved.
Supporting Information
Completes: #7975
Related: none