Cache Bukkit Command when wrapping CommandNodes #11385
Closed
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.
Resolves #11378 by "restoring" the Spigot behavior where VanillaCommandNodes are only created once. This allows command frameworks that insert CommandNodes directly into the Brigadier dispatcher to change the permission String of the VanillaCommandNodes created for their commands, rather than it always being the default
"minecraft.commands.<name>"
.For example, the test plugin described in #11378 can do something like this now:
When the
/test
command is ran usingBukkit#dispatchCommand
, Bukkit will now see that its permission isnull
and allow a Player without any permission to run it, which is the case when the same Player runs the command directly.Without this PR, BukkitBrigForwardingMap creates a new VanillaCommandWrapper each time a CommandNode is requested via the Bukkit CommandMap. This meant that calls to
Command#setPermission
did not persist between retrievals from the map.I can squash this into the
Brigadier-based-command-API
patch file if desired, but I figured it would be easier initially to review the changes when they are in a separate patch.