Fix brewing material choice block handling #2592
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.
Reported on Discord.
Additions
PaperAPITools#createPredicateRecipeChoice
- ...creates a predicate recipe choice.ItemScriptHelper#shouldBlockChoice
- util method used in the new brewing handling.ItemHelperImpl(1.20)#convertChoice
- util method to convert aPredicate<ItemStack(NMS)>
used internally in brewing recipes to a Bukkit recipe choice.Changes
ItemScriptHelper
's handling of brewing & blocking Denizen items in material choices:ItemHelper#getCustomBrewingRecipes
now properly returns a predicate recipe choice instead ofnull
(updated related usages).PaperAPITools#isDenizenMix
as it is no longer used.PaperAPIToolsImpl
no longer stores thePotionMix
in thepotionMixes
map, as it was only ever used byPaperAPITools#isDenizenMix
.Note
The NMS method used by
ItemHelper#isValidMix
checks both vanilla and custom recipes, which is why the new handling checks for a custom recipe first and then if it can't find one & that's true it knows it's a vanilla recipe.This works, but can result in custom recipes technically being checked twice - an alternative is to set the internal custom brewing recipes map to an empty map, call that method, and then set the original map back in, which might be more efficient, but would also mean more messy reflection.