Skip to content
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

When only one player is allowed, the provided entity selector allows more than one. #113

Open
HyperSkys opened this issue Oct 8, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@HyperSkys
Copy link

For example, if I have a command like /bounty <target> <amount> with the code similar to this:

    @Command("bounty")
    public void onBountyCommand(Player sender, Player target, double amount) {
    }

It still suggests @a, @e, @n, @p, @r and upon for example trying to even type in /bounty @e it sends this error in console:

[17:55:18 ERROR]: Thread Async Tab Complete Thread - #0 failed main thread check: Chunk getEntities call
java.lang.Throwable: null
        at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:2384) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:1413) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.commands.arguments.selector.EntitySelector.addEntities(EntitySelector.java:174) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.commands.arguments.selector.EntitySelector.findEntities(EntitySelector.java:158) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.craftbukkit.CraftServer.selectEntities(CraftServer.java:2927) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.Bukkit.selectEntities(Bukkit.java:2558) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.fromSelector(PlayerParameterType.java:60) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.parse(PlayerParameterType.java:81) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.parse(PlayerParameterType.java:50) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.node.parser.ParameterNodeImpl.parse(ParameterNodeImpl.java:122) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.autocomplete.StandardAutoCompleter.complete(StandardAutoCompleter.java:147) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.autocomplete.StandardAutoCompleter.complete(StandardAutoCompleter.java:100) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.listener.AsyncPaperTabListener.onAsyncTabComplete(AsyncPaperTabListener.java:62) ~[DufjiSMP-1.0.0-REL.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor8.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:1.21.1-89-1ed64f8]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.event.Event.callEvent(Event.java:45) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCustomCommandSuggestions0(ServerGamePacketListenerImpl.java:822) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleCustomCommandSuggestions$1(ServerGamePacketListenerImpl.java:811) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
[17:55:19 ERROR]: Thread Async Tab Complete Thread - #1 failed main thread check: Chunk getEntities call
java.lang.Throwable: null
        at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:2384) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:1413) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.commands.arguments.selector.EntitySelector.addEntities(EntitySelector.java:174) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.commands.arguments.selector.EntitySelector.findEntities(EntitySelector.java:158) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.craftbukkit.CraftServer.selectEntities(CraftServer.java:2927) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.Bukkit.selectEntities(Bukkit.java:2558) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.fromSelector(PlayerParameterType.java:60) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.parse(PlayerParameterType.java:81) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.parameters.PlayerParameterType.parse(PlayerParameterType.java:50) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.node.parser.ParameterNodeImpl.parse(ParameterNodeImpl.java:122) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.autocomplete.StandardAutoCompleter.complete(StandardAutoCompleter.java:147) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.autocomplete.StandardAutoCompleter.complete(StandardAutoCompleter.java:100) ~[DufjiSMP-1.0.0-REL.jar:?]
        at DufjiSMP-1.0.0-REL.jar/revxrsal.commands.bukkit.listener.AsyncPaperTabListener.onAsyncTabComplete(AsyncPaperTabListener.java:62) ~[DufjiSMP-1.0.0-REL.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor8.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:1.21.1-89-1ed64f8]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.event.Event.callEvent(Event.java:45) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCustomCommandSuggestions0(ServerGamePacketListenerImpl.java:822) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleCustomCommandSuggestions$1(ServerGamePacketListenerImpl.java:811) ~[paper-1.21.1.jar:1.21.1-89-1ed64f8]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

Then when sending the command, it sends out this error:

Only one player is allowed, but the provided selector allows more than one

Any idea on how to resolve this, or is this just a bug with Lamp?

@HyperSkys HyperSkys added the bug Something isn't working label Oct 8, 2024
@Revxrsal
Copy link
Owner

Revxrsal commented Oct 9, 2024

I see. Sounds like a problem with asynchronous tab completion. You could disable it as following:

BukkitLampConfig config = BukkitLampConfig.builder(plugin).disableAsyncCompletion().build();
Lamp<BukkitCommandActor> lamp = BukkitLamp.builder(config).build();

Can you try it and let me know if it persists?

@HyperSkys
Copy link
Author

That does resolve the console error, but does not resolve the issue where it's suggesting using @a, @e, @n, @p, @r for a single player selector.

@Revxrsal
Copy link
Owner

Revxrsal commented Oct 10, 2024

This is Brigadier's default behavior. @a and @e can be minimized using further selectors (i.e. limit=1 or d=2) to reduce to one player, and the client will display the input in red if it does not.

Do you want to remove them altogether? Either disable Brigadier through the BukkitLampConfig, or register a SuggestionProvider for the Player class. That will automatically remove the @a, @e, etc.

@HyperSkys
Copy link
Author

This is Brigadier's default behavior. @a and @e can be minimized using further selectors (i.e. limit=1 or d=2) to reduce to one player, and the client will display the input in red if it does not.

Do you want to remove them altogether? Either disable Brigadier through the BukkitLampConfig, or register a SuggestionProvider for the Player class. That will automatically remove the @a, @e, etc.

I'll do that and I'll share the code I make here, I think it's silly to suggest args that the user cannot use, but thanks for the help.

@creatorfromhell
Copy link
Contributor

creatorfromhell commented Oct 11, 2024

This is Brigadier's default behavior. @a and @e can be minimized using further selectors (i.e. limit=1 or d=2) to reduce to one player, and the client will display the input in red if it does not.
Do you want to remove them altogether? Either disable Brigadier through the BukkitLampConfig, or register a SuggestionProvider for the Player class. That will automatically remove the @a, @e, etc.

I'll do that and I'll share the code I make here, I think it's silly to suggest args that the user cannot use, but thanks for the help.

When you do this for your code, I would recommend adding a parameter that allows enabling/disabling them individually to make it more configurable. Maybe like an annotation @AllowA, @allowe.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants