Проблемы с табкомплитом своей команды

Версия Minecraft
1.16.5
API
Forge

tox1cozZ

aka Agravaine
8,378
595
2,825
1626978987174.png
Пытаюсь сделать свою команду-обёртку, но такая проблема:
Когда пишу в чат команду и ставлю пробел (чтобы вводить аргументы) - кричит ошибкой в лог, мол нет аргумента.
Что за бред? Скопировал команду из WorldEdit, у них такого нет.
Java:
java.lang.IllegalArgumentException: No such argument 'args' exists on this command
    at com.mojang.brigadier.context.CommandContext.getArgument(CommandContext.java:85) ~[brigadier-1.0.17.jar:?] {re:classloading}
    at com.mojang.brigadier.arguments.StringArgumentType.getString(StringArgumentType.java:33) ~[brigadier-1.0.17.jar:?] {re:classloading}
    at ua.tox1cozz.ultralogger.command.CommandManager.lambda$register$2(CommandManager.java:28) ~[main/:?] {re:classloading}
    at com.mojang.brigadier.tree.ArgumentCommandNode.listSuggestions(ArgumentCommandNode.java:71) ~[brigadier-1.0.17.jar:?] {re:classloading}
    at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:596) ~[brigadier-1.0.17.jar:?] {re:classloading}
    at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:579) ~[brigadier-1.0.17.jar:?] {re:classloading}
    at net.minecraft.network.play.ServerPlayNetHandler.handleCustomCommandSuggestions(ServerPlayNetHandler.java:464) ~[forge:?] {re:mixin,re:classloading}
    at net.minecraft.network.play.client.CTabCompletePacket.handle(CTabCompletePacket.java:34) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A}
    at net.minecraft.network.play.client.CTabCompletePacket.handle(CTabCompletePacket.java:10) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A}
    at net.minecraft.network.PacketThreadUtil.lambda$ensureRunningOnSameThread$0(PacketThreadUtil.java:19) ~[forge:?] {re:classloading}
    at net.minecraft.util.concurrent.TickDelayedTask.run(TickDelayedTask.java:17) ~[forge:?] {re:classloading}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.doRunTask(ThreadTaskExecutor.java:136) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.util.concurrent.RecursiveEventLoop.doRunTask(RecursiveEventLoop.java:22) ~[forge:?] {re:classloading}
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:734) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:159) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.pollTask(ThreadTaskExecutor.java:109) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:717) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:711) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.runAllTasks(ThreadTaskExecutor.java:97) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:696) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:646) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:232) ~[forge:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_231] {}
 
Решение
Спасибо, но нашёл все таки проблему сам.
В suggests, оказывается, нельзя получить значение аргумента.
В моём случае нужно просто получить всю строку команды и разбить её на массив аргументов. Сделал так:
1626993217727.png
82
5
58
Если честно, я не пробовал делать свои команды на версиях посвежее, поэтому точно сказать в чём проблема не могу. Зато могу сослаться на другой мод, в котором есть команда с проверенно работающим автокомплитом: Curios/CuriosCommand.java at 1.16.x-forge · TheIllusiveC4/Curios
...думаю, ты знаешь что делать.
 

tox1cozZ

aka Agravaine
8,378
595
2,825
Спасибо, но нашёл все таки проблему сам.
В suggests, оказывается, нельзя получить значение аргумента.
В моём случае нужно просто получить всю строку команды и разбить её на массив аргументов. Сделал так:
1626993217727.png
 
671
27
140
писать " " - так короче )) Но ты правильно делаешь \\s+ оно понятнее выглядит, да и длиннее (а обычно за длину кода деньги платят)))
Так как у тебя, писать профессиональнее.
Что за мод решил запилить?
 

tox1cozZ

aka Agravaine
8,378
595
2,825
Смотрю на это ваше 1.15.2+ и плакать хочется, все обезобразили...
Новая библиотека для команд очень гибкая и довольная удобная. Из-за функционального стиля нужно грамотно форматировать код, иначе все сливается в кашу.

писать " " - так короче
Я не нашел точного ответа в коде, как ведут себя команды не только с одним пробелом, но и множественными. Этот регексп как раз указывает на множественные пробелы.
 
671
27
140
на множественные пробелы.
и ты меня уделал, ох и старый же я стал))
Я как то не думал о них, потом что использую trim и проверяю на null и isEmpty. Ну ты понял, проще говоря, если у нас будет " blablabla", то они исчезнут.
Твоё решения изящнее)
 
Сверху