Proper tab complete for alias commands from commands.yml
The /give command is shared between EssentialsX and Vanilla; ideal fix would be assigning it an alias in the commands.yml file to direct /give to the /minecraft:give command, and retain tab completion to the alias.
Tab completion for /give only provides usernames, and goes on forever.

commands.yml
aliases:
give:
- minecraft:give $1-
paper.yml
settings:
suggest-player-names-when-null-tab-completions: false
pluginsEssentialsconfig.yml
disabled-commands:
- give
EssentialsX 2.15.0.56 (b660)
Paper b474
_Could there be potential for "priority" commands? Listing vanilla commands that will not become secondary to plugin commands?_
I could very well just not be doing this correctly, but I just want to retain proper tab completion for a vanilla command that's been overridden by a plugin.
It appears that this was previously reported to spigot in bug report:
https://hub.spigotmc.org/jira/browse/SPIGOT-2819
This was reported Nov 21, 2016 but no action's have been taken there
It would be wonderful if paper or spigot could define commands from vanilla that will not be overridden by plugins.
Such that a plugin that has a command like:
essentials:give which conflicts with minecraft:give can be negated to retain vanilla behavior of /give without the use of aliases in commands.yml which have a tab completion problem.
Maybe a potential option in commands.yml like:
ignore-plugin-commands:
- give
- enchant
- list
- ect.
To me it looks like essentials should properly implement command disabling. It still registers the command, which is why tabcomplete is going through.
EDIT:
Here is how essentials handles disabled commands:
https://github.com/EssentialsX/Essentials/blob/2.x/Essentials/src/com/earth2me/essentials/Essentials.java#L486
EDIT#2:
Looking at the commands.yml format, the only issue arises is that you can define an alias to multiple commands.
EssentialsX responded, part of their response was:
In addition, EssentialsX also makes a conscious effort to hand over tab completion to other commands, but we can't do this with vanilla commands as they are not plugin commands.
Ideally, server software would provide a way to let vanilla commands take precedence, because doing this in EssentialsX would require an uncomfortable amount of tying behavior to the implementation instead of the API.
I think this is fair; since a variety of plugins could be overriding vanilla commands,
Counting on plugin devs to properly handle these situations isn't as realistic as spigot or paper keeping certain listed vanilla commands top priority and not letting plugins take them over 🤷♂️
Is there any update on this? Ran into it on Paper for 1.15.2, with EssentialsX 2.17.1.0.
This isn't really viable for aliases given the nature of how they work, bukkit doesn't really offer much to deal with this, ideally, the command map would be exposed so that plugins can just not register commands if they're disabled...
I haven't tested it but as far as I can tell this plugin claims to have this functionality, but is no longer maintained.
https://dev.bukkit.org/projects/xsimplealias
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
expanding on the commands.yml file, what if a section was added so that you could have a list of commands that each registered command would check against and if present in the list, would prohibit their registration. so like
disable-plugin-commands:
- essentials:give
- essentials:enchant
That way, the server user would have final and total control over plugin commands without needing to go into the plugin.yml of each plugin and removing them that way.
EDIT: Maybe a
disable-plugin-commands:
- *:give
as well to match any plugin that has that command
Most helpful comment
It appears that this was previously reported to spigot in bug report:
https://hub.spigotmc.org/jira/browse/SPIGOT-2819
This was reported Nov 21, 2016 but no action's have been taken there
It would be wonderful if paper or spigot could define commands from vanilla that will not be overridden by plugins.
Such that a plugin that has a command like:
essentials:givewhich conflicts withminecraft:givecan be negated to retain vanilla behavior of/givewithout the use of aliases in commands.yml which have a tab completion problem.Maybe a potential option in commands.yml like: