Fix variable iterator and EffReplace with items #4627
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.
Description
Fixes
Variable#iterator
for single variables. The method implementation assumed the variable would be a list variable, and therefore mostly copied code fromVariable#variablesIterator
. This fix adds an exception to return a single item iterator when the variable is not a list variable, containing the item.This fix also exposed a bug in EffReplace caught by one of our tests: EffReplace called with inventories and items will not use the right item comparisons to detect which items to replace. In particular, it only matched items with the same item amount. I've fixed this by using ItemType#isSimilar, but the test also said the item amount had to remain the same after replacing, so the new EffReplace implementation also takes care of that.
Target Minecraft Versions: any
Requirements: none
Related Issues: #4154 (non-fixing), #4672 (fixing)