@@ -43,10 +43,10 @@ index a4070b59e261f0f1ac4beec47b11492f4724bf27..6ee39b534b8d992655bc0cef3c299d12
43
43
@Override
44
44
diff --git a/src/main/java/io/papermc/paper/console/BrigadierCommandCompleter.java b/src/main/java/io/papermc/paper/console/BrigadierCommandCompleter.java
45
45
new file mode 100644
46
- index 0000000000000000000000000000000000000000..2fe00debd08c0f5fdb254edff62a79ced6fb09c2
46
+ index 0000000000000000000000000000000000000000..bf7b9518c05ff8a6d4b7d7cd36187ca22257e3dc
47
47
--- /dev/null
48
48
+++ b/src/main/java/io/papermc/paper/console/BrigadierCommandCompleter.java
49
- @@ -0,0 +1,127 @@
49
+ @@ -0,0 +1,119 @@
50
50
+ package io.papermc.paper.console;
51
51
+
52
52
+ import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent;
@@ -91,7 +91,7 @@ index 0000000000000000000000000000000000000000..2fe00debd08c0f5fdb254edff62a79ce
91
91
+ return;
92
92
+ }
93
93
+ final CommandDispatcher<CommandSourceStack> dispatcher = this.server.getCommands().getDispatcher();
94
- + final ParseResults<CommandSourceStack> results = dispatcher.parse(prepareStringReader (line.line()), this.commandSourceStack.get());
94
+ + final ParseResults<CommandSourceStack> results = dispatcher.parse(new StringReader (line.line()), this.commandSourceStack.get());
95
95
+ this.addCandidates(
96
96
+ candidates,
97
97
+ dispatcher.getCompletionSuggestions(results, line.cursor()).join().getList(),
@@ -157,14 +157,6 @@ index 0000000000000000000000000000000000000000..2fe00debd08c0f5fdb254edff62a79ce
157
157
+ return completion(suggestion.getText(), PaperAdventure.asAdventure(ComponentUtils.fromMessage(suggestion.getTooltip())));
158
158
+ }
159
159
+
160
- + static @NonNull StringReader prepareStringReader(final @NonNull String line) {
161
- + final StringReader stringReader = new StringReader(line);
162
- + if (stringReader.canRead() && stringReader.peek() == '/') {
163
- + stringReader.skip();
164
- + }
165
- + return stringReader;
166
- + }
167
- +
168
160
+ private record ParseContext(String line, int suggestionStart) {
169
161
+ }
170
162
+
@@ -176,14 +168,15 @@ index 0000000000000000000000000000000000000000..2fe00debd08c0f5fdb254edff62a79ce
176
168
+ }
177
169
diff --git a/src/main/java/io/papermc/paper/console/BrigadierCommandHighlighter.java b/src/main/java/io/papermc/paper/console/BrigadierCommandHighlighter.java
178
170
new file mode 100644
179
- index 0000000000000000000000000000000000000000..dd9d77d7c7f1a5a130a1f4c15e5b1e68ae3753e1
171
+ index 0000000000000000000000000000000000000000..0b21dac4473e3ea8022ef5c17f5f7d4d49d3ac0a
180
172
--- /dev/null
181
173
+++ b/src/main/java/io/papermc/paper/console/BrigadierCommandHighlighter.java
182
- @@ -0,0 +1,70 @@
174
+ @@ -0,0 +1,67 @@
183
175
+ package io.papermc.paper.console;
184
176
+
185
177
+ import com.google.common.base.Suppliers;
186
178
+ import com.mojang.brigadier.ParseResults;
179
+ + import com.mojang.brigadier.StringReader;
187
180
+ import com.mojang.brigadier.context.ParsedCommandNode;
188
181
+ import com.mojang.brigadier.tree.LiteralCommandNode;
189
182
+ import java.util.function.Supplier;
@@ -214,12 +207,8 @@ index 0000000000000000000000000000000000000000..dd9d77d7c7f1a5a130a1f4c15e5b1e68
214
207
+ return new AttributedString(buffer, AttributedStyle.DEFAULT.foreground(AttributedStyle.RED));
215
208
+ }
216
209
+ final AttributedStringBuilder builder = new AttributedStringBuilder();
217
- + final ParseResults<CommandSourceStack> results = this.server.getCommands().getDispatcher().parse(BrigadierCommandCompleter.prepareStringReader (buffer), this.commandSourceStack.get());
210
+ + final ParseResults<CommandSourceStack> results = this.server.getCommands().getDispatcher().parse(new StringReader (buffer), this.commandSourceStack.get());
218
211
+ int pos = 0;
219
- + if (buffer.startsWith("/")) {
220
- + builder.append("/", AttributedStyle.DEFAULT);
221
- + pos = 1;
222
- + }
223
212
+ int component = -1;
224
213
+ for (final ParsedCommandNode<CommandSourceStack> node : results.getContext().getLastChild().getNodes()) {
225
214
+ if (node.getRange().getStart() >= buffer.length()) {
@@ -285,14 +274,15 @@ index 0000000000000000000000000000000000000000..1e8028a43db0ff1d5b22d06ef12c1c32
285
274
+ }
286
275
diff --git a/src/main/java/io/papermc/paper/console/BrigadierConsoleParser.java b/src/main/java/io/papermc/paper/console/BrigadierConsoleParser.java
287
276
new file mode 100644
288
- index 0000000000000000000000000000000000000000..6e211580b1bc6e2c5ec6f2641b0cf91862985db1
277
+ index 0000000000000000000000000000000000000000..8239a8ba57f856cbbee237a601b3cabfce20ba26
289
278
--- /dev/null
290
279
+++ b/src/main/java/io/papermc/paper/console/BrigadierConsoleParser.java
291
- @@ -0,0 +1,80 @@
280
+ @@ -0,0 +1,79 @@
292
281
+ package io.papermc.paper.console;
293
282
+
294
283
+ import com.mojang.brigadier.ImmutableStringReader;
295
284
+ import com.mojang.brigadier.ParseResults;
285
+ + import com.mojang.brigadier.StringReader;
296
286
+ import com.mojang.brigadier.context.CommandContextBuilder;
297
287
+ import com.mojang.brigadier.context.ParsedCommandNode;
298
288
+ import com.mojang.brigadier.context.StringRange;
@@ -304,8 +294,6 @@ index 0000000000000000000000000000000000000000..6e211580b1bc6e2c5ec6f2641b0cf918
304
294
+ import org.jline.reader.Parser;
305
295
+ import org.jline.reader.SyntaxError;
306
296
+
307
- + import static io.papermc.paper.console.BrigadierCommandCompleter.prepareStringReader;
308
- +
309
297
+ public class BrigadierConsoleParser implements Parser {
310
298
+
311
299
+ private final DedicatedServer server;
@@ -316,7 +304,7 @@ index 0000000000000000000000000000000000000000..6e211580b1bc6e2c5ec6f2641b0cf918
316
304
+
317
305
+ @Override
318
306
+ public ParsedLine parse(final String line, final int cursor, final ParseContext context) throws SyntaxError {
319
- + final ParseResults<CommandSourceStack> results = this.server.getCommands().getDispatcher().parse(prepareStringReader (line), this.server.createCommandSourceStack());
307
+ + final ParseResults<CommandSourceStack> results = this.server.getCommands().getDispatcher().parse(new StringReader (line), this.server.createCommandSourceStack());
320
308
+ final ImmutableStringReader reader = results.getReader();
321
309
+ final List<String> words = new ArrayList<>();
322
310
+ CommandContextBuilder<CommandSourceStack> currentContext = results.getContext();
@@ -391,7 +379,7 @@ index d5153f804cfcfd1a70c46975e3fb1e50c8a82999..764395fe8e49d811294ca82887fee91c
391
379
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
392
380
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
393
381
diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
394
- index 8f82041f0482df22a6a9ea38d50d56228131775d..3e93a6c489972ff2b4ecff3d83cc72b2d5c970f8 100644
382
+ index 15bc85f4799a4b23edd2f1e93f1794de5ca3e8e3..a45e658996e483e9a21cfd8178153ddb7b87ae69 100644
395
383
--- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
396
384
+++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
397
385
@@ -18,9 +18,11 @@ import org.bukkit.event.server.TabCompleteEvent;
0 commit comments