Skip to content

Rework command alias handling, step 1 #6685

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: major-next
Choose a base branch
from

Conversation

dktapps
Copy link
Member

@dktapps dktapps commented May 4, 2025

This PR started out as an effort to decouple Command and CommandMap, but it's turned into a bit more than that.

A summary of changes:

  • Command no longer tracks its own registered aliases (now the job of CommandMap), breaking circular dependency
  • Aliases must now be provided to CommandMap->register()
  • Aliases can now be individually registered and unregistered without re-registering/unregistering the whole command
  • /help now shows prefixed aliases such as pocketmine:help
  • Prefixed aliases are now visible to Minecraft clients
  • Command->getName() removed & pushed down to PluginCommand, as it's only useful for CommandExecutor users
  • Permission denied messages are now able to show more useful context when e.g. checking subcommand permissions

Relevant issues

dktapps added 3 commits May 4, 2025 15:23
This decouples Command from CommandMap, and moves the burden of tracking registered
aliases to CommandMap. This allows lots of simplification, and also solves a few
weird usage message issues.

- Active (registered) aliases are now tracked via CommandMapEntry
- Commands overriding other commands' aliases now update the original command's registered alias list properly
- Command alias lists now include prefixed aliases
- Prefixed aliases are now included in command data provided to the client
- Server-side /pocketmine:help is now visible on the client
- Permission testing can now provide context that's more relevant to the command invocation - e.g. if a user doesn't have /time set permission, it'll now show a more specific message where previously it would just show that the permission for /time was denied
- User-specified label is now used for permission messages instead of command name - this is more consistent with user expectations
- /help can now see prefixed aliases
- Removed magic alias registration behaviour for VanillaCommand that I don't think anyone expected
- Aliases are now provided to CommandMap via register() parameters, instead of being retrieved from the provided Command
- Command->get/setAliases(), get/setLabel() and getName() are removed
- Command->getName() pushed down to PluginCommand, as it's only useful for CommandExecutors as a command ID and shouldn't be used anywhere else
@dktapps dktapps requested a review from a team as a code owner May 4, 2025 16:03
@dktapps dktapps added Category: API Related to the plugin API BC break Breaks API compatibility Type: Enhancement Contributes features or other improvements to PocketMine-MP labels May 4, 2025
pmmp-admin-bot[bot]
pmmp-admin-bot bot previously approved these changes May 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BC break Breaks API compatibility Category: API Related to the plugin API Type: Enhancement Contributes features or other improvements to PocketMine-MP
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant