From f39b56fbe78f781c1c33e7c9bfa8081e529bd473 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 3 Apr 2024 23:00:36 +0200 Subject: warp command auto-complete --- .../skyblocker/skyblock/WarpAutocomplete.java | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java new file mode 100644 index 00000000..73e7a1b9 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -0,0 +1,108 @@ +package de.hysky.skyblocker.skyblock; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import com.mojang.brigadier.tree.LiteralCommandNode; +import de.hysky.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.command.CommandSource; +import net.minecraft.text.Text; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +/** + * the mixin {@link de.hysky.skyblocker.mixin.CommandTreeS2CPacketMixin} + */ +public class WarpAutocomplete { + + public static LiteralCommandNode COMMAND_THING; + + public static final String[] WARPS = new String[]{ + "home", + "island", + "hub", + "village", + "elizabeth", + "castle", + "da", + //"crypt", + "crypts", + "museum", + "dungeons", + "dhub", + "barn", + "desert", + "trapper", + "park", + "jungle", + "howl", + "gold", + "deep", + "mines", + "forge", + "crystals", + "hollows", + "ch", + "nucleus", + "spider", + "top", + "nest", + "mound", + "arachne", + "end", + "drag", + "void", + "sepulture", + "crimson", + "nether", + "isle", + "kuudra", + "wasteland", + "dragontail", + "scarleton", + "smoldering", + "garden", + "winter", + "jerry", + "workshop", + "basecamp", + "camp", + "glacite", + "tunnels", + "gt" + }; + + public static void init() { + COMMAND_THING = ClientCommandManager + .literal("warp") + .requires(fabricClientCommandSource -> { + boolean onSkyblock = Utils.isOnSkyblock(); + System.out.println(onSkyblock); + return onSkyblock; + }) + .then(ClientCommandManager.argument("destination", new ArgType(List.of(WARPS))) + ).build(); + } + + private record ArgType(List possibleWarps) implements ArgumentType { + + @Override + public String parse(StringReader reader) throws CommandSyntaxException { + return reader.readUnquotedString(); + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { + return CommandSource.suggestMatching(possibleWarps, builder); + } + } +} -- cgit From bbd90d0e8b6fcca662aa452447309171eb86e55e Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 3 Apr 2024 23:01:55 +0200 Subject: reformat and imports --- .../skyblocker/mixin/CommandTreeS2CPacketMixin.java | 1 - .../hysky/skyblocker/skyblock/WarpAutocomplete.java | 19 +++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java index 2041fa88..a64f627d 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java @@ -6,7 +6,6 @@ import com.mojang.brigadier.tree.LiteralCommandNode; import de.hysky.skyblocker.skyblock.WarpAutocomplete; import de.hysky.skyblocker.utils.Utils; import net.minecraft.command.CommandSource; -import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index 73e7a1b9..c64acd48 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -1,20 +1,15 @@ package de.hysky.skyblocker.skyblock; -import com.mojang.brigadier.Command; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.LiteralCommandNode; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.command.CommandSource; -import net.minecraft.text.Text; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -96,13 +91,13 @@ public class WarpAutocomplete { private record ArgType(List possibleWarps) implements ArgumentType { @Override - public String parse(StringReader reader) throws CommandSyntaxException { - return reader.readUnquotedString(); - } + public String parse(StringReader reader) { + return reader.readUnquotedString(); + } - @Override - public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { - return CommandSource.suggestMatching(possibleWarps, builder); - } + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { + return CommandSource.suggestMatching(possibleWarps, builder); } + } } -- cgit From e94ab06c0334a882ddb4e061bfb01d2e40bb0340 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 3 Apr 2024 23:47:49 +0200 Subject: use api --- .../mixin/CommandTreeS2CPacketMixin.java | 3 +- .../skyblocker/skyblock/WarpAutocomplete.java | 87 ++++++---------------- 2 files changed, 25 insertions(+), 65 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java index a64f627d..e0301c9c 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java @@ -14,8 +14,7 @@ public class CommandTreeS2CPacketMixin { @ModifyExpressionValue(method = "getNode", at = @At(ordinal = 1, value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/CommandTreeS2CPacket$CommandTree;getNode(I)Lcom/mojang/brigadier/tree/CommandNode;")) public CommandNode thing(CommandNode original) { - if (original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp") && (Utils.isOnHypixel())) { - System.out.println("INJECTED"); + if (WarpAutocomplete.COMMAND_THING != null && original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp") && (Utils.isOnHypixel())) { return WarpAutocomplete.COMMAND_THING; } return original; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index c64acd48..44d2b277 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -1,16 +1,25 @@ package de.hysky.skyblocker.skyblock; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.LiteralCommandNode; +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.command.CommandSource; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -19,73 +28,25 @@ import java.util.concurrent.CompletableFuture; */ public class WarpAutocomplete { - public static LiteralCommandNode COMMAND_THING; + public static @Nullable LiteralCommandNode COMMAND_THING = null; - public static final String[] WARPS = new String[]{ - "home", - "island", - "hub", - "village", - "elizabeth", - "castle", - "da", - //"crypt", - "crypts", - "museum", - "dungeons", - "dhub", - "barn", - "desert", - "trapper", - "park", - "jungle", - "howl", - "gold", - "deep", - "mines", - "forge", - "crystals", - "hollows", - "ch", - "nucleus", - "spider", - "top", - "nest", - "mound", - "arachne", - "end", - "drag", - "void", - "sepulture", - "crimson", - "nether", - "isle", - "kuudra", - "wasteland", - "dragontail", - "scarleton", - "smoldering", - "garden", - "winter", - "jerry", - "workshop", - "basecamp", - "camp", - "glacite", - "tunnels", - "gt" - }; + protected static final Logger LOGGER = LoggerFactory.getLogger(WarpAutocomplete.class); public static void init() { - COMMAND_THING = ClientCommandManager + CompletableFuture.supplyAsync(() -> { + try { + JsonArray jsonElements = SkyblockerMod.GSON.fromJson(Http.sendGetRequest("https://staging.hysky.de/api/locations"), JsonArray.class); + return jsonElements.asList().stream().map(JsonElement::getAsString).toList(); + } catch (Exception e) { + LOGGER.error("[Skyblocker] Failed to download warps list", e); + } + return List.of(""); + }).thenAccept(strings -> COMMAND_THING = ClientCommandManager .literal("warp") - .requires(fabricClientCommandSource -> { - boolean onSkyblock = Utils.isOnSkyblock(); - System.out.println(onSkyblock); - return onSkyblock; - }) - .then(ClientCommandManager.argument("destination", new ArgType(List.of(WARPS))) - ).build(); + .requires(fabricClientCommandSource -> Utils.isOnSkyblock()) + .then(ClientCommandManager.argument("destination", new ArgType(strings)) + ).build()); + } private record ArgType(List possibleWarps) implements ArgumentType { -- cgit From 447860fa9adf792453d89758447baef418fd85f9 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 3 Apr 2024 23:48:23 +0200 Subject: imports --- src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index 44d2b277..abb44cde 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -9,7 +9,6 @@ import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.LiteralCommandNode; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -19,7 +18,6 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.util.List; import java.util.concurrent.CompletableFuture; -- cgit From 3b6a09bbb8b45631ee73f8430aa605a89b8351c5 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 3 Apr 2024 23:49:39 +0200 Subject: slapped onto prod --- src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index abb44cde..5f54ac2d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -33,7 +33,7 @@ public class WarpAutocomplete { public static void init() { CompletableFuture.supplyAsync(() -> { try { - JsonArray jsonElements = SkyblockerMod.GSON.fromJson(Http.sendGetRequest("https://staging.hysky.de/api/locations"), JsonArray.class); + JsonArray jsonElements = SkyblockerMod.GSON.fromJson(Http.sendGetRequest("https://hysky.de/api/locations"), JsonArray.class); return jsonElements.asList().stream().map(JsonElement::getAsString).toList(); } catch (Exception e) { LOGGER.error("[Skyblocker] Failed to download warps list", e); -- cgit From 2a97ba59a62113a997e64e3c43649f7ba65e7f8f Mon Sep 17 00:00:00 2001 From: vicisacat Date: Thu, 4 Apr 2024 00:01:27 +0200 Subject: sleep schedule ruined by aaron real --- .../java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java | 4 ++-- src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java | 1 - src/main/resources/skyblocker.mixins.json | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java index e0301c9c..ba8f7371 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java @@ -13,8 +13,8 @@ import org.spongepowered.asm.mixin.injection.At; public class CommandTreeS2CPacketMixin { @ModifyExpressionValue(method = "getNode", at = @At(ordinal = 1, value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/CommandTreeS2CPacket$CommandTree;getNode(I)Lcom/mojang/brigadier/tree/CommandNode;")) - public CommandNode thing(CommandNode original) { - if (WarpAutocomplete.COMMAND_THING != null && original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp") && (Utils.isOnHypixel())) { + public CommandNode modifyCommandSuggestions(CommandNode original) { + if (WarpAutocomplete.COMMAND_THING != null && original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp") && Utils.isOnHypixel()) { return WarpAutocomplete.COMMAND_THING; } return original; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index 5f54ac2d..dd07501c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -25,7 +25,6 @@ import java.util.concurrent.CompletableFuture; * the mixin {@link de.hysky.skyblocker.mixin.CommandTreeS2CPacketMixin} */ public class WarpAutocomplete { - public static @Nullable LiteralCommandNode COMMAND_THING = null; protected static final Logger LOGGER = LoggerFactory.getLogger(WarpAutocomplete.class); diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index e8da092f..9f5f8240 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -9,6 +9,7 @@ "BatEntityMixin", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", + "CommandTreeS2CPacketMixin", "DataTrackerMixin", "DrawContextMixin", "DyeableItemMixin", @@ -47,8 +48,7 @@ "accessor.ScreenAccessor", "accessor.SkullBlockEntityAccessor", "accessor.WorldRendererAccessor", - "discordipc.ConnectionMixin", - "CommandTreeS2CPacketMixin" + "discordipc.ConnectionMixin" ], "injectors": { "defaultRequire": 1 -- cgit From 28155109bb079a46d3a7663cd9858f0f554daed0 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:54:59 -0400 Subject: Refactor WarpAutocomplete --- .../mixin/CommandTreeS2CPacketMixin.java | 7 ++-- .../skyblocker/skyblock/WarpAutocomplete.java | 41 +++++++--------------- 2 files changed, 16 insertions(+), 32 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java index ba8f7371..1cc1b8de 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java @@ -11,11 +11,10 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(targets = "net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket$CommandTree") public class CommandTreeS2CPacketMixin { - - @ModifyExpressionValue(method = "getNode", at = @At(ordinal = 1, value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/CommandTreeS2CPacket$CommandTree;getNode(I)Lcom/mojang/brigadier/tree/CommandNode;")) + @ModifyExpressionValue(method = "getNode", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/CommandTreeS2CPacket$CommandTree;getNode(I)Lcom/mojang/brigadier/tree/CommandNode;", ordinal = 1)) public CommandNode modifyCommandSuggestions(CommandNode original) { - if (WarpAutocomplete.COMMAND_THING != null && original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp") && Utils.isOnHypixel()) { - return WarpAutocomplete.COMMAND_THING; + if (Utils.isOnHypixel() && WarpAutocomplete.commandNode != null && original instanceof LiteralCommandNode literalCommandNode && literalCommandNode.getLiteral().equals("warp")) { + return WarpAutocomplete.commandNode; } return original; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java index dd07501c..8862185f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java @@ -2,16 +2,11 @@ package de.hysky.skyblocker.skyblock; import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.suggestion.Suggestions; -import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.tree.LiteralCommandNode; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.command.CommandSource; import org.jetbrains.annotations.Nullable; @@ -21,13 +16,16 @@ import org.slf4j.LoggerFactory; import java.util.List; import java.util.concurrent.CompletableFuture; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + /** * the mixin {@link de.hysky.skyblocker.mixin.CommandTreeS2CPacketMixin} */ public class WarpAutocomplete { - public static @Nullable LiteralCommandNode COMMAND_THING = null; - - protected static final Logger LOGGER = LoggerFactory.getLogger(WarpAutocomplete.class); + private static final Logger LOGGER = LoggerFactory.getLogger(WarpAutocomplete.class); + @Nullable + public static LiteralCommandNode commandNode; public static void init() { CompletableFuture.supplyAsync(() -> { @@ -37,25 +35,12 @@ public class WarpAutocomplete { } catch (Exception e) { LOGGER.error("[Skyblocker] Failed to download warps list", e); } - return List.of(""); - }).thenAccept(strings -> COMMAND_THING = ClientCommandManager - .literal("warp") + return List.of(); + }).thenAccept(warps -> commandNode = literal("warp") .requires(fabricClientCommandSource -> Utils.isOnSkyblock()) - .then(ClientCommandManager.argument("destination", new ArgType(strings)) - ).build()); - - } - - private record ArgType(List possibleWarps) implements ArgumentType { - - @Override - public String parse(StringReader reader) { - return reader.readUnquotedString(); - } - - @Override - public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { - return CommandSource.suggestMatching(possibleWarps, builder); - } + .then(argument("destination", StringArgumentType.string()) + .suggests((context, builder) -> CommandSource.suggestMatching(warps, builder)) + ).build() + ); } } -- cgit