diff --git a/src/main/java/net/shadow/client/feature/command/Command.java b/src/main/java/net/shadow/client/feature/command/Command.java index d9fc186..78ba063 100644 --- a/src/main/java/net/shadow/client/feature/command/Command.java +++ b/src/main/java/net/shadow/client/feature/command/Command.java @@ -6,9 +6,12 @@ package net.shadow.client.feature.command; import net.minecraft.client.MinecraftClient; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.util.Utils; +import java.util.Arrays; + public abstract class Command extends Utils.Logging { public final MinecraftClient client = MinecraftClient.getInstance(); @@ -49,8 +52,6 @@ public abstract class Command extends Utils.Logging { return aliases; } - public abstract ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex); - public abstract void onExecute(String[] args) throws CommandException; protected void validateArgumentsLength(String[] args, int requiredLength, String message) throws CommandException { @@ -58,8 +59,23 @@ public abstract class Command extends Utils.Logging { throw new CommandException("Invalid number of arguments: " + requiredLength + " arguments required", message); } - public String[] getSuggestions(String fullCommand, String[] args) { - return new String[0]; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + Object[] sug = getSuggestions(args, index); + if (sug != null && sug.length > 0) { + Object sample = sug[0]; + ArgumentType type = null; + for (ArgumentType value : ArgumentType.values()) { + if (Arrays.stream(value.getAppliesTo()).anyMatch(aClass -> aClass.isAssignableFrom(sample.getClass()))) { + type = value; + break; + } + } + return new PossibleArgument(type, Arrays.stream(sug).map(Object::toString).toList().toArray(String[]::new)); + } + return new PossibleArgument(null); } + public Object[] getSuggestions(String[] args, int lookingAtArgIndex) { + return new Object[0]; + } } diff --git a/src/main/java/net/shadow/client/feature/command/coloring/ArgumentType.java b/src/main/java/net/shadow/client/feature/command/coloring/ArgumentType.java index f45679d..4fc0845 100644 --- a/src/main/java/net/shadow/client/feature/command/coloring/ArgumentType.java +++ b/src/main/java/net/shadow/client/feature/command/coloring/ArgumentType.java @@ -4,19 +4,29 @@ package net.shadow.client.feature.command.coloring; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; + import java.awt.Color; public enum ArgumentType { - STRING(new Color(0x55FF55)), - NUMBER(new Color(0x009DFF)), - PLAYER(new Color(0xFF9900)); + STRING(new Color(0x55FF55), String.class), + NUMBER(new Color(0x009DFF), Integer.class, Double.class, Float.class, Long.class), + PLAYER(new Color(0xFF9900), PlayerEntity.class, AbstractClientPlayerEntity.class, LivingEntity.class); final Color color; + final Class<?>[] appliesTo; - ArgumentType(Color color) { + ArgumentType(Color color, Class<?>... appliesToClass) { this.color = color; + this.appliesTo = appliesToClass; } public Color getColor() { return color; } + + public Class<?>[] getAppliesTo() { + return appliesTo; + } } diff --git a/src/main/java/net/shadow/client/feature/command/coloring/PossibleArgument.java b/src/main/java/net/shadow/client/feature/command/coloring/PossibleArgument.java new file mode 100644 index 0000000..dec3bae --- /dev/null +++ b/src/main/java/net/shadow/client/feature/command/coloring/PossibleArgument.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) Shadow client, 0x150, Saturn5VFive 2022. All rights reserved. + */ + +package net.shadow.client.feature.command.coloring; + +public class PossibleArgument { + String[] suggestions; + ArgumentType type; + + public PossibleArgument(ArgumentType type, String... suggestions) { + this.suggestions = suggestions; + this.type = type; + } + + public ArgumentType getType() { + return type; + } + + public String[] getSuggestions() { + return suggestions; + } +} diff --git a/src/main/java/net/shadow/client/feature/command/coloring/StaticArgumentServer.java b/src/main/java/net/shadow/client/feature/command/coloring/StaticArgumentServer.java index b05dda3..9beec3a 100644 --- a/src/main/java/net/shadow/client/feature/command/coloring/StaticArgumentServer.java +++ b/src/main/java/net/shadow/client/feature/command/coloring/StaticArgumentServer.java @@ -5,8 +5,8 @@ package net.shadow.client.feature.command.coloring; public class StaticArgumentServer { - public static ArgumentType serveFromStatic(int index, ArgumentType... types) { - if (index >= types.length) return null; + public static PossibleArgument serveFromStatic(int index, PossibleArgument... types) { + if (index >= types.length) return new PossibleArgument(null); return types[index]; } } diff --git a/src/main/java/net/shadow/client/feature/command/impl/ApplyVel.java b/src/main/java/net/shadow/client/feature/command/impl/ApplyVel.java index b087403..d90b7be 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ApplyVel.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ApplyVel.java @@ -8,7 +8,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.StreamlineArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; public class ApplyVel extends Command { @@ -18,20 +18,13 @@ public class ApplyVel extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER, ArgumentType.NUMBER, ArgumentType.NUMBER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(x velocity)"}; - } else if (args.length == 2) { - return new String[]{"(y velocity)"}; - } else if (args.length == 3) { - return new String[]{"(z velocity)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return switch (index) { + case 0 -> new PossibleArgument(ArgumentType.STRING, "(x velocity)"); + case 1 -> new PossibleArgument(ArgumentType.STRING, "(y velocity)"); + case 2 -> new PossibleArgument(ArgumentType.STRING, "(z velocity)"); + default -> super.getSuggestionsWithType(index, args); + }; } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/AsConsole.java b/src/main/java/net/shadow/client/feature/command/impl/AsConsole.java index 6face62..539f182 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/AsConsole.java +++ b/src/main/java/net/shadow/client/feature/command/impl/AsConsole.java @@ -17,6 +17,7 @@ import net.minecraft.util.math.Direction; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; public class AsConsole extends Command { @@ -25,16 +26,8 @@ public class AsConsole extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length > 0) { - return new String[]{"(command)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return new PossibleArgument(ArgumentType.STRING, "(command)"); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Author.java b/src/main/java/net/shadow/client/feature/command/impl/Author.java index 144f4c0..3582f6d 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Author.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Author.java @@ -10,6 +10,7 @@ import net.minecraft.nbt.NbtString; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; public class Author extends Command { @@ -18,16 +19,8 @@ public class Author extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length > 0) { - return new String[]{"(new author)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return new PossibleArgument(ArgumentType.STRING, "(new author)"); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Ban.java b/src/main/java/net/shadow/client/feature/command/impl/Ban.java index 24a388a..e77de55 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Ban.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Ban.java @@ -13,7 +13,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.util.Utils; @@ -24,17 +24,12 @@ public class Ban extends Command { super("Ban", "Ban people from re-joining the server", "ban", "block"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); - } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) + return new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new)); + return super.getSuggestionsWithType(index, args); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Bind.java b/src/main/java/net/shadow/client/feature/command/impl/Bind.java index 967025a..cc6a989 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Bind.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Bind.java @@ -7,7 +7,7 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.feature.gui.screen.BindScreen; import net.shadow.client.feature.module.Module; @@ -20,16 +20,10 @@ public class Bind extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return ModuleRegistry.getModules().stream().map(Module::getName).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) + return new PossibleArgument(ArgumentType.STRING, ModuleRegistry.getModules().stream().map(Module::getName).toList().toArray(String[]::new)); + return super.getSuggestionsWithType(index, args); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Boot.java b/src/main/java/net/shadow/client/feature/command/impl/Boot.java index 3169b07..e5a1d6d 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Boot.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Boot.java @@ -13,18 +13,12 @@ import net.minecraft.network.packet.c2s.play.PlayerInteractItemC2SPacket; import net.minecraft.util.Hand; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; public class Boot extends Command { public Boot() { super("Boot", "Kicks all players in render distance", "boot"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { ItemStack boot = new ItemStack(Items.WRITTEN_BOOK, 1); diff --git a/src/main/java/net/shadow/client/feature/command/impl/CheckCmd.java b/src/main/java/net/shadow/client/feature/command/impl/CheckCmd.java index 790cc00..e4721b2 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/CheckCmd.java +++ b/src/main/java/net/shadow/client/feature/command/impl/CheckCmd.java @@ -9,18 +9,12 @@ import net.minecraft.network.packet.c2s.play.UpdateCommandBlockC2SPacket; import net.minecraft.util.math.Direction; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; public class CheckCmd extends Command { public CheckCmd() { super("CheckCmd", "Check if command blocks are enabled", "checkCmd"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { message("Checking command blocks"); diff --git a/src/main/java/net/shadow/client/feature/command/impl/ClearInventory.java b/src/main/java/net/shadow/client/feature/command/impl/ClearInventory.java index a5f5ffb..d3e95bf 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ClearInventory.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ClearInventory.java @@ -7,23 +7,12 @@ package net.shadow.client.feature.command.impl; import net.minecraft.screen.slot.SlotActionType; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; public class ClearInventory extends Command { public ClearInventory() { super("ClearInventory", "Clear your inventory the cool way", "clear", "clearInv", "void"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - return super.getSuggestions(fullCommand, args); - } - @Override public void onExecute(String[] args) { for (int i = 9; i < 45; i++) { diff --git a/src/main/java/net/shadow/client/feature/command/impl/Config.java b/src/main/java/net/shadow/client/feature/command/impl/Config.java index 912f139..e9d3ec0 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Config.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Config.java @@ -6,7 +6,7 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.config.SettingBase; import net.shadow.client.feature.module.Module; import net.shadow.client.feature.module.ModuleRegistry; @@ -21,20 +21,18 @@ public class Config extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.STRING, ArgumentType.STRING); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return ModuleRegistry.getModules().stream().map(mod -> mod.getName().replaceAll(" ", "-")).toList().toArray(String[]::new); - } else if (args.length == 2 && ModuleRegistry.getByName(args[0]) != null) { - return Objects.requireNonNull(ModuleRegistry.getByName(args[0].replaceAll("-", " "))).config.getSettings().stream().map(SettingBase::getName).toList().toArray(String[]::new); - } else if (args.length == 3) { - return new String[]{"(New value)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return switch (index) { + case 0 -> + new PossibleArgument(ArgumentType.STRING, ModuleRegistry.getModules().stream().map(mod -> mod.getName().replaceAll(" ", "-")).toList().toArray(String[]::new)); + case 1 -> { + if (ModuleRegistry.getByName(args[0]) != null) { + yield new PossibleArgument(ArgumentType.STRING, Objects.requireNonNull(ModuleRegistry.getByName(args[0].replaceAll("-", " "))).config.getSettings().stream().map(SettingBase::getName).toList().toArray(String[]::new)); + } else yield super.getSuggestionsWithType(index, args); + } + case 2 -> new PossibleArgument(ArgumentType.STRING, "(New value)"); + default -> super.getSuggestionsWithType(index, args); + }; } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ConfigUtils.java b/src/main/java/net/shadow/client/feature/command/impl/ConfigUtils.java index 5f544d9..bf93419 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ConfigUtils.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ConfigUtils.java @@ -17,6 +17,7 @@ import net.minecraft.text.Text; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.feature.config.SettingBase; @@ -42,18 +43,8 @@ public class ConfigUtils extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"load", "save"}; - } else if (args.length == 2 && args[0].equalsIgnoreCase("load")) { - return Arrays.stream(Objects.requireNonNull(CONFIG_STORAGE.listFiles())).map(File::getName).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "load", "save"), new PossibleArgument(ArgumentType.STRING, Arrays.stream(Objects.requireNonNull(CONFIG_STORAGE.listFiles())).map(File::getName).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Crash.java b/src/main/java/net/shadow/client/feature/command/impl/Crash.java index 3ef9b51..ec5e778 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Crash.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Crash.java @@ -10,6 +10,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -21,16 +22,8 @@ public class Crash extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Damage.java b/src/main/java/net/shadow/client/feature/command/impl/Damage.java index 144ad69..e17dbda 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Damage.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Damage.java @@ -10,6 +10,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -19,16 +20,8 @@ public class Damage extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(amount)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Drop.java b/src/main/java/net/shadow/client/feature/command/impl/Drop.java index c11c5ed..570cfe3 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Drop.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Drop.java @@ -5,7 +5,6 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; import net.shadow.client.helper.util.Utils; public class Drop extends Command { @@ -14,11 +13,6 @@ public class Drop extends Command { super("Drop", "Drops all items in your inventory", "drop", "d", "throw"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { for (int i = 0; i < 36; i++) { diff --git a/src/main/java/net/shadow/client/feature/command/impl/EVclip.java b/src/main/java/net/shadow/client/feature/command/impl/EVclip.java index 5354e66..7bd5ebb 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/EVclip.java +++ b/src/main/java/net/shadow/client/feature/command/impl/EVclip.java @@ -9,6 +9,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -18,16 +19,8 @@ public class EVclip extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(amount)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Effect.java b/src/main/java/net/shadow/client/feature/command/impl/Effect.java index 74b3c8f..41c9e62 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Effect.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Effect.java @@ -10,6 +10,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; public class Effect extends Command { @@ -19,29 +20,17 @@ public class Effect extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"give", "clear"}; - } else if (args.length == 2 && args[0].equalsIgnoreCase("give")) { - return new String[]{"(effect id)"}; - } else if (args.length == 3 && args[0].equalsIgnoreCase("give")) { - return new String[]{"(duration)"}; - } else if (args.length == 4 && args[0].equalsIgnoreCase("give")) { - return new String[]{"(strength)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - if (lookingAtArgIndex == 0) return ArgumentType.STRING; - if (args[0].equalsIgnoreCase("give")) { - return switch (lookingAtArgIndex) { - case 1, 2, 3 -> ArgumentType.NUMBER; - default -> null; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) return new PossibleArgument(ArgumentType.STRING, "give", "clear"); + else if (args[0].equalsIgnoreCase("give")) { + return switch (index) { + case 1 -> new PossibleArgument(ArgumentType.NUMBER, "(effect id)"); + case 2 -> new PossibleArgument(ArgumentType.NUMBER, "(duration)"); + case 3 -> new PossibleArgument(ArgumentType.NUMBER, "(strength)"); + default -> super.getSuggestionsWithType(index, args); }; } - return null; + return super.getSuggestionsWithType(index, args); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Equip.java b/src/main/java/net/shadow/client/feature/command/impl/Equip.java index 214907b..ed1e1d2 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Equip.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Equip.java @@ -8,6 +8,7 @@ import net.minecraft.screen.slot.SlotActionType; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -17,16 +18,8 @@ public class Equip extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"head", "chest", "legs", "feet"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "head", "chest", "legs", "feet")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/FakeItem.java b/src/main/java/net/shadow/client/feature/command/impl/FakeItem.java index eeb27c1..b9760fd 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/FakeItem.java +++ b/src/main/java/net/shadow/client/feature/command/impl/FakeItem.java @@ -16,6 +16,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import java.util.Arrays; @@ -27,24 +28,19 @@ public class FakeItem extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } else if (args.length == 2) { - return new String[]{"hand", "custom:(item id) [item nbt]"}; - } else if (args.length == 3 && args[1].toLowerCase().startsWith("custom:")) { - return new String[]{"(item nbt)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - if (lookingAtArgIndex == 0) return ArgumentType.PLAYER; - if (lookingAtArgIndex == 1 || lookingAtArgIndex == 2) - return ArgumentType.STRING; // fakeitem target custom:dogshit - if (args.length > 2) return ArgumentType.STRING; // nbt - return null; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return switch (index) { + case 0 -> + new PossibleArgument(ArgumentType.STRING, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new)); + case 1 -> new PossibleArgument(ArgumentType.STRING, "hand", "custom:(item id) [item nbt]"); + case 2 -> { + if (args[1].toLowerCase().startsWith("custom:")) { + yield new PossibleArgument(ArgumentType.STRING, "(item nbt)"); + } + yield super.getSuggestionsWithType(index, args); + } + default -> super.getSuggestionsWithType(index, args); + }; } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Find.java b/src/main/java/net/shadow/client/feature/command/impl/Find.java index 288d8b9..01f6e7e 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Find.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Find.java @@ -20,6 +20,7 @@ import net.minecraft.util.math.Vec3d; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.event.EventListener; @@ -107,16 +108,8 @@ public class Find extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(uuid)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(uuid)")); } @Override @@ -126,7 +119,6 @@ public class Find extends Command { error("Cant find the player, need GMC"); return; } - UUID u = Utils.Players.getUUIDFromName(args[0]); if (u == null) { error("Couldn't find user's uuid."); diff --git a/src/main/java/net/shadow/client/feature/command/impl/FloodLuckperms.java b/src/main/java/net/shadow/client/feature/command/impl/FloodLuckperms.java index fb5e27d..1855fb0 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/FloodLuckperms.java +++ b/src/main/java/net/shadow/client/feature/command/impl/FloodLuckperms.java @@ -8,6 +8,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -19,16 +20,8 @@ public class FloodLuckperms extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(amount)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ForEach.java b/src/main/java/net/shadow/client/feature/command/impl/ForEach.java index b9837a8..b93b5f0 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ForEach.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ForEach.java @@ -13,6 +13,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.event.EventType; @@ -50,20 +51,8 @@ public class ForEach extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"player", "tab"}; - } else if (args.length == 2) { - return new String[]{"(delay)"}; - } else if (args.length == 3) { - return new String[]{"(string)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.NUMBER, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "player", "tab"), new PossibleArgument(ArgumentType.NUMBER, "(delay)"), new PossibleArgument(ArgumentType.NUMBER, "(message)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ForceOP.java b/src/main/java/net/shadow/client/feature/command/impl/ForceOP.java index ddc3633..a232e8f 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ForceOP.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ForceOP.java @@ -17,7 +17,6 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; import net.shadow.client.feature.command.exception.CommandException; public class ForceOP extends Command { @@ -25,11 +24,6 @@ public class ForceOP extends Command { super("ForceOP", "Edit command blocks on paper 1.14 - 1.17", "forceop", "editcmd"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; - } - @Override public void onExecute(String[] args) throws CommandException { validateArgumentsLength(args, 1, "Provide command"); diff --git a/src/main/java/net/shadow/client/feature/command/impl/Gamemode.java b/src/main/java/net/shadow/client/feature/command/impl/Gamemode.java index 549a584..e80521c 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Gamemode.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Gamemode.java @@ -8,6 +8,7 @@ import net.minecraft.world.GameMode; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -20,16 +21,8 @@ public class Gamemode extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Arrays.stream(GameMode.values()).map(GameMode::getName).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, Arrays.stream(GameMode.values()).map(GameMode::getName).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/HClip.java b/src/main/java/net/shadow/client/feature/command/impl/HClip.java index 544c76a..2ee4e99 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/HClip.java +++ b/src/main/java/net/shadow/client/feature/command/impl/HClip.java @@ -10,6 +10,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.DoubleArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -19,16 +20,8 @@ public class HClip extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(amount)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Help.java b/src/main/java/net/shadow/client/feature/command/impl/Help.java index 9cfffbf..c879f8a 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Help.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Help.java @@ -6,7 +6,6 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.CommandRegistry; -import net.shadow.client.feature.command.coloring.ArgumentType; import java.awt.Color; @@ -16,11 +15,6 @@ public class Help extends Command { super("Help", "Shows all commands", "help", "h", "?", "cmds", "commands"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { message("All commands and their description"); diff --git a/src/main/java/net/shadow/client/feature/command/impl/Hologram.java b/src/main/java/net/shadow/client/feature/command/impl/Hologram.java index 43f0f6d..8e133d3 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Hologram.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Hologram.java @@ -10,6 +10,7 @@ import net.minecraft.util.math.Vec3d; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.manager.HologramManager; @@ -24,19 +25,8 @@ public class Hologram extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(flags)"}; - } - if (args.length == 2) { - return new String[]{"(message)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(flags)"), new PossibleArgument(ArgumentType.STRING, "(message)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Image.java b/src/main/java/net/shadow/client/feature/command/impl/Image.java index 587b4b0..59b55dc 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Image.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Image.java @@ -15,6 +15,7 @@ import net.minecraft.util.hit.BlockHitResult; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.event.EventType; @@ -48,22 +49,10 @@ public class Image extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"chat", "book", "lore"}; - } - if (args.length == 2) { - return new String[]{"(url)"}; - } - if (args.length == 3) { - return new String[]{"(size)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.STRING, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "chat", "book", "lore"), + new PossibleArgument(ArgumentType.STRING, "(url)"), + new PossibleArgument(ArgumentType.NUMBER, "(size)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Inject.java b/src/main/java/net/shadow/client/feature/command/impl/Inject.java index aef7d43..4f5b0aa 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Inject.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Inject.java @@ -10,6 +10,8 @@ import net.minecraft.nbt.StringNbtReader; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; +import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; public class Inject extends Command { @@ -18,13 +20,8 @@ public class Inject extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(nbt)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Invsee.java b/src/main/java/net/shadow/client/feature/command/impl/Invsee.java index 295dbd7..6686cda 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Invsee.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Invsee.java @@ -10,6 +10,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.util.Utils; @@ -23,16 +24,8 @@ public class Invsee extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ItemData.java b/src/main/java/net/shadow/client/feature/command/impl/ItemData.java index f0145ff..106536a 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ItemData.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ItemData.java @@ -13,6 +13,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -24,22 +25,10 @@ public class ItemData extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - if (args.length == 2) { - return new String[]{"hand", "offhand", "head", "chest", "legs", "feet"}; - } - if (args.length == 3) { - return new String[]{"--onlyShow"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER, ArgumentType.STRING, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new)), + new PossibleArgument(ArgumentType.STRING, "hand", "offhand", "head", "chest", "legs", "feet"), + new PossibleArgument(ArgumentType.STRING, "--onlyShow")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ItemExploit.java b/src/main/java/net/shadow/client/feature/command/impl/ItemExploit.java index 9825f04..16c1961 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ItemExploit.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ItemExploit.java @@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.feature.items.Item; import net.shadow.client.feature.items.ItemRegistry; @@ -28,10 +28,10 @@ public class ItemExploit extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return ItemRegistry.instance.getItems().stream().map(Item::getName).toList().toArray(String[]::new); - } else if (args.length > 1) { + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) + return new PossibleArgument(ArgumentType.STRING, ItemRegistry.instance.getItems().stream().map(Item::getName).toList().toArray(String[]::new)); + else { String eName = args[0]; Item meant = null; for (Item item : ItemRegistry.instance.getItems()) { @@ -41,26 +41,18 @@ public class ItemExploit extends Command { } } if (meant == null || meant.getOptions().length == 0) { - return new String[0]; + return super.getSuggestionsWithType(index, args); } List<String> alreadyFilledOut = new ArrayList<>(Arrays.asList(Arrays.copyOfRange(args, 1, args.length))); - // return all options mapped to start with --, and filter them based on what we already filled out - return Arrays.stream(meant.getOptions()).map(option -> "--" + option.getName()).filter(s -> alreadyFilledOut.stream().noneMatch(s1 -> s1.equalsIgnoreCase(s))).toList().toArray(String[]::new); + return new PossibleArgument(ArgumentType.STRING, Arrays.stream(meant.getOptions()).map(option -> "--" + option.getName()).filter(s -> alreadyFilledOut.stream().noneMatch(s1 -> s1.equalsIgnoreCase(s))).toList().toArray(String[]::new)); } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); } @Override public void onExecute(String[] args) throws CommandException { validateArgumentsLength(args, 1, "Provide exploit name"); if (!ShadowMain.client.interactionManager.hasCreativeInventory()) { - error("No creative inventory present - can't generate"); - return; + throw new CommandException("No creative inventory, can't generate", "get real"); } String n = args[0].toLowerCase(); Item meant = null; diff --git a/src/main/java/net/shadow/client/feature/command/impl/ItemSpoof.java b/src/main/java/net/shadow/client/feature/command/impl/ItemSpoof.java index 478c81c..cd25ac2 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ItemSpoof.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ItemSpoof.java @@ -12,6 +12,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -21,18 +22,9 @@ public class ItemSpoof extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Registry.ITEM.stream().map(p -> Registry.ITEM.getId(p).toString()).toList().toArray(String[]::new); - } else if (args.length == 2) { - return new String[]{"(amount)"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.NUMBER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, Registry.ITEM.stream().map(p -> Registry.ITEM.getId(p).toString()).toList().toArray(String[]::new)), + new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/KickSelf.java b/src/main/java/net/shadow/client/feature/command/impl/KickSelf.java index f122499..6d57d86 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/KickSelf.java +++ b/src/main/java/net/shadow/client/feature/command/impl/KickSelf.java @@ -12,6 +12,7 @@ import net.minecraft.util.Hand; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -21,16 +22,8 @@ public class KickSelf extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"quit", "chars", "packet", "self", "spam", "packets"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "quit", "chars", "packet", "self", "spam", "packets")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Kickall.java b/src/main/java/net/shadow/client/feature/command/impl/Kickall.java index 5d62d71..c58756a 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Kickall.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Kickall.java @@ -18,7 +18,6 @@ import net.minecraft.network.packet.s2c.login.LoginSuccessS2CPacket; import net.minecraft.text.Text; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; import java.net.InetSocketAddress; @@ -27,11 +26,6 @@ public class Kickall extends Command { super("Kickall", "Kicks every single person on an offline server", "kickall"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { InetSocketAddress sa = (InetSocketAddress) ShadowMain.client.getNetworkHandler().getConnection().getAddress(); diff --git a/src/main/java/net/shadow/client/feature/command/impl/Kill.java b/src/main/java/net/shadow/client/feature/command/impl/Kill.java index bd28b25..4d09e5d 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Kill.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Kill.java @@ -28,6 +28,7 @@ import net.minecraft.util.math.Vec3d; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.event.EventType; @@ -64,16 +65,8 @@ public class Kill extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } void handlePacket(PacketEvent pe) { diff --git a/src/main/java/net/shadow/client/feature/command/impl/LinkWolf.java b/src/main/java/net/shadow/client/feature/command/impl/LinkWolf.java index 8ab49d9..279f9ef 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/LinkWolf.java +++ b/src/main/java/net/shadow/client/feature/command/impl/LinkWolf.java @@ -4,9 +4,7 @@ package net.shadow.client.feature.command.impl; -import com.mojang.authlib.GameProfile; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -22,6 +20,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.util.Utils; @@ -34,16 +33,8 @@ public class LinkWolf extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(AbstractClientPlayerEntity::getGameProfile).map(GameProfile::getName).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/LogFlood.java b/src/main/java/net/shadow/client/feature/command/impl/LogFlood.java index 0015f1c..f8d3a12 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/LogFlood.java +++ b/src/main/java/net/shadow/client/feature/command/impl/LogFlood.java @@ -13,7 +13,6 @@ import net.minecraft.nbt.NbtString; import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; import net.shadow.client.helper.util.Utils; import java.util.Base64; @@ -28,11 +27,6 @@ public class LogFlood extends Command { super("LogFlood", "Floods the log files of players in render distance", "logflood", "lflood"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { if (running.get()) { diff --git a/src/main/java/net/shadow/client/feature/command/impl/MessageSpam.java b/src/main/java/net/shadow/client/feature/command/impl/MessageSpam.java index 3b62dff..2c2bd51 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/MessageSpam.java +++ b/src/main/java/net/shadow/client/feature/command/impl/MessageSpam.java @@ -8,6 +8,8 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; +import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import java.util.Arrays; @@ -18,20 +20,8 @@ public class MessageSpam extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - if (lookingAtArgIndex == 0) return ArgumentType.NUMBER; - return ArgumentType.STRING; - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(amount)"}; - } - if (args.length > 1) { - return new String[]{"(message)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)"), new PossibleArgument(ArgumentType.STRING, "(message)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Panic.java b/src/main/java/net/shadow/client/feature/command/impl/Panic.java index f9647b3..7cdb472 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Panic.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Panic.java @@ -7,6 +7,7 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.module.Module; import net.shadow.client.feature.module.ModuleRegistry; @@ -24,16 +25,8 @@ public class Panic extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"hard", "restore"}; - } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "hard", "restore")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/PermissionLevel.java b/src/main/java/net/shadow/client/feature/command/impl/PermissionLevel.java index 43f3c57..2f8bfd6 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/PermissionLevel.java +++ b/src/main/java/net/shadow/client/feature/command/impl/PermissionLevel.java @@ -8,6 +8,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -17,16 +18,8 @@ public class PermissionLevel extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"1", "2", "3", "4"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "1", "2", "3", "4")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Poof.java b/src/main/java/net/shadow/client/feature/command/impl/Poof.java index 3921e51..1a114ee 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Poof.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Poof.java @@ -13,6 +13,7 @@ import net.minecraft.screen.slot.SlotActionType; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import java.util.Objects; @@ -27,16 +28,8 @@ public class Poof extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/RageQuit.java b/src/main/java/net/shadow/client/feature/command/impl/RageQuit.java index 66f30e6..2e20099 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/RageQuit.java +++ b/src/main/java/net/shadow/client/feature/command/impl/RageQuit.java @@ -6,7 +6,6 @@ package net.shadow.client.feature.command.impl; import net.minecraft.client.util.GlfwUtil; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; import org.apache.commons.lang3.SystemUtils; import java.io.IOException; @@ -40,11 +39,6 @@ public class RageQuit extends Command { return true; } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { try { diff --git a/src/main/java/net/shadow/client/feature/command/impl/RandomBook.java b/src/main/java/net/shadow/client/feature/command/impl/RandomBook.java index 7da8a97..b6913fc 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/RandomBook.java +++ b/src/main/java/net/shadow/client/feature/command/impl/RandomBook.java @@ -8,6 +8,7 @@ import net.minecraft.network.packet.c2s.play.BookUpdateC2SPacket; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -25,19 +26,8 @@ public class RandomBook extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.NUMBER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"Ascii", "Raw", "Unicode"}; - } - if (args.length == 2) { - return new String[]{"(pages)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "ascii", "raw", "unicode"), new PossibleArgument(ArgumentType.NUMBER, "(pages)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Rename.java b/src/main/java/net/shadow/client/feature/command/impl/Rename.java index 50b753c..6b3682a 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Rename.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Rename.java @@ -10,6 +10,8 @@ import net.minecraft.text.Text; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; +import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.util.Utils; @@ -22,16 +24,8 @@ public class Rename extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(new item name)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(new name)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Say.java b/src/main/java/net/shadow/client/feature/command/impl/Say.java index 622a57d..898c74b 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Say.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Say.java @@ -7,6 +7,8 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; +import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import java.util.Objects; @@ -18,16 +20,8 @@ public class Say extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return ArgumentType.STRING; - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(message)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(message)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ServerCrash.java b/src/main/java/net/shadow/client/feature/command/impl/ServerCrash.java index 278016c..1a4c588 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ServerCrash.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ServerCrash.java @@ -29,6 +29,7 @@ import net.minecraft.util.math.Vec3d; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.IntegerArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.feature.gui.notifications.Notification; @@ -43,19 +44,9 @@ public class ServerCrash extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.NUMBER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"rider", "book", "malformednbt", "move", "papertest", "chunkoob", "mvcrash", "stackoverflow", "playtime", "playtimeold", "maptool", "fawe", "lag"}; - } - if (args.length == 2) { - return new String[]{"(power)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "rider", "book", "malformednbt", "move", "papertest", "chunkoob", "mvcrash", "stackoverflow", "playtime", "playtimeold", "maptool", "fawe", "lag"), + new PossibleArgument(ArgumentType.NUMBER, "(power)")); } @Override @@ -153,7 +144,7 @@ public class ServerCrash extends Command { } case "lag" -> { - for(int i = 0; i < 3000000; i++){ + for (int i = 0; i < 3000000; i++) { client.player.networkHandler.sendPacket(new RequestCommandCompletionsC2SPacket(0, "/")); } Notification.create(2000, "Server Crash", Notification.Type.SUCCESS, "Sent Quick Lag Crash"); diff --git a/src/main/java/net/shadow/client/feature/command/impl/SpawnData.java b/src/main/java/net/shadow/client/feature/command/impl/SpawnData.java index 5cc6241..0264899 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/SpawnData.java +++ b/src/main/java/net/shadow/client/feature/command/impl/SpawnData.java @@ -12,6 +12,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.StreamlineArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.nbt.NbtGroup; import net.shadow.client.helper.nbt.NbtList; @@ -26,32 +27,20 @@ public class SpawnData extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"position", "velocity", "cursor"}; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) { + return new PossibleArgument(ArgumentType.STRING, "position", "velocity", "cursor"); } - if (args.length > 1) { - if (args[0].equals("position") || args[0].equals("velocity")) { - return switch (args.length) { - case 2 -> new String[]{"x"}; - case 3 -> new String[]{"y"}; - case 4 -> new String[]{"z"}; - default -> new String[0]; - }; - } + String s = args[0]; + if (s.equalsIgnoreCase("position") || s.equalsIgnoreCase("velocity")) { + return switch (index) { + case 1 -> new PossibleArgument(ArgumentType.NUMBER, "x"); + case 2 -> new PossibleArgument(ArgumentType.NUMBER, "y"); + case 3 -> new PossibleArgument(ArgumentType.NUMBER, "z"); + default -> super.getSuggestionsWithType(index, args); + }; } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - if (lookingAtArgIndex == 0) return ArgumentType.STRING; - if (lookingAtArgIndex == 1 || lookingAtArgIndex == 2 || lookingAtArgIndex == 3) { - if (args[0].equalsIgnoreCase("position") || args[0].equals("velocity")) { - return ArgumentType.NUMBER; - } - } - return null; + return super.getSuggestionsWithType(index, args); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/StopServer.java b/src/main/java/net/shadow/client/feature/command/impl/StopServer.java index 74a77e2..efa3a08 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/StopServer.java +++ b/src/main/java/net/shadow/client/feature/command/impl/StopServer.java @@ -16,18 +16,12 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; public class StopServer extends Command { public StopServer() { super("StopServer", "Stops the server (real)", "stop"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { if (!ShadowMain.client.player.getAbilities().creativeMode) { diff --git a/src/main/java/net/shadow/client/feature/command/impl/Taco.java b/src/main/java/net/shadow/client/feature/command/impl/Taco.java index 20fb7ba..c5760e9 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Taco.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Taco.java @@ -8,7 +8,7 @@ import com.google.gson.Gson; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.feature.command.coloring.StaticArgumentServer; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.helper.Texture; import net.shadow.client.helper.event.EventType; @@ -177,22 +177,19 @@ public class Taco extends Command { } @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"fps", "play", "toggle"}; - } else if (args.length == 2) { - return switch (args[0].toLowerCase()) { - case "fps" -> new String[]{"(new fps)"}; - case "play" -> new String[]{"(path to gif file)"}; - default -> new String[0]; + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + if (index == 0) { + return new PossibleArgument(ArgumentType.STRING, "fps", "play", "toggle"); + } + String a = args[0]; + if (index == 1) { + return switch (a.toLowerCase()) { + case "fps" -> new PossibleArgument(ArgumentType.NUMBER, "(new fps)"); + case "play" -> new PossibleArgument(ArgumentType.STRING, "(path to gif file)"); + default -> super.getSuggestionsWithType(index, args); }; } - return super.getSuggestions(fullCommand, args); - } - - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING, ArgumentType.STRING); + return super.getSuggestionsWithType(index, args); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Test.java b/src/main/java/net/shadow/client/feature/command/impl/Test.java index 6159c87..6c529ec 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Test.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Test.java @@ -5,20 +5,11 @@ package net.shadow.client.feature.command.impl; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; -import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; -import net.shadow.client.feature.command.coloring.ArgumentType; -import net.shadow.client.helper.nbt.NbtGroup; -import net.shadow.client.helper.nbt.NbtObject; -import net.shadow.client.helper.nbt.NbtProperty; import net.shadow.client.helper.util.Utils; public class Test extends Command { @@ -26,11 +17,6 @@ public class Test extends Command { super("Test", "REAL", "test"); } - @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return null; - } - @Override public void onExecute(String[] args) { Utils.TickManager.runOnNextRender(() -> { diff --git a/src/main/java/net/shadow/client/feature/command/impl/TitleLag.java b/src/main/java/net/shadow/client/feature/command/impl/TitleLag.java index 0d5f069..1188a58 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/TitleLag.java +++ b/src/main/java/net/shadow/client/feature/command/impl/TitleLag.java @@ -14,6 +14,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.PlayerFromNameArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -25,16 +26,8 @@ public class TitleLag extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.PLAYER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.PLAYER, Objects.requireNonNull(ShadowMain.client.world).getPlayers().stream().map(abstractClientPlayerEntity -> abstractClientPlayerEntity.getGameProfile().getName()).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/Toggle.java b/src/main/java/net/shadow/client/feature/command/impl/Toggle.java index ad59ce7..cf02bb8 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/Toggle.java +++ b/src/main/java/net/shadow/client/feature/command/impl/Toggle.java @@ -6,6 +6,7 @@ package net.shadow.client.feature.command.impl; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; import net.shadow.client.feature.module.Module; @@ -18,16 +19,8 @@ public class Toggle extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return ModuleRegistry.getModules().stream().map(Module::getName).toList().toArray(String[]::new); - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, ModuleRegistry.getModules().stream().map(Module::getName).toList().toArray(String[]::new))); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/VClip.java b/src/main/java/net/shadow/client/feature/command/impl/VClip.java index 12e6225..8029a1a 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/VClip.java +++ b/src/main/java/net/shadow/client/feature/command/impl/VClip.java @@ -9,6 +9,7 @@ import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.argument.DoubleArgumentParser; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import net.shadow.client.feature.command.exception.CommandException; @@ -18,14 +19,8 @@ public class VClip extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.NUMBER); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) return new String[]{"(height)"}; - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.NUMBER, "(amount)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/command/impl/ViewNbt.java b/src/main/java/net/shadow/client/feature/command/impl/ViewNbt.java index 03ccd2c..ddff564 100644 --- a/src/main/java/net/shadow/client/feature/command/impl/ViewNbt.java +++ b/src/main/java/net/shadow/client/feature/command/impl/ViewNbt.java @@ -19,6 +19,7 @@ import net.minecraft.text.Text; import net.shadow.client.ShadowMain; import net.shadow.client.feature.command.Command; import net.shadow.client.feature.command.coloring.ArgumentType; +import net.shadow.client.feature.command.coloring.PossibleArgument; import net.shadow.client.feature.command.coloring.StaticArgumentServer; import java.util.Objects; @@ -32,16 +33,8 @@ public class ViewNbt extends Command { } @Override - public ArgumentType getArgumentType(String[] args, String lookingAtArg, int lookingAtArgIndex) { - return StaticArgumentServer.serveFromStatic(lookingAtArgIndex, ArgumentType.STRING); - } - - @Override - public String[] getSuggestions(String fullCommand, String[] args) { - if (args.length == 1) { - return new String[]{"(flags)"}; - } - return super.getSuggestions(fullCommand, args); + public PossibleArgument getSuggestionsWithType(int index, String[] args) { + return StaticArgumentServer.serveFromStatic(index, new PossibleArgument(ArgumentType.STRING, "(flags)")); } @Override diff --git a/src/main/java/net/shadow/client/feature/gui/screen/ConsoleScreen.java b/src/main/java/net/shadow/client/feature/gui/screen/ConsoleScreen.java index 2c9865f..f9fda5d 100644 --- a/src/main/java/net/shadow/client/feature/gui/screen/ConsoleScreen.java +++ b/src/main/java/net/shadow/client/feature/gui/screen/ConsoleScreen.java @@ -129,7 +129,7 @@ public class ConsoleScreen extends ClientScreen implements FastTickable { if (args.length > 0) { Command c = CommandRegistry.getByAlias(cmd); if (c != null) { - a = List.of(c.getSuggestions(command, args)); + a = List.of(c.getSuggestionsWithType(args.length - 1, args).getSuggestions()); } else { return new ArrayList<>(); // we have no command to ask -> we have no suggestions } diff --git a/src/main/java/net/shadow/client/feature/module/ModuleRegistry.java b/src/main/java/net/shadow/client/feature/module/ModuleRegistry.java index d4fdb80..7a5dd40 100644 --- a/src/main/java/net/shadow/client/feature/module/ModuleRegistry.java +++ b/src/main/java/net/shadow/client/feature/module/ModuleRegistry.java @@ -89,6 +89,7 @@ import net.shadow.client.feature.module.impl.movement.Step; import net.shadow.client.feature.module.impl.movement.Swing; import net.shadow.client.feature.module.impl.render.BlockHighlighting; import net.shadow.client.feature.module.impl.render.CaveMapper; +import net.shadow.client.feature.module.impl.render.ChestHighlighter; import net.shadow.client.feature.module.impl.render.ClickGUI; import net.shadow.client.feature.module.impl.render.ESP; import net.shadow.client.feature.module.impl.render.FakeHacker; @@ -300,6 +301,7 @@ public class ModuleRegistry { vanillaModules.add(new InteractCrash()); vanillaModules.add(new FlightCrash()); vanillaModules.add(new ClickTP()); + vanillaModules.add(new ChestHighlighter()); rebuildSharedModuleList(); } diff --git a/src/main/java/net/shadow/client/feature/module/impl/render/ChestHighlighter.java b/src/main/java/net/shadow/client/feature/module/impl/render/ChestHighlighter.java new file mode 100644 index 0000000..3235cb1 --- /dev/null +++ b/src/main/java/net/shadow/client/feature/module/impl/render/ChestHighlighter.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) Shadow client, 0x150, Saturn5VFive 2022. All rights reserved. + */ + +package net.shadow.client.feature.module.impl.render; + +import net.minecraft.block.ChestBlock; +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.shadow.client.feature.module.Module; +import net.shadow.client.feature.module.ModuleType; +import net.shadow.client.helper.event.EventListener; +import net.shadow.client.helper.event.EventType; +import net.shadow.client.helper.event.Events; +import net.shadow.client.helper.event.events.BlockEntityRenderEvent; +import net.shadow.client.helper.render.Renderer; + +import java.awt.Color; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +public class ChestHighlighter extends Module { + List<BlockPos> positions = new CopyOnWriteArrayList<>(); + + public ChestHighlighter() { + super("ChestHighlighter", "No description", ModuleType.RENDER); + Events.registerEventHandlerClass(this); + } + + void addIfNotExisting(BlockPos p) { + if (positions.stream().noneMatch(blockPos -> blockPos.equals(p))) positions.add(p); + } + + void remove(BlockPos p) { + positions.removeIf(blockPos -> blockPos.equals(p)); + } + + @EventListener(type = EventType.BLOCK_ENTITY_RENDER) + void r(BlockEntityRenderEvent be) { + if (!this.isEnabled()) return; + if (be.getBlockEntity() instanceof ChestBlockEntity) { + addIfNotExisting(be.getBlockEntity().getPos()); + } + } + + @Override + public void tick() { + positions.removeIf(blockPos -> !(client.world.getBlockState(blockPos).getBlock() instanceof ChestBlock)); + } + + @Override + public void enable() { + + } + + @Override + public void disable() { + + } + + @Override + public String getContext() { + return null; + } + + @Override + public void onWorldRender(MatrixStack matrices) { + for (BlockPos position : positions) { + Renderer.R3D.renderFadingBlock(Color.WHITE, Color.RED, Vec3d.of(position), new Vec3d(1, 1, 1), 500); + } + } + + @Override + public void onHudRender() { + + } +} diff --git a/src/main/java/net/shadow/client/helper/render/Renderer.java b/src/main/java/net/shadow/client/helper/render/Renderer.java index 7821676..6069745 100644 --- a/src/main/java/net/shadow/client/helper/render/Renderer.java +++ b/src/main/java/net/shadow/client/helper/render/Renderer.java @@ -65,9 +65,12 @@ public class Renderer { if (fade == null) continue; long lifetimeLeft = fade.getLifeTimeLeft(); double progress = lifetimeLeft / (double) fade.lifeTime; + double ip = 1 - progress; + stack.push(); Color out = Util.modify(fade.outline, -1, -1, -1, (int) (fade.outline.getAlpha() * progress)); Color fill = Util.modify(fade.fill, -1, -1, -1, (int) (fade.fill.getAlpha() * progress)); - Renderer.R3D.renderEdged(stack, fade.start, fade.dimensions, fill, out); + Renderer.R3D.renderEdged(stack, fade.start.add(new Vec3d(0.2, 0.2, 0.2).multiply(ip)), fade.dimensions.subtract(new Vec3d(.4, .4, .4).multiply(ip)), fill, out); + stack.pop(); } fades = clone; } diff --git a/src/main/java/net/shadow/client/mixin/AChatScreenMixin.java b/src/main/java/net/shadow/client/mixin/AChatScreenMixin.java index c48c4b0..0ca7096 100644 --- a/src/main/java/net/shadow/client/mixin/AChatScreenMixin.java +++ b/src/main/java/net/shadow/client/mixin/AChatScreenMixin.java @@ -85,7 +85,7 @@ public class AChatScreenMixin extends Screen { if (args.length > 0) { Command c = CommandRegistry.getByAlias(cmd); if (c != null) { - a = List.of(c.getSuggestions(command, args)); + a = List.of(c.getSuggestionsWithType(args.length - 1, args).getSuggestions()); } else { return new ArrayList<>(); // we have no command to ask -> we have no suggestions } @@ -208,7 +208,7 @@ public class AChatScreenMixin extends Screen { countedSpaceBefore = false; if (i < integer) continue; if (countedGaps >= 1) { - ArgumentType current = c.getArgumentType(args, "", countedGaps - 1); + ArgumentType current = c.getSuggestionsWithType(countedGaps - 1, args).getType(); int col = 0xFFFFFF; if (current != null) col = current.getColor().getRGB(); texts.add(OrderedText.styledForwardsVisitedString(String.valueOf(c1), Style.EMPTY.withColor(col)));