diff options
| author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-07-21 15:21:05 -0400 |
|---|---|---|
| committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-07-21 15:21:05 -0400 |
| commit | 4a43f346a9415f338aff68e51d6cd5f62c57608e (patch) | |
| tree | 7560b4abaab834e46b645b60d29fa8f46842fa17 /src/main/java | |
| parent | 1d6328018a5c729f83f60afe85fe28c05f1dcf92 (diff) | |
| download | Skyblocker-4a43f346a9415f338aff68e51d6cd5f62c57608e.tar.gz Skyblocker-4a43f346a9415f338aff68e51d6cd5f62c57608e.tar.bz2 Skyblocker-4a43f346a9415f338aff68e51d6cd5f62c57608e.zip | |
Add RNG Meter Autocomplete feature
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java | 3 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/RngMeterAutocomplete.java | 60 |
2 files changed, 63 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 d3307fb8..17d7af8d 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/CommandTreeS2CPacketMixin.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; import de.hysky.skyblocker.skyblock.JoinInstanceAutocomplete; +import de.hysky.skyblocker.skyblock.RngMeterAutocomplete; import de.hysky.skyblocker.skyblock.SackItemAutocomplete; import de.hysky.skyblocker.skyblock.ViewstashAutocomplete; import de.hysky.skyblocker.skyblock.WarpAutocomplete; @@ -28,6 +29,8 @@ public class CommandTreeS2CPacketMixin { 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; + case String s when s.equals("rngmeter") && RngMeterAutocomplete.longCommand != null -> RngMeterAutocomplete.longCommand; + case String s when s.equals("rng") && RngMeterAutocomplete.shortCommand != null -> RngMeterAutocomplete.shortCommand; default -> original; }; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/RngMeterAutocomplete.java b/src/main/java/de/hysky/skyblocker/skyblock/RngMeterAutocomplete.java new file mode 100644 index 00000000..00acc953 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/RngMeterAutocomplete.java @@ -0,0 +1,60 @@ +package de.hysky.skyblocker.skyblock; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; + +import com.google.gson.JsonParser; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.tree.LiteralCommandNode; +import com.mojang.logging.LogUtils; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; + +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; + +public class RngMeterAutocomplete { + private static final Logger LOGGER = LogUtils.getLogger(); + private static final Codec<Map<String, List<String>>> CODEC = Codec.unboundedMap(Codec.STRING, Codec.STRING.listOf()); + private static Map<String, List<String>> rngMeters = new HashMap<>(); + @Nullable + public static LiteralCommandNode<FabricClientCommandSource> longCommand; + @Nullable + public static LiteralCommandNode<FabricClientCommandSource> shortCommand; + + @Init + public static void init() { + CompletableFuture.runAsync(() -> { + try { + String json = Http.sendGetRequest("https://hysky.de/api/rngmeters"); + rngMeters = CODEC.parse(JsonOps.INSTANCE, JsonParser.parseString(json)).getOrThrow(); + + longCommand = createCommandNode("rngmeter"); + shortCommand = createCommandNode("rng"); + } catch (Exception e) { + LOGGER.error("[Skyblocker RNG Meter Autocomplete] Failed to load RNG Meter data.", e); + } + }); + } + + private static LiteralCommandNode<FabricClientCommandSource> createCommandNode(String command) { + return literal(command) + .requires(source -> Utils.isOnSkyblock()) + .then(argument("type", StringArgumentType.string()) + .suggests((context, builder) -> CommandSource.suggestMatching(rngMeters.keySet(), builder)) + .then(argument("subtype", StringArgumentType.string()) + .suggests((context, builder) -> CommandSource.suggestMatching(rngMeters.getOrDefault(StringArgumentType.getString(context, "type"), List.of()), builder))) + ).build(); + } +} |
