diff options
Diffstat (limited to 'src/main')
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 |