Paper: 1.13 Tab Completion for Aliases / Plugin Command Replacements

Created on 7 Dec 2018  ·  8Comments  ·  Source: PaperMC/Paper

What behaviour is expected:

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.

What behaviour is observed:

Tab completion for /give only provides usernames, and goes on forever.
image

Steps/models to reproduce:

commands.yml

aliases:
  give:
  - minecraft:give $1-

paper.yml

settings:
  suggest-player-names-when-null-tab-completions: false

pluginsEssentialsconfig.yml

disabled-commands:
  - give

Plugin list:

EssentialsX 2.15.0.56 (b660)

Paper build number:

Paper b474

Anything else:

_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.

help wanted we must go deeper

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: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.

All 8 comments

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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ShelLuser picture ShelLuser  ·  3Comments

zedwick picture zedwick  ·  3Comments

Shevchik picture Shevchik  ·  3Comments

Decme picture Decme  ·  3Comments

Marlej-dev picture Marlej-dev  ·  3Comments