Skip to content

Commit 1986517

Browse files
committed
Correctly map Brigadier suggestions to cloud
cloud expects the suggestion to be a replacement for the entire argument, use Brigadier's range information to meet that requirement.
1 parent 49f9feb commit 1986517

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

cloud-minecraft/cloud-brigadier/src/main/java/cloud/commandframework/brigadier/argument/WrappedBrigadierParser.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import java.util.ArrayList;
3838
import java.util.Collections;
3939
import java.util.List;
40-
import java.util.Locale;
4140
import java.util.concurrent.CompletableFuture;
4241
import java.util.function.Supplier;
4342
import org.apiguardian.api.API;
@@ -173,27 +172,36 @@ public final ArgumentType<T> getNativeArgument() {
173172
*/
174173
final com.mojang.brigadier.context.CommandContext<Object> reverseMappedContext = new com.mojang.brigadier.context.CommandContext<>(
175174
commandContext.getOrDefault(COMMAND_CONTEXT_BRIGADIER_NATIVE_SENDER, commandContext.sender()),
176-
commandContext.rawInput().input(),
175+
input.input(),
177176
Collections.emptyMap(),
178177
null,
179178
null,
180179
Collections.emptyList(),
181-
StringRange.at(0),
180+
StringRange.at(input.cursor()),
182181
null,
183182
null,
184183
false
185184
);
186185

187186
return this.nativeType.get().listSuggestions(
188187
reverseMappedContext,
189-
new SuggestionsBuilder(input.input(), input.input().toLowerCase(Locale.ROOT), input.cursor())
188+
new SuggestionsBuilder(input.input(), input.cursor())
190189
).thenApply(suggestions -> {
191190
final List<cloud.commandframework.arguments.suggestion.Suggestion> cloud = new ArrayList<>();
192191
for (final com.mojang.brigadier.suggestion.Suggestion suggestion : suggestions.getList()) {
193-
cloud.add(tooltipSuggestion(
194-
suggestion.getText(),
195-
suggestion.getTooltip()
196-
));
192+
final String beforeSuggestion = input.input().substring(input.cursor(), suggestion.getRange().getStart());
193+
final String afterSuggestion = input.input().substring(suggestion.getRange().getEnd());
194+
if (beforeSuggestion.isEmpty() && afterSuggestion.isEmpty()) {
195+
cloud.add(tooltipSuggestion(
196+
suggestion.getText(),
197+
suggestion.getTooltip()
198+
));
199+
} else {
200+
cloud.add(tooltipSuggestion(
201+
beforeSuggestion + suggestion.getText() + afterSuggestion,
202+
suggestion.getTooltip()
203+
));
204+
}
197205
}
198206
return cloud;
199207
});

0 commit comments

Comments
 (0)