diff --git a/src/main/java/ftbsc/bscv/BoSCoVicino.java b/src/main/java/ftbsc/bscv/BoSCoVicino.java index 3b258d6..a3911c0 100644 --- a/src/main/java/ftbsc/bscv/BoSCoVicino.java +++ b/src/main/java/ftbsc/bscv/BoSCoVicino.java @@ -1,5 +1,7 @@ package ftbsc.bscv; +import ftbsc.bscv.api.IModule; +import ftbsc.bscv.system.ModManager; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.IngameMenuScreen; import net.minecraft.client.gui.widget.button.Button; @@ -25,56 +27,49 @@ import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.exceptions.CommandSyntaxException; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import ftbsc.bscv.modules.Module; import ftbsc.bscv.modules.vision.*; import ftbsc.bscv.modules.motion.*; import ftbsc.bscv.modules.self.*; import ftbsc.bscv.modules.hud.*; import ftbsc.bscv.modules.defense.*; -// The value here should match an entry in the META-INF/mods.toml file @Mod("bscv") public class BoSCoVicino implements ICommons { public static String MOD_ID = "bscv"; - // Directly reference a log4j logger. public static final Logger LOGGER = LogManager.getLogger(); - public static List mods; + public static ModManager modManager; //todo this should not be static private final CommandDispatcher dispatcher = new CommandDispatcher<>(); public static ForgeConfigSpec spec; public BoSCoVicino() { - // Register the setup method for modloading FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup); - // load and register mods - BoSCoVicino.mods = new ArrayList(); - ForgeConfigSpec.Builder cfg = new ForgeConfigSpec.Builder(); CommandDispatcher dp = this.dispatcher; - BoSCoVicino.mods.add(new AutoDisconnect(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new ActiveModules(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new VanillaFlight(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new FastInteract(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new InfoDisplay(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new Coordinates(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new EntityList(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new PlayerList(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new Fullbright(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new AntiHunger(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new PortalGui(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new AutoFish(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new AutoTool(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new Freecam(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new BoatFly(cfg, dp).done(cfg)); - BoSCoVicino.mods.add(new Aura(cfg, dp).done(cfg)); + this.modManager = new ModManager(cfg, dp); + + this.modManager.registerMod(new AutoDisconnect()); + this.modManager.registerMod(new ActiveModules()); + this.modManager.registerMod(new VanillaFlight()); + this.modManager.registerMod(new FastInteract()); + this.modManager.registerMod(new InfoDisplay()); + this.modManager.registerMod(new Coordinates()); + this.modManager.registerMod(new EntityList()); + this.modManager.registerMod(new PlayerList()); + this.modManager.registerMod(new Fullbright()); + this.modManager.registerMod(new AntiHunger()); + this.modManager.registerMod(new PortalGui()); + this.modManager.registerMod(new AutoFish()); + this.modManager.registerMod(new AutoTool()); + this.modManager.registerMod(new Freecam()); + this.modManager.registerMod(new BoatFly()); + this.modManager.registerMod(new Aura()); BoSCoVicino.spec = cfg.build(); @@ -95,8 +90,8 @@ public class BoSCoVicino implements ICommons { private void clientSetup(final FMLClientSetupEvent event) { LOGGER.info("Initializing modules"); - for (Module m : BoSCoVicino.mods) { - if (m.enabled.get()) m.enable(); + for (IModule m : modManager.mods) { + if (m.isEnabled()) m.enable(); } // TEMPORARY! add command to regenerate suggestions @@ -132,8 +127,8 @@ public class BoSCoVicino implements ICommons { dispatcher.register( Commands.literal("toggle-all") .executes(ctx -> { - for (Module mod : BoSCoVicino.mods) { - if (mod.enabled.get()) { + for (IModule mod : modManager.mods) { + if (mod.isEnabled()) { mod.disable(); mod.enable(); } diff --git a/src/main/java/ftbsc/bscv/api/ICommand.java b/src/main/java/ftbsc/bscv/api/ICommand.java new file mode 100644 index 0000000..24e309c --- /dev/null +++ b/src/main/java/ftbsc/bscv/api/ICommand.java @@ -0,0 +1,8 @@ +package ftbsc.bscv.api; + +import com.mojang.brigadier.CommandDispatcher; +import net.minecraft.command.CommandSource; + +public interface ICommand extends ILoadable { + CommandDispatcher getDispatcher(); +} diff --git a/src/main/java/ftbsc/bscv/api/ILoadable.java b/src/main/java/ftbsc/bscv/api/ILoadable.java new file mode 100644 index 0000000..e39caec --- /dev/null +++ b/src/main/java/ftbsc/bscv/api/ILoadable.java @@ -0,0 +1,5 @@ +package ftbsc.bscv.api; + +public interface ILoadable { + String getName(); +} diff --git a/src/main/java/ftbsc/bscv/api/IModule.java b/src/main/java/ftbsc/bscv/api/IModule.java new file mode 100644 index 0000000..a6a6d12 --- /dev/null +++ b/src/main/java/ftbsc/bscv/api/IModule.java @@ -0,0 +1,17 @@ +package ftbsc.bscv.api; + +import net.minecraftforge.common.ForgeConfigSpec; + +public interface IModule> extends ICommand { + T getGroup(); + + ForgeConfigSpec.Builder getConfigBuilder(); + + void toggle(); + + void enable(); + + void disable(); + + boolean isEnabled(); +} diff --git a/src/main/java/ftbsc/bscv/modules/AbstractModule.java b/src/main/java/ftbsc/bscv/modules/AbstractModule.java index b17f3b3..7e6d2a6 100644 --- a/src/main/java/ftbsc/bscv/modules/AbstractModule.java +++ b/src/main/java/ftbsc/bscv/modules/AbstractModule.java @@ -3,6 +3,9 @@ package ftbsc.bscv.modules; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.BoolArgumentType; +import ftbsc.bscv.BoSCoVicino; +import ftbsc.bscv.api.IModule; +import ftbsc.bscv.system.ModManager; import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; import net.minecraftforge.common.ForgeConfigSpec; @@ -10,7 +13,7 @@ import net.minecraftforge.common.MinecraftForge; import static ftbsc.bscv.BoSCoVicino.log; -public abstract class AbstractModule { +public abstract class AbstractModule implements IModule { public enum Group { SELF, HUD, @@ -20,20 +23,27 @@ public abstract class AbstractModule { MOTION, } - public final String name; - public final Group group; - protected ForgeConfigSpec.ConfigValue enabled; - public void initialize(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - builder.push(this.name.toLowerCase()); - this.enabled = builder - .comment(String.format("Enables %s", this.name)) + @Override + public ForgeConfigSpec.Builder getConfigBuilder() { + return BoSCoVicino.modManager.getCfgBuilder(); + } + + @Override + public CommandDispatcher getDispatcher() { + return BoSCoVicino.modManager.getDispatcher(); + } + + public AbstractModule() { + this.getConfigBuilder().push(this.getName().toLowerCase()); + this.enabled = this.getConfigBuilder() + .comment(String.format("Enables %s", this.getName())) .define("enabled", false); // TODO: can this be made an util or moved somewhere else? - dispatcher.register( - Commands.literal(this.name.toLowerCase()) + this.getDispatcher().register( + Commands.literal(this.getName().toLowerCase()) .then( Commands.literal("toggle") .then( @@ -53,31 +63,13 @@ public abstract class AbstractModule { }) ) .executes(ctx -> { - log(String.format("%s [%s]", this.name, this.enabled.get() ? "ON" : "OFF")); + log(String.format("%s [%s]", this.getName(), this.enabled.get() ? "ON" : "OFF")); // TODO: print all mod options! return 1; }) ); - this.register(builder, dispatcher); - - builder.pop(); - } - - public abstract void register(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher); - - protected AbstractModule(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - // TODO can this be done in a less magic way? - String[] pkg = this.getClass().getPackage().getName().split("."); - this.group = Group.valueOf(pkg[pkg.length-1].toUpperCase()); - this.name = this.getClass().getName(); - - this.initialize(builder, dispatcher); - } - - public AbstractModule done(ForgeConfigSpec.Builder builder) { - builder.pop(); - return this; + this.getConfigBuilder().pop(); } protected void onEnabled() {} @@ -93,7 +85,7 @@ public abstract class AbstractModule { this.enabled.set(true); // this.enabled.save(); this.onEnabled(); - log(String.format("%s ON", this.name)); + log(String.format("%s ON", this.getName())); } public final void disable() { @@ -101,6 +93,11 @@ public abstract class AbstractModule { this.enabled.set(false); // this.enabled.save(); this.onDisabled(); - log(String.format("%s OFF", this.name)); + log(String.format("%s OFF", this.getName())); + } + + @Override + public boolean isEnabled() { + return enabled.get(); } } diff --git a/src/main/java/ftbsc/bscv/modules/HudModule.java b/src/main/java/ftbsc/bscv/modules/HudModule.java index 4a893fb..52cba0c 100644 --- a/src/main/java/ftbsc/bscv/modules/HudModule.java +++ b/src/main/java/ftbsc/bscv/modules/HudModule.java @@ -8,46 +8,46 @@ import ftbsc.bscv.tools.Setting; import net.minecraft.command.CommandSource; import net.minecraftforge.common.ForgeConfigSpec; -public abstract class HudModule extends Module { +public abstract class HudModule extends AbstractModule { public final ForgeConfigSpec.ConfigValue x; public final ForgeConfigSpec.ConfigValue y; public final ForgeConfigSpec.ConfigValue scale; public final ForgeConfigSpec.ConfigValue anchor; - protected HudModule(String name, ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super(name, Group.HUD, builder, dispatcher); + @Override + public Group getGroup() { + return Group.HUD; + } + protected HudModule() { + super(); this.x = Setting.Number.builder() .name("x") .comment("horizontal offset") .fallback(0) - .build(this.name, builder, dispatcher); + .build(this); this.y = Setting.Number.builder() .name("y") .comment("vertical offset") .fallback(0) - .build(this.name, builder, dispatcher); + .build(this); this.scale = Setting.Decimal.builder() .name("scale") .comment("scale of element") .fallback(1.0) - .build(this.name, builder, dispatcher); + .build(this); this.anchor = Setting.Switch.builder(Anchor.class) .name("anchor") .comment("origin point for coordinates") .fallback(Anchor.TOPLEFT) - .build(this.name, builder, dispatcher); + .build(this); } protected boolean shouldHide() { - if (ICommons.MC.options.renderDebug) { - return true; - } - - return false; + return ICommons.MC.options.renderDebug; } } diff --git a/src/main/java/ftbsc/bscv/modules/QuickModule.java b/src/main/java/ftbsc/bscv/modules/QuickModule.java index a54a3e9..5e06ea5 100644 --- a/src/main/java/ftbsc/bscv/modules/QuickModule.java +++ b/src/main/java/ftbsc/bscv/modules/QuickModule.java @@ -14,17 +14,17 @@ import net.minecraftforge.fml.client.registry.ClientRegistry; import ftbsc.bscv.BoSCoVicino; // TODO rename -public class QuickModule extends Module { +public abstract class QuickModule extends AbstractModule { public static final int UNBOUND = InputMappings.UNKNOWN.getValue(); private class ToggleHook { private final KeyBinding key; - private final Module mod; + private final QuickModule mod; private boolean debounce; // TODO all examples show isPressed() to get a debounced value // but it seems to be missing? making my own debounce for now - protected ToggleHook(KeyBinding key, Module mod) { + protected ToggleHook(KeyBinding key, QuickModule mod) { this.key = key; this.mod = mod; this.debounce = false; @@ -50,11 +50,13 @@ public class QuickModule extends Module { } public final KeyBinding keybind; - - public QuickModule(String name, Group group, int default_key, ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super(name, group, builder, dispatcher); - this.keybind = new KeyBinding(key_name(name), default_key, key_category()); + protected abstract int getDefaultKey(); + + public QuickModule() { + super(); + + this.keybind = new KeyBinding(key_name(this.getName()), this.getDefaultKey(), key_category()); ClientRegistry.registerKeyBinding(this.keybind); // register a separate subclass on the hook, so that it's always listening diff --git a/src/main/java/ftbsc/bscv/modules/defense/Aura.java b/src/main/java/ftbsc/bscv/modules/defense/Aura.java index 0976f22..9bb3f25 100644 --- a/src/main/java/ftbsc/bscv/modules/defense/Aura.java +++ b/src/main/java/ftbsc/bscv/modules/defense/Aura.java @@ -1,7 +1,6 @@ package ftbsc.bscv.modules.defense; import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.DoubleArgumentType; import ftbsc.bscv.ICommons; import ftbsc.bscv.modules.QuickModule; @@ -16,18 +15,33 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class Aura extends QuickModule implements ICommons { + @Override + public String getName() { + return "Aura"; + } + + @Override + public Group getGroup() { + return Group.DEFENSE; + } + + @Override + protected int getDefaultKey() { + return UNBOUND; + } + public final ForgeConfigSpec.ConfigValue reach; public final ForgeConfigSpec.ConfigValue strenght; - public Aura(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("Aura", Group.DEFENSE, UNBOUND, builder, dispatcher); + public Aura() { + super(); this.reach = Setting.Decimal.builder() .min(0.) .fallback(5.) .name("reach") .comment("aura attack reach") - .build(this.name, builder, dispatcher); + .build(this); this.strenght = Setting.Decimal.builder() .min(0.) @@ -35,7 +49,7 @@ public class Aura extends QuickModule implements ICommons { .name("strenght") .comment("minimum strenght required for attack") .fallback(1.) - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/hud/ActiveModules.java b/src/main/java/ftbsc/bscv/modules/hud/ActiveModules.java index 069f912..d754ee9 100644 --- a/src/main/java/ftbsc/bscv/modules/hud/ActiveModules.java +++ b/src/main/java/ftbsc/bscv/modules/hud/ActiveModules.java @@ -1,33 +1,30 @@ package ftbsc.bscv.modules.hud; -import static ftbsc.bscv.tools.Text.TextBuilder; - -import com.mojang.brigadier.CommandDispatcher; - import ftbsc.bscv.BoSCoVicino; import ftbsc.bscv.ICommons; -import net.minecraft.command.CommandSource; +import ftbsc.bscv.api.IModule; +import ftbsc.bscv.modules.HudModule; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; -import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; -import ftbsc.bscv.modules.HudModule; -import ftbsc.bscv.modules.Module; + +import static ftbsc.bscv.tools.Text.TextBuilder; public class ActiveModules extends HudModule implements ICommons { - public ActiveModules(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("ActiveModules", builder, dispatcher); + @Override + public String getName() { + return "ActiveModules"; } @SubscribeEvent public void onRenderOverlay(RenderGameOverlayEvent event) { if (event.getType() == ElementType.TEXT) { int offset = 0; - for (Module m : BoSCoVicino.mods) { - if (m.enabled.get() && m.group != Group.HUD) { + for (IModule m : BoSCoVicino.modManager.mods) { + if (m.isEnabled() && m.getGroup() != Group.HUD) { TextBuilder() - .txt(String.format("%s <", m.name)) + .txt(String.format("%s <", m.getName())) .anchor(this.anchor.get()) .x(this.x.get()) .y(this.y.get() + offset) diff --git a/src/main/java/ftbsc/bscv/modules/hud/Coordinates.java b/src/main/java/ftbsc/bscv/modules/hud/Coordinates.java index c034756..bf6923d 100644 --- a/src/main/java/ftbsc/bscv/modules/hud/Coordinates.java +++ b/src/main/java/ftbsc/bscv/modules/hud/Coordinates.java @@ -14,9 +14,10 @@ import ftbsc.bscv.ICommons; import ftbsc.bscv.modules.HudModule; public class Coordinates extends HudModule implements ICommons { - - public Coordinates(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("Coordinates", builder, dispatcher); + + @Override + public String getName() { + return "Coordinates"; } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/hud/EntityList.java b/src/main/java/ftbsc/bscv/modules/hud/EntityList.java index ae58ce1..954e8b7 100644 --- a/src/main/java/ftbsc/bscv/modules/hud/EntityList.java +++ b/src/main/java/ftbsc/bscv/modules/hud/EntityList.java @@ -24,16 +24,21 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class EntityList extends HudModule implements ICommons { + @Override + public String getName() { + return "EntityList"; + } + public final ForgeConfigSpec.ConfigValue search; - public EntityList(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("EntityList", builder, dispatcher); + public EntityList() { + super(); this.search = Setting.Str.builder() .name("search") .comment("highlight names containing this text") .fallback("") - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/hud/InfoDisplay.java b/src/main/java/ftbsc/bscv/modules/hud/InfoDisplay.java index 22e1bf2..240ce83 100644 --- a/src/main/java/ftbsc/bscv/modules/hud/InfoDisplay.java +++ b/src/main/java/ftbsc/bscv/modules/hud/InfoDisplay.java @@ -23,6 +23,10 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class InfoDisplay extends HudModule implements ICommons { + @Override + public String getName() { + return "InfoDisplay"; + } private Vector3d last_position = new Vector3d(0.0, 0.0, 0.0); private double instant_speed = 0.0; @@ -45,32 +49,32 @@ public class InfoDisplay extends HudModule implements ICommons { // public final ForgeConfigSpec.ConfigValue client_chunk_size; public final ForgeConfigSpec.ConfigValue hide_effects; - public InfoDisplay(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("InfoDisplay", builder, dispatcher); + public InfoDisplay() { + super(); this.logo = Setting.Bool.builder() .name("logo") .comment("show logo at top of list") .fallback(true) - .build(this.name, builder, dispatcher); + .build(this); this.speed = Setting.Bool.builder() .name("speed") .comment("show speed meter") .fallback(true) - .build(this.name, builder, dispatcher); + .build(this); this.time = Setting.Bool.builder() .name("time") .comment("show world time") .fallback(true) - .build(this.name, builder, dispatcher); + .build(this); this.hide_effects = Setting.Bool.builder() .name("hide-effects") .comment("hide effect icons on top right corner") .fallback(false) - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/hud/PlayerList.java b/src/main/java/ftbsc/bscv/modules/hud/PlayerList.java index 6928e31..8a36bfe 100644 --- a/src/main/java/ftbsc/bscv/modules/hud/PlayerList.java +++ b/src/main/java/ftbsc/bscv/modules/hud/PlayerList.java @@ -15,9 +15,9 @@ import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; public class PlayerList extends HudModule implements ICommons { - - public PlayerList(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("PlayerList", builder, dispatcher); + @Override + public String getName() { + return "PlayerList"; } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/motion/BoatFly.java b/src/main/java/ftbsc/bscv/modules/motion/BoatFly.java index ecd1206..413f335 100644 --- a/src/main/java/ftbsc/bscv/modules/motion/BoatFly.java +++ b/src/main/java/ftbsc/bscv/modules/motion/BoatFly.java @@ -1,12 +1,9 @@ package ftbsc.bscv.modules.motion; import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.BoolArgumentType; -import com.mojang.brigadier.arguments.DoubleArgumentType; - import ftbsc.bscv.ICommons; import ftbsc.bscv.events.BoatEvent; -import ftbsc.bscv.modules.Module; +import ftbsc.bscv.modules.AbstractModule; import ftbsc.bscv.tools.Keyboard; import ftbsc.bscv.tools.Setting; import net.minecraft.command.CommandSource; @@ -17,7 +14,17 @@ import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class BoatFly extends Module implements ICommons { +public class BoatFly extends AbstractModule implements ICommons { + + @Override + public String getName() { + return "BoatFly"; + } + + @Override + public Group getGroup() { + return Group.MOTION; + } public final ForgeConfigSpec.ConfigValue speed; public final ForgeConfigSpec.ConfigValue rise; @@ -26,45 +33,45 @@ public class BoatFly extends Module implements ICommons { public final ForgeConfigSpec.ConfigValue sprint; public final ForgeConfigSpec.ConfigValue drift; - public BoatFly(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("BoatFly", Group.MOTION, builder, dispatcher); + public BoatFly() { + super(); this.speed = Setting.Decimal.builder() .fallback(1.) .name("speed") .comment("magnitude of boat movement") - .build(this.name, builder, dispatcher); + .build(this); this.rise = Setting.Decimal.builder() .min(0.) .fallback(0.5) .name("rise") .comment("vertical speed") - .build(this.name, builder, dispatcher); + .build(this); this.gravity = Setting.Bool.builder() .fallback(true) .name("gravity") .comment("toggle boat gravity") - .build(this.name, builder, dispatcher); + .build(this); this.rotation = Setting.Bool.builder() .fallback(true) .name("rotation") .comment("rotate boat with player") - .build(this.name, builder, dispatcher); + .build(this); this.sprint = Setting.Bool.builder() .fallback(true) .name("sprint") .comment("halve boat speed while not sprinting") - .build(this.name, builder, dispatcher); + .build(this); this.drift = Setting.Bool.builder() .fallback(false) .name("drift") .comment("allow boat drifting") - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/motion/VanillaFlight.java b/src/main/java/ftbsc/bscv/modules/motion/VanillaFlight.java index 7938601..9193934 100644 --- a/src/main/java/ftbsc/bscv/modules/motion/VanillaFlight.java +++ b/src/main/java/ftbsc/bscv/modules/motion/VanillaFlight.java @@ -16,6 +16,20 @@ import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.eventbus.api.SubscribeEvent; public class VanillaFlight extends QuickModule implements ICommons { + @Override + public String getName() { + return "VanillaFlight"; + } + + @Override + public Group getGroup() { + return Group.MOTION; + } + + @Override + protected int getDefaultKey() { + return UNBOUND; + } public final ForgeConfigSpec.ConfigValue force; public final ForgeConfigSpec.ConfigValue speed; @@ -25,34 +39,34 @@ public class VanillaFlight extends QuickModule implements ICommons { private int tick = 0; - public VanillaFlight(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("VanillaFlight", Group.MOTION, UNBOUND, builder, dispatcher); + public VanillaFlight() { + super(); this.force = Setting.Bool.builder() .name("force") .comment("force enable flight on user") .fallback(false) - .build(this.name, builder, dispatcher); + .build(this); this.speed = Setting.Decimal.builder() .min(0.) .fallback(0.05) .name("speed") .comment("flight speed to set") - .build(this.name, builder, dispatcher); + .build(this); this.antikick = Setting.Bool.builder() .fallback(false) .name("antikick") .comment("prevent vanilla flight kick by descending") - .build(this.name, builder, dispatcher); + .build(this); this.antikick_magnitude = Setting.Decimal.builder() .min(0.) .fallback(1.) .name("magnitude") .comment("magnitude of antikick push") - .build(this.name, builder, dispatcher); + .build(this); this.antikick_cycle = Setting.Number.builder() .min(0) @@ -60,7 +74,7 @@ public class VanillaFlight extends QuickModule implements ICommons { .fallback(0) .name("cycle") .comment("how often to run antikick routine") - .build(this.name, builder, dispatcher); + .build(this); } private boolean couldFlyBefore = false; diff --git a/src/main/java/ftbsc/bscv/modules/self/AntiHunger.java b/src/main/java/ftbsc/bscv/modules/self/AntiHunger.java index f511e1e..7f69197 100644 --- a/src/main/java/ftbsc/bscv/modules/self/AntiHunger.java +++ b/src/main/java/ftbsc/bscv/modules/self/AntiHunger.java @@ -1,37 +1,43 @@ package ftbsc.bscv.modules.self; -import com.mojang.brigadier.CommandDispatcher; - import ftbsc.bscv.ICommons; import ftbsc.bscv.events.PacketEvent; -import ftbsc.bscv.modules.Module; +import ftbsc.bscv.modules.AbstractModule; import ftbsc.bscv.tools.Setting; -import net.minecraft.command.CommandSource; import net.minecraft.network.play.client.CEntityActionPacket; import net.minecraft.network.play.client.CPlayerPacket; import net.minecraft.network.play.client.CEntityActionPacket.Action; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class AntiHunger extends Module implements ICommons { +public class AntiHunger extends AbstractModule implements ICommons { + @Override + public String getName() { + return "AntiHunger"; + } + + @Override + public Group getGroup() { + return Group.SELF; + } public final ForgeConfigSpec.ConfigValue sprint; public final ForgeConfigSpec.ConfigValue hover; - public AntiHunger(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("AntiHunger", Group.SELF, builder, dispatcher); + public AntiHunger() { + super(); this.sprint = Setting.Bool.builder() .fallback(true) .name("sprint") .comment("mask sprint toggle packets") - .build(this.name, builder, dispatcher); + .build(this); this.hover = Setting.Bool.builder() .name("hover") .comment("mark as not on-ground while walking") .fallback(true) - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/self/AutoDisconnect.java b/src/main/java/ftbsc/bscv/modules/self/AutoDisconnect.java index 81b9f66..0ad492e 100644 --- a/src/main/java/ftbsc/bscv/modules/self/AutoDisconnect.java +++ b/src/main/java/ftbsc/bscv/modules/self/AutoDisconnect.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.CommandDispatcher; import ftbsc.bscv.ICommons; import ftbsc.bscv.events.PacketEvent; -import ftbsc.bscv.modules.Module; +import ftbsc.bscv.modules.AbstractModule; import ftbsc.bscv.tools.Setting; import net.minecraft.command.CommandSource; import net.minecraft.network.play.server.SDisconnectPacket; @@ -13,18 +13,28 @@ import net.minecraft.util.text.StringTextComponent; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class AutoDisconnect extends Module implements ICommons { +public class AutoDisconnect extends AbstractModule implements ICommons { + + @Override + public String getName() { + return "AutoDisconnect"; + } + + @Override + public Group getGroup() { + return Group.SELF; + } public final ForgeConfigSpec.ConfigValue threshold; - public AutoDisconnect(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("AutoDisconnect", Group.SELF, builder, dispatcher); + public AutoDisconnect() { + super(); this.threshold = Setting.Decimal.builder() .fallback(10.) .name("threshold") .comment("hp below which connection should be closed") - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/self/AutoFish.java b/src/main/java/ftbsc/bscv/modules/self/AutoFish.java index 900cbd0..e275c4c 100644 --- a/src/main/java/ftbsc/bscv/modules/self/AutoFish.java +++ b/src/main/java/ftbsc/bscv/modules/self/AutoFish.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.CommandDispatcher; import ftbsc.bscv.ICommons; import ftbsc.bscv.events.PacketEvent; -import ftbsc.bscv.modules.Module; +import ftbsc.bscv.modules.AbstractModule; import ftbsc.bscv.tools.Setting; import net.minecraft.client.Minecraft; import net.minecraft.command.CommandSource; @@ -14,26 +14,36 @@ import net.minecraft.util.SoundEvents; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class AutoFish extends Module implements ICommons { +public class AutoFish extends AbstractModule implements ICommons { + + @Override + public String getName() { + return "AutoFish"; + } + + @Override + public Group getGroup() { + return Group.SELF; + } public final ForgeConfigSpec.ConfigValue recast; public final ForgeConfigSpec.ConfigValue delay; // public final ForgeConfigSpec.ConfigValue reaction; - public AutoFish(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("AutoFish", Group.SELF, builder, dispatcher); + public AutoFish() { + super(); this.recast = Setting.Bool.builder() .name("recast") .comment("automatically recast hook after fishing") .fallback(false) - .build(this.name, builder, dispatcher); + .build(this); this.delay = Setting.Number.builder() .fallback(2500) .name("delay") .comment("how long in ms to wait before recasting hook") - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/self/AutoTool.java b/src/main/java/ftbsc/bscv/modules/self/AutoTool.java index 3f0c2ab..2201343 100644 --- a/src/main/java/ftbsc/bscv/modules/self/AutoTool.java +++ b/src/main/java/ftbsc/bscv/modules/self/AutoTool.java @@ -2,14 +2,11 @@ package ftbsc.bscv.modules.self; import java.util.List; -import com.mojang.brigadier.CommandDispatcher; - import ftbsc.bscv.ICommons; -import ftbsc.bscv.modules.Module; +import ftbsc.bscv.modules.AbstractModule; import ftbsc.bscv.tools.Inventory; import ftbsc.bscv.tools.Setting; import net.minecraft.block.BlockState; -import net.minecraft.command.CommandSource; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockRayTraceResult; @@ -17,18 +14,28 @@ import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class AutoTool extends Module implements ICommons { +public class AutoTool extends AbstractModule implements ICommons { + + @Override + public String getName() { + return "AutoTool"; + } + + @Override + public AbstractModule.Group getGroup() { + return AbstractModule.Group.SELF; + } public final ForgeConfigSpec.ConfigValue limit; - public AutoTool(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("AutoTool", Group.SELF, builder, dispatcher); + public AutoTool() { + super(); this.limit = Setting.Number.builder() .name("limit") .comment("durability limit for tools, set to 0 to destroy them") .fallback(1) - .build(this.name, builder, dispatcher); + .build(this); } private boolean itemIsTooDamaged(ItemStack item) { diff --git a/src/main/java/ftbsc/bscv/modules/self/FastInteract.java b/src/main/java/ftbsc/bscv/modules/self/FastInteract.java index f735c9d..e947b5e 100644 --- a/src/main/java/ftbsc/bscv/modules/self/FastInteract.java +++ b/src/main/java/ftbsc/bscv/modules/self/FastInteract.java @@ -15,12 +15,22 @@ import ftbsc.bscv.modules.QuickModule; import ftbsc.bscv.ICommons; public class FastInteract extends QuickModule implements ICommons { + @Override + public String getName() { + return "FastInteract"; + } + + @Override + public Group getGroup() { + return Group.SELF; + } + + @Override + protected int getDefaultKey() { + return UNBOUND; + } Field delayField; - - public FastInteract(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("FastInteract", Group.SELF, UNBOUND, builder, dispatcher); - } @Override protected void onEnabled() { diff --git a/src/main/java/ftbsc/bscv/modules/self/Freecam.java b/src/main/java/ftbsc/bscv/modules/self/Freecam.java index fd22d9d..a80e5b3 100644 --- a/src/main/java/ftbsc/bscv/modules/self/Freecam.java +++ b/src/main/java/ftbsc/bscv/modules/self/Freecam.java @@ -29,26 +29,41 @@ public class Freecam extends QuickModule implements ICommons { private GameType prev_gamemode = GameType.SURVIVAL; private MockPlayer mock_player; - public Freecam(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("Freecam", Group.SELF, UNBOUND, builder, dispatcher); + @Override + public String getName() { + return "Freecam"; + } + + @Override + public Group getGroup() { + return Group.SELF; + } + + @Override + protected int getDefaultKey() { + return UNBOUND; + } + + public Freecam() { + super(); this.log = Setting.Bool.builder() .name("log") .comment("log canceled packets") .fallback(false) - .build(this.name, builder, dispatcher); + .build(this); this.speed = Setting.Decimal.builder() .name("speed") .comment("flight speed in freecam") .fallback(0.05) - .build(this.name, builder, dispatcher); + .build(this); this.drift = Setting.Bool.builder() .name("drift") .comment("allow inertia drift in freecam") .fallback(true) - .build(this.name, builder, dispatcher); + .build(this); } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/self/PortalGui.java b/src/main/java/ftbsc/bscv/modules/self/PortalGui.java index 84c5d57..326f64d 100644 --- a/src/main/java/ftbsc/bscv/modules/self/PortalGui.java +++ b/src/main/java/ftbsc/bscv/modules/self/PortalGui.java @@ -1,18 +1,20 @@ package ftbsc.bscv.modules.self; -import com.mojang.brigadier.CommandDispatcher; - import ftbsc.bscv.ICommons; -import ftbsc.bscv.modules.Module; -import net.minecraft.command.CommandSource; -import net.minecraftforge.common.ForgeConfigSpec; +import ftbsc.bscv.modules.AbstractModule; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -public class PortalGui extends Module implements ICommons { +public class PortalGui extends AbstractModule implements ICommons { - public PortalGui(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("PortalGui", Group.SELF, builder, dispatcher); + @Override + public String getName() { + return "PortalGui"; + } + + @Override + public Group getGroup() { + return Group.SELF; } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/modules/vision/Fullbright.java b/src/main/java/ftbsc/bscv/modules/vision/Fullbright.java index 69d800d..4585a68 100644 --- a/src/main/java/ftbsc/bscv/modules/vision/Fullbright.java +++ b/src/main/java/ftbsc/bscv/modules/vision/Fullbright.java @@ -1,23 +1,29 @@ package ftbsc.bscv.modules.vision; -import java.awt.event.KeyEvent; - -import com.mojang.brigadier.CommandDispatcher; - -import net.minecraft.command.CommandSource; +import ftbsc.bscv.ICommons; +import ftbsc.bscv.modules.QuickModule; import net.minecraft.potion.Effect; import net.minecraft.potion.EffectInstance; -import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import ftbsc.bscv.modules.QuickModule; -import ftbsc.bscv.ICommons; +import java.awt.event.KeyEvent; public class Fullbright extends QuickModule implements ICommons { - - public Fullbright(ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - super("Fullbright", Group.VISION, KeyEvent.VK_V, builder, dispatcher); + + @Override + public String getName() { + return "Fullbright"; + } + + @Override + public Group getGroup() { + return Group.VISION; + } + + @Override + protected int getDefaultKey() { + return KeyEvent.VK_V; } @SubscribeEvent diff --git a/src/main/java/ftbsc/bscv/system/ModManager.java b/src/main/java/ftbsc/bscv/system/ModManager.java new file mode 100644 index 0000000..ea64b0c --- /dev/null +++ b/src/main/java/ftbsc/bscv/system/ModManager.java @@ -0,0 +1,42 @@ +package ftbsc.bscv.system; + +import com.mojang.brigadier.CommandDispatcher; +import ftbsc.bscv.BoSCoVicino; +import ftbsc.bscv.api.IModule; +import ftbsc.bscv.modules.AbstractModule; +import ftbsc.bscv.modules.defense.Aura; +import ftbsc.bscv.modules.hud.*; +import ftbsc.bscv.modules.motion.BoatFly; +import ftbsc.bscv.modules.motion.VanillaFlight; +import ftbsc.bscv.modules.self.*; +import ftbsc.bscv.modules.vision.Fullbright; +import net.minecraft.command.CommandSource; +import net.minecraftforge.common.ForgeConfigSpec; + +import java.util.HashSet; +import java.util.Set; + +public class ModManager { + private final ForgeConfigSpec.Builder cfgBuilder; + private final CommandDispatcher dispatcher; + + public final Set> > mods; + + public ModManager(ForgeConfigSpec.Builder cfgBuilder, CommandDispatcher dispatcher) { + this.cfgBuilder = cfgBuilder; + this.dispatcher = dispatcher; + this.mods = new HashSet<>(); + } + + public void registerMod(IModule> mod) { + this.mods.add(mod); + } + + public ForgeConfigSpec.Builder getCfgBuilder() { + return cfgBuilder; + } + + public CommandDispatcher getDispatcher() { + return dispatcher; + } +} diff --git a/src/main/java/ftbsc/bscv/tools/Setting.java b/src/main/java/ftbsc/bscv/tools/Setting.java index 21f5501..7db1449 100644 --- a/src/main/java/ftbsc/bscv/tools/Setting.java +++ b/src/main/java/ftbsc/bscv/tools/Setting.java @@ -11,6 +11,7 @@ import com.mojang.brigadier.arguments.DoubleArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; +import ftbsc.bscv.api.IModule; import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; import net.minecraftforge.common.ForgeConfigSpec; @@ -50,11 +51,11 @@ public abstract class Setting { abstract Class clazz(); - public ForgeConfigSpec.ConfigValue build(String scope, ForgeConfigSpec.Builder builder, CommandDispatcher dispatcher) { - ForgeConfigSpec.ConfigValue conf = this.value(builder); + public ForgeConfigSpec.ConfigValue build(IModule module) { + ForgeConfigSpec.ConfigValue conf = this.value(module.getConfigBuilder()); - dispatcher.register( - Commands.literal(scope.toLowerCase()) + module.getDispatcher().register( + Commands.literal(module.getName().toLowerCase()) .then( Commands.literal(this.name.get()) .then(