aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java24
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/WarpAutocomplete.java108
-rw-r--r--src/main/resources/skyblocker.mixins.json3
4 files changed, 136 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index 64f1bf37..9e613431 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -162,6 +162,8 @@ public class SkyblockerMod implements ClientModInitializer {
containerSolverManager.init();
statusBarTracker.init();
BeaconHighlighter.init();
+ WarpAutocomplete.init();
+
Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20);
Scheduler.INSTANCE.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 200);
Scheduler.INSTANCE.scheduleCyclic(LividColor::update, 10);
diff --git a/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java
new file mode 100644
index 00000000..2041fa88
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/CommandTreeS2CPacketMixin.java
@@ -0,0 +1,24 @@
+package de.hysky.skyblocker.mixin;
+
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import com.mojang.brigadier.tree.CommandNode;
+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;
+
+@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;"))
+ public CommandNode<? extends CommandSource> thing(CommandNode<CommandSource> original) {
+ if (original instanceof LiteralCommandNode<?> literalCommandNode && literalCommandNode.getLiteral().equals("warp") && (Utils.isOnHypixel())) {
+ System.out.println("INJECTED");
+ 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
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<FabricClientCommandSource> 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<String> possibleWarps) implements ArgumentType<String> {
+
+ @Override
+ public String parse(StringReader reader) throws CommandSyntaxException {
+ return reader.readUnquotedString();
+ }
+
+ @Override
+ public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
+ return CommandSource.suggestMatching(possibleWarps, builder);
+ }
+ }
+}
diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json
index 11002372..e8da092f 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -47,7 +47,8 @@
"accessor.ScreenAccessor",
"accessor.SkullBlockEntityAccessor",
"accessor.WorldRendererAccessor",
- "discordipc.ConnectionMixin"
+ "discordipc.ConnectionMixin",
+ "CommandTreeS2CPacketMixin"
],
"injectors": {
"defaultRequire": 1