aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorYasin <19829407+LifeIsAParadox@users.noreply.github.com>2025-07-06 16:29:31 +0200
committerYasin <19829407+LifeIsAParadox@users.noreply.github.com>2025-07-06 16:29:31 +0200
commit89d9f7d318b6acf6a838dddfc80f8c79a7c57704 (patch)
tree12fed479c98ac98f7a1ad8ba559e00bc4fb6c34e /src/main/java/de/hysky
parent6748b5d142b932ab1bbd8b7f0f388e5b584d1c89 (diff)
downloadSkyblocker-89d9f7d318b6acf6a838dddfc80f8c79a7c57704.tar.gz
Skyblocker-89d9f7d318b6acf6a838dddfc80f8c79a7c57704.tar.bz2
Skyblocker-89d9f7d318b6acf6a838dddfc80f8c79a7c57704.zip
joininstance autocomplete
autocomplete for /joininstance /joindungeon /joinkuudra
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/JoinInstanceAutocomplete.java61
2 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java
index 83605ca9..d3307fb8 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java
@@ -4,6 +4,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.brigadier.tree.CommandNode;
import com.mojang.brigadier.tree.LiteralCommandNode;
+import de.hysky.skyblocker.skyblock.JoinInstanceAutocomplete;
import de.hysky.skyblocker.skyblock.SackItemAutocomplete;
import de.hysky.skyblocker.skyblock.ViewstashAutocomplete;
import de.hysky.skyblocker.skyblock.WarpAutocomplete;
@@ -24,6 +25,9 @@ public class CommandTreeS2CPacketMixin {
case String s when s.equals("getfromsacks") && SackItemAutocomplete.longCommandNode != null -> SackItemAutocomplete.longCommandNode;
case String s when s.equals("gfs") && SackItemAutocomplete.shortCommandNode != null -> SackItemAutocomplete.shortCommandNode;
case String s when s.equals("viewstash") -> ViewstashAutocomplete.getCommandNode();
+ case String s when s.equals("joininstance") && JoinInstanceAutocomplete.joinInstanceCommand != null -> JoinInstanceAutocomplete.joinInstanceCommand;
+ case String s when s.equals("joindungeon") && JoinInstanceAutocomplete.dungeonCommand != null -> JoinInstanceAutocomplete.dungeonCommand;
+ case String s when s.equals("joinkuudra") && JoinInstanceAutocomplete.kuudraCommand != null -> JoinInstanceAutocomplete.kuudraCommand;
default -> original;
};
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/JoinInstanceAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/JoinInstanceAutocomplete.java
new file mode 100644
index 00000000..3aadd373
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/JoinInstanceAutocomplete.java
@@ -0,0 +1,61 @@
+package de.hysky.skyblocker.skyblock;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.tree.LiteralCommandNode;
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.utils.Http;
+import de.hysky.skyblocker.utils.Utils;
+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.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+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.mixins.CommandTreeS2CPacketMixin}
+ */
+public class JoinInstanceAutocomplete {
+ private static final Logger LOGGER = LoggerFactory.getLogger(JoinInstanceAutocomplete.class);
+
+ @Nullable
+ public static LiteralCommandNode<FabricClientCommandSource> joinInstanceCommand;
+ @Nullable
+ public static LiteralCommandNode<FabricClientCommandSource> dungeonCommand;
+ @Nullable
+ public static LiteralCommandNode<FabricClientCommandSource> kuudraCommand;
+
+ private static Map<String, String> instanceMap;
+
+ @Init
+ public static void init() {
+ CompletableFuture.runAsync(() -> {
+ try {
+ String json = Http.sendGetRequest("https://hysky.de/api/joininstances");
+
+ JsonObject obj = JsonParser.parseString(json).getAsJsonObject();
+ instanceMap = obj.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().getAsString()));
+
+ joinInstanceCommand = buildCommand("joininstance", s -> true);
+ dungeonCommand = buildCommand("joindungeon", s -> instanceMap.get(s).equalsIgnoreCase("Catacombs"));
+ kuudraCommand = buildCommand("joinkuudra", s -> instanceMap.get(s).equalsIgnoreCase("Kuudra"));
+
+ } catch (Exception e) {
+ LOGGER.error("[Skyblocker] Failed to load joininstance list", e);
+ }
+ });
+ }
+
+ private static LiteralCommandNode<FabricClientCommandSource> buildCommand(String command, java.util.function.Predicate<String> filter) {
+ return literal(command).requires(source -> Utils.isOnSkyblock()).then(argument("instance", StringArgumentType.word()).suggests((context, builder) -> CommandSource.suggestMatching(instanceMap.keySet().stream().filter(filter).sorted(), builder))).build();
+ }
+}
+