diff options
| author | Yasin <19829407+LifeIsAParadox@users.noreply.github.com> | 2025-07-06 16:29:31 +0200 |
|---|---|---|
| committer | Yasin <19829407+LifeIsAParadox@users.noreply.github.com> | 2025-07-06 16:29:31 +0200 |
| commit | 89d9f7d318b6acf6a838dddfc80f8c79a7c57704 (patch) | |
| tree | 12fed479c98ac98f7a1ad8ba559e00bc4fb6c34e /src/main/java/de/hysky | |
| parent | 6748b5d142b932ab1bbd8b7f0f388e5b584d1c89 (diff) | |
| download | Skyblocker-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.java | 4 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/JoinInstanceAutocomplete.java | 61 |
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(); + } +} + |
