From 13ac9d7441561cba590a9ef6146e627173efb238 Mon Sep 17 00:00:00 2001 From: des98 Date: Sat, 21 Jan 2023 23:31:53 +0100 Subject: [PATCH 1/7] Saving modules settings seems to work, TODO loading ecc --- build.gradle | 1 + .../java/me/leeeaf/oakclient/OakClient.java | 8 +- .../leeeaf/oakclient/gui/setting/Setting.java | 10 ++- .../me/leeeaf/oakclient/mixin/BlockMixin.java | 3 +- .../leeeaf/oakclient/systems/SaveHelper.java | 73 +++++++++++++++++++ .../oakclient/systems/modules/Category.java | 5 +- .../oakclient/systems/modules/Module.java | 4 + .../systems/modules/combat/Killaura.java | 8 +- .../systems/modules/movement/Fly.java | 2 +- .../systems/modules/player/AntiKnockback.java | 8 +- .../systems/modules/player/Freecam.java | 2 +- .../oakclient/systems/modules/world/XRay.java | 2 +- .../oakclient/utils/file/FileHelper.java | 51 +++++++++++++ 13 files changed, 159 insertions(+), 18 deletions(-) create mode 100644 src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java create mode 100644 src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java diff --git a/build.gradle b/build.gradle index 749a836..e5611f9 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,7 @@ loom { } dependencies { + implementation 'com.google.code.gson:gson:2.10.1' minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" diff --git a/src/main/java/me/leeeaf/oakclient/OakClient.java b/src/main/java/me/leeeaf/oakclient/OakClient.java index 9973a83..813f13a 100644 --- a/src/main/java/me/leeeaf/oakclient/OakClient.java +++ b/src/main/java/me/leeeaf/oakclient/OakClient.java @@ -9,7 +9,9 @@ import me.leeeaf.oakclient.gui.ClickGUI; import me.leeeaf.oakclient.gui.module.ClickGUIModule; import me.leeeaf.oakclient.gui.module.HUDEditorModule; +import me.leeeaf.oakclient.systems.SaveHelper; import me.leeeaf.oakclient.systems.modules.Category; +import me.leeeaf.oakclient.utils.file.FileHelper; import me.leeeaf.oakclient.utils.io.KeyAction; import net.fabricmc.api.ModInitializer; import net.minecraft.client.MinecraftClient; @@ -20,18 +22,20 @@ public class OakClient implements ModInitializer { public static String splashText = "OakClient"; - - //TODO create Friends system private static ClickGUI gui; private boolean inited=false; @Override public void onInitialize() { Category.init(); EventBus.getEventBus().subscribe(this); + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + SaveHelper.getInstance().saveAllSystems(); + })); } @EventSubscribe public void onKey(KeyEvent event){ + FileHelper.getInstance(); if(mc.currentScreen == null){ if (event.key==ClickGUIModule.keybind.getKey()){ gui.enterGUI(); diff --git a/src/main/java/me/leeeaf/oakclient/gui/setting/Setting.java b/src/main/java/me/leeeaf/oakclient/gui/setting/Setting.java index 584c6f1..900a943 100644 --- a/src/main/java/me/leeeaf/oakclient/gui/setting/Setting.java +++ b/src/main/java/me/leeeaf/oakclient/gui/setting/Setting.java @@ -30,6 +30,10 @@ public void setValue (T value) { this.value=value; } + public String getConfigName(){ + return configName; + } + @Override public String getDisplayName() { return displayName; @@ -44,7 +48,11 @@ public String getDescription() { public IBoolean isVisible() { return visible; } - + + public List> getSubSettingsInstances(){ + return subSettings; + } + public Stream> getSubSettings() { if (subSettings.size()==0) return null; return subSettings.stream().filter(setting->setting instanceof ISetting).sorted((a,b)->a.displayName.compareTo(b.displayName)).map(setting->(ISetting)setting); diff --git a/src/main/java/me/leeeaf/oakclient/mixin/BlockMixin.java b/src/main/java/me/leeeaf/oakclient/mixin/BlockMixin.java index 86b1aa4..3458515 100644 --- a/src/main/java/me/leeeaf/oakclient/mixin/BlockMixin.java +++ b/src/main/java/me/leeeaf/oakclient/mixin/BlockMixin.java @@ -1,6 +1,7 @@ package me.leeeaf.oakclient.mixin; import me.leeeaf.oakclient.systems.modules.Category; +import me.leeeaf.oakclient.systems.modules.world.AntiCactus; import me.leeeaf.oakclient.systems.modules.world.XRay; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -19,7 +20,7 @@ public class BlockMixin{ @Inject(method = "shouldDrawSide", at = @At("RETURN"), cancellable = true) private static void onShouldDrawSide(BlockState state, BlockView world, BlockPos pos, Direction side, BlockPos otherPos, CallbackInfoReturnable cir) { if(xRay == null){ - xRay = (XRay) Category.WORLD.getModules().filter(iModule -> iModule instanceof XRay).findFirst().orElse(null); + xRay = (XRay) Category.getModule(XRay.class); }else if(xRay.isEnabled().isOn()){ cir.setReturnValue(xRay.shouldRenderSide(state.getBlock())); } diff --git a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java new file mode 100644 index 0000000..73e17ad --- /dev/null +++ b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java @@ -0,0 +1,73 @@ +package me.leeeaf.oakclient.systems; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import me.leeeaf.oakclient.gui.setting.*; +import me.leeeaf.oakclient.systems.modules.Category; +import me.leeeaf.oakclient.systems.modules.Module; +import me.leeeaf.oakclient.utils.file.FileHelper; + +public class SaveHelper { + private static SaveHelper instance; + + private SaveHelper() { + } + + public static SaveHelper getInstance() { + if (instance == null) { + instance = new SaveHelper(); + } + return instance; + } + + public void saveAllSystems() { + saveModules(); + } + + private void loadAllSystems(){ + loadModules(); + } + + private void saveModules() { + JsonObject json = new JsonObject(); + for (Category category : Category.values()) { + category.getModules().forEach(iModule -> { + JsonObject moduleJson = new JsonObject(); + JsonObject moduleSettingsJson = new JsonObject(); + ((Module) iModule).getSettingsInstances().forEach(setting -> { + try{ + if (setting instanceof BooleanSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((BooleanSetting) setting).getValue())); + } else if (setting instanceof IntegerSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((IntegerSetting) setting).getValue())); + } else if (setting instanceof DoubleSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((DoubleSetting) setting).getValue())); + } else if (setting instanceof ColorSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((ColorSetting) setting).getValue().getRGB())); + } else if (setting instanceof EnumSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((EnumSetting) setting).getValueIndex())); + } else if (setting instanceof KeybindSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((KeybindSetting) setting).getValue())); + } else if (setting instanceof StringSetting) { + moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((StringSetting) setting).getValue())); + } + }catch (NullPointerException ignored){} + }); + if(moduleSettingsJson.size()!=0){ //don't create "settings" key if module has no settings set + moduleJson.add("settings", moduleSettingsJson); + } + if(moduleJson.size()!=0){ //don't save module if module has no proprieties set + json.add(iModule.getDisplayName(), moduleJson); + } + }); + } + FileHelper.getInstance().writeToFile(json.toString(), "modules.json"); + } + + private void loadModules(){ + String modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); + JsonObject modulesJson = JsonParser.parseString(modulesJsonString).getAsJsonObject(); + //TODO complete loading of modules + } +} diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java b/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java index b9782be..504ef19 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java @@ -89,7 +89,7 @@ public static Module getModule(Class moduleClass){ return null; } - public static boolean toggleModuleByKeybind(int key){ + public static void toggleModuleByKeybind(int key){ for(Category category : Category.values()){ for(IModule module: category.getModules().toList()){ KeybindSetting keybindSetting = (KeybindSetting) module.getSettings() @@ -99,10 +99,9 @@ public static boolean toggleModuleByKeybind(int key){ if(module.isEnabled() != null){ module.isEnabled().toggle(); } - return true; + return; } } } - return false; } } diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java b/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java index 6c06438..485db65 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java @@ -83,6 +83,10 @@ public void onEnable(){ public void onTick(){} + public List> getSettingsInstances(){ + return settings; + } + @Override public Stream> getSettings() { return settings.stream().filter(setting->setting instanceof ISetting).sorted(Comparator.comparing(a -> a.displayName)).map(setting->(ISetting)setting); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java index 5565cc8..8b86f8f 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java @@ -27,10 +27,10 @@ import static me.leeeaf.oakclient.OakClientClient.mc; public class Killaura extends Module { - private final DoubleSetting range = new DoubleSetting("Range", "Range", "Maximum range of attacksTEST", ()->true, 0, 6, 4.25); - private final BooleanSetting delay1_9 = new BooleanSetting("1.9 delay", "1.9 delay", "Should use 1.9 delay?", ()->true, true); - private final BooleanSetting attackThroughBlocks = new BooleanSetting("Through blocks", "Through blocks", "Should attack through blocks?", ()->true, false); - private final EnumSetting sortMethod = new EnumSetting<>("Sort method", "SortMethod", "How to sort entities", () -> true, SortMethod.HEALTH, SortMethod.class); + private final DoubleSetting range = new DoubleSetting("Range", "range", "Maximum range of attacksTEST", ()->true, 0, 6, 4.25); + private final BooleanSetting delay1_9 = new BooleanSetting("1.9 delay", "1.9Delay", "Should use 1.9 delay?", ()->true, true); + private final BooleanSetting attackThroughBlocks = new BooleanSetting("Through blocks", "throughBlocks", "Should attack through blocks?", ()->true, false); + private final EnumSetting sortMethod = new EnumSetting<>("Sort method", "sortMethod", "How to sort entities", () -> true, SortMethod.HEALTH, SortMethod.class); private final BooleanSetting rotate = new BooleanSetting("Rotate", "rotate", "Rotates towards target", ()->true, true); private final EnumSetting rotationMode = new EnumSetting<>("Rotation mode", "rotationMode", "How to rotate", ()->true, RotationMode.PACKET, RotationMode.class); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java index fc362ee..0f82bdc 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java @@ -10,7 +10,7 @@ public class Fly extends Module { private int tickCounter; - public final IntegerSetting flySpeed = new IntegerSetting("Fly speed", "FlySpeed", "The speed at which you fly", ()->true,1,100,20); + public final IntegerSetting flySpeed = new IntegerSetting("Fly speed", "flySpeed", "The speed at which you fly", ()->true,1,100,20); public Fly() { super("Fly", "Allows the player to fly", ()->true, true, Category.MOVEMENT); settings.add(flySpeed); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java index fa69cc2..65dc54f 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java @@ -14,12 +14,12 @@ import static me.leeeaf.oakclient.OakClientClient.mc; public class AntiKnockback extends Module{ - private final IntegerSetting velXZ_setting= new IntegerSetting("XZ velocity", "XZvelocity", "Horizontal velocity to keep", ()->true, 0, 100, 0); - private final IntegerSetting velY_setting= new IntegerSetting("Y velocity", "Yvelocity", "Vertical velocity to keep", ()->true, 0, 100, 0); + private final IntegerSetting velXZ_setting= new IntegerSetting("Horizontal velocity", "horizontalVelocity", "Horizontal velocity to keep", ()->true, 0, 100, 0); + private final IntegerSetting velY_setting= new IntegerSetting("Vertical velocity", "verticalVelocity", "Vertical velocity to keep", ()->true, 0, 100, 0); private final BooleanSetting explosions = new BooleanSetting("Explosions", "explosions", "Reduces knockback from explosions", ()->true, true); - private final IntegerSetting explosions_velXZ_setting= new IntegerSetting("XZ velocity", "XZvelocity", "Horizontal velocity to keep", ()->true, 0, 100, 0); - private final IntegerSetting explosions_velY_setting= new IntegerSetting("Y velocity", "Yvelocity", "Vertical velocity to keep", ()->true, 0, 100, 0); + private final IntegerSetting explosions_velXZ_setting= new IntegerSetting("XZ velocity", "explosionHorizontalVelocity", "Horizontal velocity to keep", ()->true, 0, 100, 0); + private final IntegerSetting explosions_velY_setting= new IntegerSetting("Y velocity", "explosionVerticalVelocity", "Vertical velocity to keep", ()->true, 0, 100, 0); public AntiKnockback() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java index f6b73c0..335992c 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java @@ -17,7 +17,7 @@ import static me.leeeaf.oakclient.OakClientClient.mc; public class Freecam extends Module { - private final IntegerSetting flySpeed = new IntegerSetting("Fly speed", "FlySpeed", "The speed at which you fly", ()->true,1,100,20); + private final IntegerSetting flySpeed = new IntegerSetting("Fly speed", "flySpeed", "The speed at which you fly", ()->true,1,100,20); private final BooleanSetting chunkCulling = new BooleanSetting("Chunk culling", "chunkCulling", "Disable chunk culling (renders every chunk)", ()->true, true); public Freecam() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java b/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java index 10ef8d5..8c7d2d2 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java @@ -11,7 +11,7 @@ import static me.leeeaf.oakclient.OakClientClient.mc; public class XRay extends Module { - public static ArrayList blocksToRender = new ArrayList<>(Arrays.asList( + public static ArrayList blocksToRender = new ArrayList<>(Arrays.asList( //TODO save in files Blocks.DIAMOND_ORE, Blocks.COAL_ORE, Blocks.LAPIS_ORE diff --git a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java new file mode 100644 index 0000000..3e230db --- /dev/null +++ b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java @@ -0,0 +1,51 @@ +package me.leeeaf.oakclient.utils.file; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static me.leeeaf.oakclient.OakClientClient.mc; + +public class FileHelper { + private final Path workingDir; + private static FileHelper instance; + + private FileHelper(){ + workingDir = Paths.get(mc.runDirectory.getPath(), "OakClient/"); + if (!workingDir.toFile().exists()) { + workingDir.toFile().mkdirs(); + } + } + + public static FileHelper getInstance(){ + if(instance == null){ + instance = new FileHelper(); + } + return instance; + } + + public String readFromFile(String fileName){ + Path filePath = workingDir.resolve(fileName); + try { + return Files.readString(filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public void writeToFile(String data, String fileName){ + Path filePath = workingDir.resolve(fileName); + try { + filePath.toFile().createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + try { + Files.write(filePath, data.getBytes()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} From 9d09368dff44ef31f24b3d283917879a421d8e31 Mon Sep 17 00:00:00 2001 From: des98 Date: Sun, 22 Jan 2023 12:25:29 +0100 Subject: [PATCH 2/7] Loading modules seems to work --- .../java/me/leeeaf/oakclient/OakClient.java | 14 +++-- .../me/leeeaf/oakclient/OakClientClient.java | 14 ----- .../leeeaf/oakclient/systems/SaveHelper.java | 59 +++++++++++++++---- .../systems/commands/commands/FOVCommand.java | 3 +- .../commands/commands/HelpCommand.java | 2 +- .../commands/commands/ReloadCommand.java | 2 +- .../commands/ReloadSoundsCommand.java | 2 +- .../commands/commands/SearchCommand.java | 2 +- .../commands/commands/XrayCommand.java | 3 +- .../oakclient/systems/modules/Category.java | 8 +++ .../oakclient/systems/modules/Module.java | 4 ++ .../systems/modules/combat/AutoTotem.java | 2 +- .../systems/modules/combat/AutoWeb.java | 2 +- .../systems/modules/combat/Criticals.java | 2 +- .../systems/modules/combat/Killaura.java | 5 +- .../systems/modules/exploit/XCarry.java | 2 +- .../systems/modules/movement/Blink.java | 2 +- .../systems/modules/movement/Fly.java | 2 +- .../systems/modules/movement/Scaffold.java | 2 +- .../systems/modules/player/AntiHunger.java | 2 +- .../systems/modules/player/AntiKnockback.java | 2 +- .../systems/modules/player/ChestStealer.java | 2 +- .../systems/modules/player/Freecam.java | 2 +- .../oakclient/systems/modules/render/ESP.java | 2 +- .../systems/modules/render/Fullbright.java | 2 +- .../systems/modules/render/Search.java | 2 +- .../systems/modules/render/Tracers.java | 2 +- .../systems/modules/world/EntityOwner.java | 2 +- .../oakclient/systems/modules/world/XRay.java | 2 +- .../systems/renderer/text/TextRenderer.java | 2 +- .../systems/social/SocialManager.java | 2 +- .../leeeaf/oakclient/utils/EntityUtils.java | 2 +- .../me/leeeaf/oakclient/utils/FakePlayer.java | 2 +- .../oakclient/utils/file/FileHelper.java | 4 +- .../leeeaf/oakclient/utils/io/ChatLogger.java | 2 +- .../utils/player/InventoryUtils.java | 2 +- .../oakclient/utils/player/RotationUtils.java | 2 +- .../oakclient/utils/world/BlockUtils.java | 2 +- .../oakclient/utils/world/ChunkProcessor.java | 2 +- .../oakclient/utils/world/WorldUtils.java | 2 +- src/main/resources/fabric.mod.json | 2 +- 41 files changed, 108 insertions(+), 70 deletions(-) delete mode 100644 src/main/java/me/leeeaf/oakclient/OakClientClient.java diff --git a/src/main/java/me/leeeaf/oakclient/OakClient.java b/src/main/java/me/leeeaf/oakclient/OakClient.java index 813f13a..0ac236e 100644 --- a/src/main/java/me/leeeaf/oakclient/OakClient.java +++ b/src/main/java/me/leeeaf/oakclient/OakClient.java @@ -13,14 +13,14 @@ import me.leeeaf.oakclient.systems.modules.Category; import me.leeeaf.oakclient.utils.file.FileHelper; import me.leeeaf.oakclient.utils.io.KeyAction; +import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.minecraft.client.MinecraftClient; -import org.lwjgl.glfw.GLFW; -import static me.leeeaf.oakclient.OakClientClient.mc; - -public class OakClient implements ModInitializer { +@net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) +public class OakClient implements ModInitializer, ClientModInitializer { public static String splashText = "OakClient"; + public static MinecraftClient mc; private static ClickGUI gui; private boolean inited=false; @@ -60,4 +60,10 @@ public void onHudRender(HudRenderEvent event){ gui.render(); } } + + @Override + public void onInitializeClient() { + mc = MinecraftClient.getInstance(); + SaveHelper.getInstance().loadAllSystems(); + } } diff --git a/src/main/java/me/leeeaf/oakclient/OakClientClient.java b/src/main/java/me/leeeaf/oakclient/OakClientClient.java deleted file mode 100644 index 57e555a..0000000 --- a/src/main/java/me/leeeaf/oakclient/OakClientClient.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.leeeaf.oakclient; - -import net.fabricmc.api.ClientModInitializer; -import net.minecraft.client.MinecraftClient; - -@net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) -public class OakClientClient implements ClientModInitializer { - public static MinecraftClient mc; - - @Override - public void onInitializeClient() { - mc = MinecraftClient.getInstance(); - } -} diff --git a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java index 73e17ad..4729798 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java +++ b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java @@ -1,5 +1,6 @@ package me.leeeaf.oakclient.systems; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; @@ -8,6 +9,8 @@ import me.leeeaf.oakclient.systems.modules.Module; import me.leeeaf.oakclient.utils.file.FileHelper; +import java.awt.*; + public class SaveHelper { private static SaveHelper instance; @@ -25,18 +28,18 @@ public void saveAllSystems() { saveModules(); } - private void loadAllSystems(){ + public void loadAllSystems() { loadModules(); } - private void saveModules() { + private void saveModules() { //TODO manage subsettings JsonObject json = new JsonObject(); for (Category category : Category.values()) { category.getModules().forEach(iModule -> { JsonObject moduleJson = new JsonObject(); JsonObject moduleSettingsJson = new JsonObject(); ((Module) iModule).getSettingsInstances().forEach(setting -> { - try{ + try { if (setting instanceof BooleanSetting) { moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((BooleanSetting) setting).getValue())); } else if (setting instanceof IntegerSetting) { @@ -52,22 +55,58 @@ private void saveModules() { } else if (setting instanceof StringSetting) { moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((StringSetting) setting).getValue())); } - }catch (NullPointerException ignored){} + } catch (NullPointerException ignored) { + } }); - if(moduleSettingsJson.size()!=0){ //don't create "settings" key if module has no settings set + if (moduleSettingsJson.size() != 0) { //don't create "settings" key if module has no settings set moduleJson.add("settings", moduleSettingsJson); } - if(moduleJson.size()!=0){ //don't save module if module has no proprieties set - json.add(iModule.getDisplayName(), moduleJson); - } + moduleJson.add("enabled", new JsonPrimitive(iModule.isEnabled() != null && iModule.isEnabled().isOn())); + json.add(iModule.getDisplayName(), moduleJson); }); } FileHelper.getInstance().writeToFile(json.toString(), "modules.json"); } - private void loadModules(){ + private void loadModules() { String modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); JsonObject modulesJson = JsonParser.parseString(modulesJsonString).getAsJsonObject(); - //TODO complete loading of modules + + for (String key : modulesJson.keySet()) { + Module module = Category.getModule(key); + if (module == null) { + continue; + } + + JsonObject value = modulesJson.getAsJsonObject(key); + + if (value.get("enabled").getAsBoolean() && module.isEnabled() != null) { + module.isEnabled().toggle(); + } + + if(value.has("settings")){ + JsonObject settings = value.getAsJsonObject("settings"); + for(String settingKey : settings.keySet()){ + Setting setting = module.getSetting(settingKey); + if(setting!=null){ + if (setting instanceof BooleanSetting) { + ((BooleanSetting)setting).setValue(settings.get(settingKey).getAsBoolean()); + } else if (setting instanceof IntegerSetting) { + ((IntegerSetting)setting).setValue(settings.get(settingKey).getAsInt()); + } else if (setting instanceof DoubleSetting) { + ((DoubleSetting)setting).setValue(settings.get(settingKey).getAsDouble()); + } else if (setting instanceof ColorSetting) { + ((ColorSetting)setting).setValue(new Color(settings.get(settingKey).getAsInt())); + } else if (setting instanceof EnumSetting) { + ((EnumSetting)setting).setValueIndex(settings.get(settingKey).getAsInt()); + } else if (setting instanceof KeybindSetting) { + ((KeybindSetting)setting).setValue(settings.get(settingKey).getAsInt()); + } else if (setting instanceof StringSetting) { + ((StringSetting)setting).setValue(settings.get(settingKey).getAsString()); + } + } + } + } + } } } diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/FOVCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/FOVCommand.java index 3ca8193..bca739e 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/FOVCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/FOVCommand.java @@ -1,11 +1,10 @@ package me.leeeaf.oakclient.systems.commands.commands; -import me.leeeaf.oakclient.OakClientClient; import me.leeeaf.oakclient.systems.commands.Command; import me.leeeaf.oakclient.utils.io.ChatLogger; import net.minecraft.text.Text; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class FOVCommand extends Command { public FOVCommand() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/HelpCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/HelpCommand.java index 21ccf26..054e89d 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/HelpCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/HelpCommand.java @@ -4,7 +4,7 @@ import me.leeeaf.oakclient.systems.commands.CommandRegistry; import net.minecraft.text.Text; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class HelpCommand extends Command { public HelpCommand() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadCommand.java index d8f87e7..c66221b 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadCommand.java @@ -2,7 +2,7 @@ import me.leeeaf.oakclient.systems.commands.Command; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ReloadCommand extends Command { public ReloadCommand() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadSoundsCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadSoundsCommand.java index 29af496..571e33e 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadSoundsCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/ReloadSoundsCommand.java @@ -2,7 +2,7 @@ import me.leeeaf.oakclient.systems.commands.Command; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ReloadSoundsCommand extends Command { public ReloadSoundsCommand() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/SearchCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/SearchCommand.java index e167e15..0b5c0a7 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/SearchCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/SearchCommand.java @@ -9,7 +9,7 @@ import java.util.Arrays; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; import static me.leeeaf.oakclient.systems.modules.render.Search.searchTargets; public class SearchCommand extends Command { diff --git a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/XrayCommand.java b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/XrayCommand.java index 0f98c0e..39051bf 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/commands/commands/XrayCommand.java +++ b/src/main/java/me/leeeaf/oakclient/systems/commands/commands/XrayCommand.java @@ -10,10 +10,9 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.ArrayList; import java.util.Arrays; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; import static me.leeeaf.oakclient.systems.modules.world.XRay.blocksToRender; public class XrayCommand extends Command { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java b/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java index 504ef19..95f77de 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/Category.java @@ -89,6 +89,14 @@ public static Module getModule(Class moduleClass){ return null; } + public static Module getModule(String moduleDisplayName){ + for(Category category : Category.values()){ + Module module = (Module) category.getModules().filter(iModule -> iModule.getDisplayName().equals(moduleDisplayName)).findFirst().orElse(null); + if(module!=null) return module; + } + return null; + } + public static void toggleModuleByKeybind(int key){ for(Category category : Category.values()){ for(IModule module: category.getModules().toList()){ diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java b/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java index 485db65..ae2f43b 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/Module.java @@ -91,4 +91,8 @@ public List> getSettingsInstances(){ public Stream> getSettings() { return settings.stream().filter(setting->setting instanceof ISetting).sorted(Comparator.comparing(a -> a.displayName)).map(setting->(ISetting)setting); } + + public Setting getSetting(String settingConfigName){ + return settings.stream().filter(setting -> setting.getConfigName().equals(settingConfigName)).findFirst().orElse(null); + } } diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoTotem.java b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoTotem.java index 12bbc4f..b590f40 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoTotem.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoTotem.java @@ -7,7 +7,7 @@ import net.minecraft.item.Items; import net.minecraft.screen.slot.SlotActionType; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class AutoTotem extends Module { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoWeb.java b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoWeb.java index 90c5276..bbdf845 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoWeb.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/AutoWeb.java @@ -11,7 +11,7 @@ import net.minecraft.item.Items; import net.minecraft.util.Hand; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class AutoWeb extends Module { private final BooleanSetting swapBack = new BooleanSetting("Swap back", "swapBack", "Swap back to previous item", () -> true, true); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Criticals.java b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Criticals.java index 90c172f..09f8001 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Criticals.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Criticals.java @@ -11,7 +11,7 @@ import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Criticals extends Module { public Criticals() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java index 8b86f8f..3b0b24e 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/combat/Killaura.java @@ -20,11 +20,8 @@ import java.util.Comparator; import java.util.List; import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Killaura extends Module { private final DoubleSetting range = new DoubleSetting("Range", "range", "Maximum range of attacksTEST", ()->true, 0, 6, 4.25); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/exploit/XCarry.java b/src/main/java/me/leeeaf/oakclient/systems/modules/exploit/XCarry.java index d222df5..f485651 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/exploit/XCarry.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/exploit/XCarry.java @@ -8,7 +8,7 @@ import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class XCarry extends Module{ public XCarry() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Blink.java b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Blink.java index 1ab36c6..d2b00f4 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Blink.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Blink.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Blink extends Module{ private FakePlayer fakePlayer; diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java index 0f82bdc..5a45196 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Fly.java @@ -6,7 +6,7 @@ import net.minecraft.entity.EntityPose; import net.minecraft.util.math.Vec3d; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Fly extends Module { private int tickCounter; diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Scaffold.java b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Scaffold.java index 4871830..5b22a75 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Scaffold.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/movement/Scaffold.java @@ -10,7 +10,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Scaffold extends Module { private final BooleanSetting airPlace = new BooleanSetting("AirPlace", "airPlace", "Allows placing blocks in air", ()->true, false); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiHunger.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiHunger.java index 37c6358..e4177fa 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiHunger.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiHunger.java @@ -7,7 +7,7 @@ import me.leeeaf.oakclient.systems.modules.Module; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class AntiHunger extends Module { private final BooleanSetting pauseInLiquids = new BooleanSetting("Pause in liquids", "pauseInLiquids", "Pause module in liquids", ()->true, true); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java index 65dc54f..0942aed 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/AntiKnockback.java @@ -11,7 +11,7 @@ import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.ExplosionS2CPacket; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class AntiKnockback extends Module{ private final IntegerSetting velXZ_setting= new IntegerSetting("Horizontal velocity", "horizontalVelocity", "Horizontal velocity to keep", ()->true, 0, 100, 0); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/ChestStealer.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/ChestStealer.java index 2c7da95..e15a57e 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/ChestStealer.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/ChestStealer.java @@ -11,7 +11,7 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ChestStealer extends Module { private Timer delayTimer = new Timer(); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java index 335992c..5b7535e 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/Freecam.java @@ -14,7 +14,7 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.util.math.Vec3d; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Freecam extends Module { private final IntegerSetting flySpeed = new IntegerSetting("Fly speed", "flySpeed", "The speed at which you fly", ()->true,1,100,20); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/render/ESP.java b/src/main/java/me/leeeaf/oakclient/systems/modules/render/ESP.java index 6c30a64..859ffaf 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/render/ESP.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/render/ESP.java @@ -18,7 +18,7 @@ import java.awt.*; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ESP extends Module { private final DoubleSetting widthSetting = new DoubleSetting("Width", "width", "Width of tracers", ()->true, 0.1,5,1.5); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Fullbright.java b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Fullbright.java index f51d5a4..0d2ca01 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Fullbright.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Fullbright.java @@ -5,7 +5,7 @@ import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Fullbright extends Module { public Fullbright() { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Search.java b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Search.java index 32fbdf5..b85f58a 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Search.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Search.java @@ -20,7 +20,7 @@ import java.util.HashSet; import java.util.Set; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Search extends Module { private final DoubleSetting widthSetting = new DoubleSetting("Width", "width", "Width of tracers", ()->true, 0.1,5,1.5); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Tracers.java b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Tracers.java index f04fac2..0e0ba84 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/render/Tracers.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/render/Tracers.java @@ -19,7 +19,7 @@ import java.awt.*; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class Tracers extends Module { private final DoubleSetting widthSetting = new DoubleSetting("Width", "width", "Width of tracers", ()->true, 0.1,5,1.5); diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/world/EntityOwner.java b/src/main/java/me/leeeaf/oakclient/systems/modules/world/EntityOwner.java index c4add45..eda73cc 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/world/EntityOwner.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/world/EntityOwner.java @@ -19,7 +19,7 @@ import java.util.Objects; import java.util.UUID; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class EntityOwner extends Module { diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java b/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java index 8c7d2d2..3364069 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/world/XRay.java @@ -8,7 +8,7 @@ import java.util.ArrayList; import java.util.Arrays; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class XRay extends Module { public static ArrayList blocksToRender = new ArrayList<>(Arrays.asList( //TODO save in files diff --git a/src/main/java/me/leeeaf/oakclient/systems/renderer/text/TextRenderer.java b/src/main/java/me/leeeaf/oakclient/systems/renderer/text/TextRenderer.java index 1872b4b..f4ba80d 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/renderer/text/TextRenderer.java +++ b/src/main/java/me/leeeaf/oakclient/systems/renderer/text/TextRenderer.java @@ -8,7 +8,7 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.Matrix4f; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class TextRenderer { diff --git a/src/main/java/me/leeeaf/oakclient/systems/social/SocialManager.java b/src/main/java/me/leeeaf/oakclient/systems/social/SocialManager.java index a8a23a7..4e8a285 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/social/SocialManager.java +++ b/src/main/java/me/leeeaf/oakclient/systems/social/SocialManager.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class SocialManager { private static final Map relationshipMap = new HashMap<>(); diff --git a/src/main/java/me/leeeaf/oakclient/utils/EntityUtils.java b/src/main/java/me/leeeaf/oakclient/utils/EntityUtils.java index ca97753..939811b 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/EntityUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/EntityUtils.java @@ -14,7 +14,7 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class EntityUtils { public static boolean isAttackable(Entity e) { return (e instanceof LivingEntity || e instanceof ShulkerBulletEntity || e instanceof AbstractFireballEntity) diff --git a/src/main/java/me/leeeaf/oakclient/utils/FakePlayer.java b/src/main/java/me/leeeaf/oakclient/utils/FakePlayer.java index ed3eb5b..04b7d77 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/FakePlayer.java +++ b/src/main/java/me/leeeaf/oakclient/utils/FakePlayer.java @@ -6,7 +6,7 @@ import java.util.UUID; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class FakePlayer extends OtherClientPlayerEntity { //TODO copy player proprieties (skin ecc) diff --git a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java index 3e230db..985b038 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java +++ b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java @@ -5,7 +5,7 @@ import java.nio.file.Path; import java.nio.file.Paths; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class FileHelper { private final Path workingDir; @@ -25,7 +25,7 @@ public static FileHelper getInstance(){ return instance; } - public String readFromFile(String fileName){ + public String readFromFile(String fileName){ //TODO throw exception here and in writeToFile Path filePath = workingDir.resolve(fileName); try { return Files.readString(filePath); diff --git a/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java b/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java index 29ce9a3..d720775 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java +++ b/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java @@ -3,7 +3,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ChatLogger { private static final Text logPrefix = Text.literal("[").append(Text.literal("Oak").formatted(Formatting.DARK_GREEN)).append(Text.literal("] ")); diff --git a/src/main/java/me/leeeaf/oakclient/utils/player/InventoryUtils.java b/src/main/java/me/leeeaf/oakclient/utils/player/InventoryUtils.java index 3cbe98b..4fc1387 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/player/InventoryUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/player/InventoryUtils.java @@ -5,7 +5,7 @@ import java.util.function.Predicate; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class InventoryUtils { public static int getItemSlotInHotbar(Item item){ diff --git a/src/main/java/me/leeeaf/oakclient/utils/player/RotationUtils.java b/src/main/java/me/leeeaf/oakclient/utils/player/RotationUtils.java index 0dbe1f0..9606287 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/player/RotationUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/player/RotationUtils.java @@ -3,7 +3,7 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.util.math.MathHelper; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class RotationUtils { public static double getYaw(double x, double z) { diff --git a/src/main/java/me/leeeaf/oakclient/utils/world/BlockUtils.java b/src/main/java/me/leeeaf/oakclient/utils/world/BlockUtils.java index 798b110..fac98f0 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/world/BlockUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/world/BlockUtils.java @@ -11,7 +11,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class BlockUtils { public static boolean place(BlockPos blockPos, int invSlot, Hand hand, boolean rotate, boolean checkEntities, boolean swingHand, boolean airPlace){ diff --git a/src/main/java/me/leeeaf/oakclient/utils/world/ChunkProcessor.java b/src/main/java/me/leeeaf/oakclient/utils/world/ChunkProcessor.java index 51550e6..ae0913d 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/world/ChunkProcessor.java +++ b/src/main/java/me/leeeaf/oakclient/utils/world/ChunkProcessor.java @@ -20,7 +20,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class ChunkProcessor { private ExecutorService executor; diff --git a/src/main/java/me/leeeaf/oakclient/utils/world/WorldUtils.java b/src/main/java/me/leeeaf/oakclient/utils/world/WorldUtils.java index eff34b6..6fce0a6 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/world/WorldUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/world/WorldUtils.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; -import static me.leeeaf.oakclient.OakClientClient.mc; +import static me.leeeaf.oakclient.OakClient.mc; public class WorldUtils { public static List getLoadedChunks(){ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index bf29013..3a58d0b 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,7 +13,7 @@ "environment": "client", "entrypoints": { "client": [ - "me.leeeaf.oakclient.OakClientClient" + "me.leeeaf.oakclient.OakClient" ], "main": [ "me.leeeaf.oakclient.OakClient" From ee19a118fe57e3d69e3844508fe92b3f54f9072d Mon Sep 17 00:00:00 2001 From: des98 Date: Sun, 22 Jan 2023 13:39:16 +0100 Subject: [PATCH 3/7] File helper throws exceptions now --- .../java/me/leeeaf/oakclient/OakClient.java | 2 +- .../leeeaf/oakclient/systems/SaveHelper.java | 16 +++++++++-- .../oakclient/utils/file/FileHelper.java | 28 ++++++------------- .../leeeaf/oakclient/utils/io/ChatLogger.java | 8 ++++++ 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main/java/me/leeeaf/oakclient/OakClient.java b/src/main/java/me/leeeaf/oakclient/OakClient.java index 0ac236e..9399657 100644 --- a/src/main/java/me/leeeaf/oakclient/OakClient.java +++ b/src/main/java/me/leeeaf/oakclient/OakClient.java @@ -64,6 +64,6 @@ public void onHudRender(HudRenderEvent event){ @Override public void onInitializeClient() { mc = MinecraftClient.getInstance(); - SaveHelper.getInstance().loadAllSystems(); + SaveHelper.getInstance().loadAllSystems(); //TODO if files does not exist everything explodes } } diff --git a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java index 4729798..33a27e3 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java +++ b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java @@ -8,8 +8,10 @@ import me.leeeaf.oakclient.systems.modules.Category; import me.leeeaf.oakclient.systems.modules.Module; import me.leeeaf.oakclient.utils.file.FileHelper; +import me.leeeaf.oakclient.utils.io.ChatLogger; import java.awt.*; +import java.io.IOException; public class SaveHelper { private static SaveHelper instance; @@ -65,11 +67,21 @@ private void saveModules() { //TODO manage subsettings json.add(iModule.getDisplayName(), moduleJson); }); } - FileHelper.getInstance().writeToFile(json.toString(), "modules.json"); + try { + FileHelper.getInstance().writeToFile(json.toString(), "modules.json"); + } catch (IOException e) { + ChatLogger.error("Couldn't save modules to file modules.json!"); + } } private void loadModules() { - String modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); + String modulesJsonString = null; + try { + modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); + } catch (IOException e) { + ChatLogger.error("Couldn't loAd modules from file modules.json!"); + return; + } JsonObject modulesJson = JsonParser.parseString(modulesJsonString).getAsJsonObject(); for (String key : modulesJson.keySet()) { diff --git a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java index 985b038..2556f7a 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java +++ b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java @@ -11,41 +11,29 @@ public class FileHelper { private final Path workingDir; private static FileHelper instance; - private FileHelper(){ + private FileHelper() { workingDir = Paths.get(mc.runDirectory.getPath(), "OakClient/"); if (!workingDir.toFile().exists()) { workingDir.toFile().mkdirs(); } } - public static FileHelper getInstance(){ - if(instance == null){ + public static FileHelper getInstance() { + if (instance == null) { instance = new FileHelper(); } return instance; } - public String readFromFile(String fileName){ //TODO throw exception here and in writeToFile + public String readFromFile(String fileName) throws IOException { Path filePath = workingDir.resolve(fileName); - try { - return Files.readString(filePath); - } catch (IOException e) { - throw new RuntimeException(e); - } + return Files.readString(filePath); } - public void writeToFile(String data, String fileName){ + public void writeToFile(String data, String fileName) throws IOException { Path filePath = workingDir.resolve(fileName); - try { - filePath.toFile().createNewFile(); - } catch (IOException e) { - throw new RuntimeException(e); - } + filePath.toFile().createNewFile(); + Files.write(filePath, data.getBytes()); - try { - Files.write(filePath, data.getBytes()); - } catch (IOException e) { - throw new RuntimeException(e); - } } } diff --git a/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java b/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java index d720775..bc0c12f 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java +++ b/src/main/java/me/leeeaf/oakclient/utils/io/ChatLogger.java @@ -17,4 +17,12 @@ public static void log(Text message){ public static void error(Text message){ mc.player.sendMessage(errorPrefix.copy().append(message.copy().formatted(Formatting.RED))); } + + public static void error(String message){ + mc.player.sendMessage(errorPrefix.copy().append(Text.literal(message).formatted(Formatting.RED))); + } + + public static void log(String message){ + mc.player.sendMessage(logPrefix.copy().append(Text.literal(message))); + } } From e09211b3de2606770cfcc13e1e6bf226e3701c26 Mon Sep 17 00:00:00 2001 From: des98 Date: Sun, 22 Jan 2023 15:55:04 +0100 Subject: [PATCH 4/7] test signed commits --- src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java index 2556f7a..45fc450 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java +++ b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java @@ -34,6 +34,5 @@ public void writeToFile(String data, String fileName) throws IOException { Path filePath = workingDir.resolve(fileName); filePath.toFile().createNewFile(); Files.write(filePath, data.getBytes()); - } } From 918e4ce77f8ce8bc92e854ed445a3ae43582a278 Mon Sep 17 00:00:00 2001 From: des98 Date: Sun, 22 Jan 2023 21:29:21 +0100 Subject: [PATCH 5/7] signed commit 2 --- src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java index 45fc450..2556f7a 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java +++ b/src/main/java/me/leeeaf/oakclient/utils/file/FileHelper.java @@ -34,5 +34,6 @@ public void writeToFile(String data, String fileName) throws IOException { Path filePath = workingDir.resolve(fileName); filePath.toFile().createNewFile(); Files.write(filePath, data.getBytes()); + } } From 31a73ae2e54ab4f22cf07115f499b4ee8333ad6f Mon Sep 17 00:00:00 2001 From: des98 Date: Wed, 25 Jan 2023 20:25:54 +0100 Subject: [PATCH 6/7] Now modules get saved nicely (can't load subSettings tho!) --- .../me/leeeaf/oakclient/event/EventBus.java | 24 ++--- .../mixin/ClientConnectionMixin.java | 4 +- .../leeeaf/oakclient/systems/SaveHelper.java | 93 +++++++++++-------- .../systems/modules/player/NoFall.java | 11 +-- .../leeeaf/oakclient/utils/io/JsonUtils.java | 22 +++++ 5 files changed, 94 insertions(+), 60 deletions(-) create mode 100644 src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java diff --git a/src/main/java/me/leeeaf/oakclient/event/EventBus.java b/src/main/java/me/leeeaf/oakclient/event/EventBus.java index 0e15550..b287228 100644 --- a/src/main/java/me/leeeaf/oakclient/event/EventBus.java +++ b/src/main/java/me/leeeaf/oakclient/event/EventBus.java @@ -6,8 +6,8 @@ public class EventBus { private static EventBus eventBus; - public static EventBus getEventBus(){ - if(eventBus == null){ + public static EventBus getEventBus() { + if (eventBus == null) { eventBus = new EventBus(); } return eventBus; @@ -16,25 +16,27 @@ public static EventBus getEventBus(){ private final HashMap, List> subscribersMap = new HashMap<>(); Comparator subscriberComparator; - private EventBus(){ + + private EventBus() { subscriberComparator = Comparator.comparingInt(EventSubscriber::getEventPriorityValue).reversed(); } - public T post(T event){ + public T post(T event) { List subscribers = subscribersMap.get(event.getClass()); if (subscribers != null) { - for (EventSubscriber subscriber : subscribers){ + for (EventSubscriber subscriber : subscribers) { subscriber.call(event); } } return event; } - public boolean subscribe(Object eventListener){ + + public boolean subscribe(Object eventListener) { boolean subscribed = false; - for(Method method : eventListener.getClass().getDeclaredMethods()){ - if(method.isAnnotationPresent(EventSubscribe.class) && method.getParameterTypes().length > 0){ + for (Method method : eventListener.getClass().getDeclaredMethods()) { + if (method.isAnnotationPresent(EventSubscribe.class) && method.getParameterTypes().length > 0) { insert(subscribersMap.computeIfAbsent(method.getParameterTypes()[0], k -> new ArrayList<>()), new EventSubscriber(method, eventListener)); subscribed = true; } @@ -42,15 +44,15 @@ public boolean subscribe(Object eventListener){ return subscribed; } - private void insert(List subscribers, EventSubscriber subscriber){ + private void insert(List subscribers, EventSubscriber subscriber) { int index = Collections.binarySearch(subscribers, subscriber, subscriberComparator); if (index < 0) { index = -index - 1; } - subscribers.add(index,subscriber); + subscribers.add(index, subscriber); } - public void unsubscribe(Object eventListener){ + public void unsubscribe(Object eventListener) { subscribersMap.values().forEach(subscribers -> subscribers.removeIf(subscriber -> subscriber.getListenerInstance().equals(eventListener))); } } diff --git a/src/main/java/me/leeeaf/oakclient/mixin/ClientConnectionMixin.java b/src/main/java/me/leeeaf/oakclient/mixin/ClientConnectionMixin.java index 27f03fd..61f0c2c 100644 --- a/src/main/java/me/leeeaf/oakclient/mixin/ClientConnectionMixin.java +++ b/src/main/java/me/leeeaf/oakclient/mixin/ClientConnectionMixin.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientConnection.class) -public class ClientConnectionMixin { +public class ClientConnectionMixin { //TODO make all mixins abstract @Shadow private Channel channel; @@ -23,7 +23,7 @@ private void onSendPacketHead(Packet packet, CallbackInfo info) { } @Inject(at=@At("HEAD"), method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/Packet;)V", cancellable = true) - private void onRecievePacketHead(ChannelHandlerContext channelHandlerContext, Packet packet, CallbackInfo ci){ + private void onReceivePacketHead(ChannelHandlerContext channelHandlerContext, Packet packet, CallbackInfo ci){ if (channel.isOpen() && packet != null) { if(EventBus.getEventBus().post(new PacketEvent.Receive(packet)).isCancelled()) ci.cancel(); } diff --git a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java index 33a27e3..2d54c58 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java +++ b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java @@ -1,6 +1,5 @@ package me.leeeaf.oakclient.systems; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; @@ -9,6 +8,7 @@ import me.leeeaf.oakclient.systems.modules.Module; import me.leeeaf.oakclient.utils.file.FileHelper; import me.leeeaf.oakclient.utils.io.ChatLogger; +import me.leeeaf.oakclient.utils.io.JsonUtils; import java.awt.*; import java.io.IOException; @@ -37,34 +37,21 @@ public void loadAllSystems() { private void saveModules() { //TODO manage subsettings JsonObject json = new JsonObject(); for (Category category : Category.values()) { - category.getModules().forEach(iModule -> { + + category.getModules().forEach(module -> { + JsonObject moduleJson = new JsonObject(); JsonObject moduleSettingsJson = new JsonObject(); - ((Module) iModule).getSettingsInstances().forEach(setting -> { - try { - if (setting instanceof BooleanSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((BooleanSetting) setting).getValue())); - } else if (setting instanceof IntegerSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((IntegerSetting) setting).getValue())); - } else if (setting instanceof DoubleSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((DoubleSetting) setting).getValue())); - } else if (setting instanceof ColorSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((ColorSetting) setting).getValue().getRGB())); - } else if (setting instanceof EnumSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((EnumSetting) setting).getValueIndex())); - } else if (setting instanceof KeybindSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((KeybindSetting) setting).getValue())); - } else if (setting instanceof StringSetting) { - moduleSettingsJson.add(setting.getConfigName(), new JsonPrimitive(((StringSetting) setting).getValue())); - } - } catch (NullPointerException ignored) { - } - }); - if (moduleSettingsJson.size() != 0) { //don't create "settings" key if module has no settings set + for (Setting setting : ((Module) module).getSettingsInstances()) { + + JsonObject tempModuleSettingsJson = getSettingJson(setting); + moduleSettingsJson = JsonUtils.mergeJsonObjects(moduleSettingsJson, tempModuleSettingsJson); + } + if (moduleSettingsJson.size() > 0) { //don't create "settings" key if module has no settings set moduleJson.add("settings", moduleSettingsJson); } - moduleJson.add("enabled", new JsonPrimitive(iModule.isEnabled() != null && iModule.isEnabled().isOn())); - json.add(iModule.getDisplayName(), moduleJson); + moduleJson.add("enabled", new JsonPrimitive(module.isEnabled() != null && module.isEnabled().isOn())); + json.add(module.getDisplayName(), moduleJson); }); } try { @@ -74,12 +61,44 @@ private void saveModules() { //TODO manage subsettings } } - private void loadModules() { + private JsonObject getSettingJson(Setting setting) { + JsonObject settingJson = new JsonObject(); + + if (setting.getSubSettingsInstances().size() != 0) { + JsonObject subSettingJson = new JsonObject(); + for (Setting subSetting : setting.getSubSettingsInstances()) { + subSettingJson = JsonUtils.mergeJsonObjects(subSettingJson, getSettingJson(subSetting)); //TODO subSettings appear all together, they should be under their parent setting + } + settingJson.add("subSettings", subSettingJson); + } + + try { + if (setting instanceof BooleanSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((BooleanSetting) setting).getValue())); + } else if (setting instanceof IntegerSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((IntegerSetting) setting).getValue())); + } else if (setting instanceof DoubleSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((DoubleSetting) setting).getValue())); + } else if (setting instanceof ColorSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((ColorSetting) setting).getValue().getRGB())); + } else if (setting instanceof EnumSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((EnumSetting) setting).getValueIndex())); + } else if (setting instanceof KeybindSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((KeybindSetting) setting).getValue())); + } else if (setting instanceof StringSetting) { + settingJson.add(setting.getConfigName(), new JsonPrimitive(((StringSetting) setting).getValue())); + } + } catch (NullPointerException ignored) { + } + return settingJson; + } + + private void loadModules() { //TODO can't load subSettings if previous TODO isn't done(? lmao) String modulesJsonString = null; try { modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); } catch (IOException e) { - ChatLogger.error("Couldn't loAd modules from file modules.json!"); + ChatLogger.error("Couldn't load modules from file modules.json!"); return; } JsonObject modulesJson = JsonParser.parseString(modulesJsonString).getAsJsonObject(); @@ -96,25 +115,25 @@ private void loadModules() { module.isEnabled().toggle(); } - if(value.has("settings")){ + if (value.has("settings")) { JsonObject settings = value.getAsJsonObject("settings"); - for(String settingKey : settings.keySet()){ + for (String settingKey : settings.keySet()) { Setting setting = module.getSetting(settingKey); - if(setting!=null){ + if (setting != null) { if (setting instanceof BooleanSetting) { - ((BooleanSetting)setting).setValue(settings.get(settingKey).getAsBoolean()); + ((BooleanSetting) setting).setValue(settings.get(settingKey).getAsBoolean()); } else if (setting instanceof IntegerSetting) { - ((IntegerSetting)setting).setValue(settings.get(settingKey).getAsInt()); + ((IntegerSetting) setting).setValue(settings.get(settingKey).getAsInt()); } else if (setting instanceof DoubleSetting) { - ((DoubleSetting)setting).setValue(settings.get(settingKey).getAsDouble()); + ((DoubleSetting) setting).setValue(settings.get(settingKey).getAsDouble()); } else if (setting instanceof ColorSetting) { - ((ColorSetting)setting).setValue(new Color(settings.get(settingKey).getAsInt())); + ((ColorSetting) setting).setValue(new Color(settings.get(settingKey).getAsInt())); } else if (setting instanceof EnumSetting) { - ((EnumSetting)setting).setValueIndex(settings.get(settingKey).getAsInt()); + ((EnumSetting) setting).setValueIndex(settings.get(settingKey).getAsInt()); } else if (setting instanceof KeybindSetting) { - ((KeybindSetting)setting).setValue(settings.get(settingKey).getAsInt()); + ((KeybindSetting) setting).setValue(settings.get(settingKey).getAsInt()); } else if (setting instanceof StringSetting) { - ((StringSetting)setting).setValue(settings.get(settingKey).getAsString()); + ((StringSetting) setting).setValue(settings.get(settingKey).getAsString()); } } } diff --git a/src/main/java/me/leeeaf/oakclient/systems/modules/player/NoFall.java b/src/main/java/me/leeeaf/oakclient/systems/modules/player/NoFall.java index 3c3f881..f9cbde5 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/modules/player/NoFall.java +++ b/src/main/java/me/leeeaf/oakclient/systems/modules/player/NoFall.java @@ -9,20 +9,11 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; public class NoFall extends Module{ + public NoFall() { super("NoFall", "Prevents you from taking fall damage", ()->true, true, Category.PLAYER); } - @Override - public void onDisable() { - EventBus.getEventBus().unsubscribe(this); - } - - @Override - public void onEnable() { - EventBus.getEventBus().subscribe(this); - } - @EventSubscribe public void onPacketSend(PacketEvent.Send event) { if(event.packet instanceof PlayerMoveC2SPacket){ diff --git a/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java b/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java new file mode 100644 index 0000000..0dbbdd5 --- /dev/null +++ b/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java @@ -0,0 +1,22 @@ +package me.leeeaf.oakclient.utils.io; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +public class JsonUtils { + private static final Gson gson = new Gson(); + + public static JsonObject mergeJsonObjects(JsonObject o1, JsonObject o2){ + if(o1.size()<=0){ + return o2; + }else if(o2.size()<=0){ + return o1; + } + + String o1str = o1.toString(); + String o2str = o2.toString(); + + String result = o1str.substring(0, o1str.length()-1) + "," + o2str.substring(1); + return gson.fromJson(result, JsonObject.class); + } +} From 1725f697a5dd481835ee61977cb1d6997075456f Mon Sep 17 00:00:00 2001 From: des98 Date: Sat, 28 Jan 2023 15:20:37 +0100 Subject: [PATCH 7/7] Saving subSettings works --- .../leeeaf/oakclient/systems/SaveHelper.java | 63 +++++++++++++------ .../leeeaf/oakclient/utils/io/JsonUtils.java | 29 +++++---- 2 files changed, 60 insertions(+), 32 deletions(-) diff --git a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java index 2d54c58..822531a 100644 --- a/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java +++ b/src/main/java/me/leeeaf/oakclient/systems/SaveHelper.java @@ -1,5 +1,6 @@ package me.leeeaf.oakclient.systems; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; @@ -34,7 +35,7 @@ public void loadAllSystems() { loadModules(); } - private void saveModules() { //TODO manage subsettings + private void saveModules() { JsonObject json = new JsonObject(); for (Category category : Category.values()) { @@ -45,7 +46,7 @@ private void saveModules() { //TODO manage subsettings for (Setting setting : ((Module) module).getSettingsInstances()) { JsonObject tempModuleSettingsJson = getSettingJson(setting); - moduleSettingsJson = JsonUtils.mergeJsonObjects(moduleSettingsJson, tempModuleSettingsJson); + JsonUtils.mergeJsonObject(moduleSettingsJson, tempModuleSettingsJson); } if (moduleSettingsJson.size() > 0) { //don't create "settings" key if module has no settings set moduleJson.add("settings", moduleSettingsJson); @@ -57,7 +58,7 @@ private void saveModules() { //TODO manage subsettings try { FileHelper.getInstance().writeToFile(json.toString(), "modules.json"); } catch (IOException e) { - ChatLogger.error("Couldn't save modules to file modules.json!"); + ChatLogger.error("Couldn't write to file modules.json!"); } } @@ -67,7 +68,7 @@ private JsonObject getSettingJson(Setting setting) { if (setting.getSubSettingsInstances().size() != 0) { JsonObject subSettingJson = new JsonObject(); for (Setting subSetting : setting.getSubSettingsInstances()) { - subSettingJson = JsonUtils.mergeJsonObjects(subSettingJson, getSettingJson(subSetting)); //TODO subSettings appear all together, they should be under their parent setting + JsonUtils.mergeJsonObject(subSettingJson, getSettingJson(subSetting)); } settingJson.add("subSettings", subSettingJson); } @@ -93,12 +94,12 @@ private JsonObject getSettingJson(Setting setting) { return settingJson; } - private void loadModules() { //TODO can't load subSettings if previous TODO isn't done(? lmao) + private void loadModules() { String modulesJsonString = null; try { modulesJsonString = FileHelper.getInstance().readFromFile("modules.json"); } catch (IOException e) { - ChatLogger.error("Couldn't load modules from file modules.json!"); + ChatLogger.error("Couldn't read file modules.json!"); return; } JsonObject modulesJson = JsonParser.parseString(modulesJsonString).getAsJsonObject(); @@ -117,27 +118,49 @@ private void loadModules() { //TODO can't load subSettings if previous TODO isn' if (value.has("settings")) { JsonObject settings = value.getAsJsonObject("settings"); + + JsonObject subSettings = null; + + if (settings.has("subSettings")) { + subSettings = settings.getAsJsonObject("subSettings"); + } + for (String settingKey : settings.keySet()) { Setting setting = module.getSetting(settingKey); if (setting != null) { - if (setting instanceof BooleanSetting) { - ((BooleanSetting) setting).setValue(settings.get(settingKey).getAsBoolean()); - } else if (setting instanceof IntegerSetting) { - ((IntegerSetting) setting).setValue(settings.get(settingKey).getAsInt()); - } else if (setting instanceof DoubleSetting) { - ((DoubleSetting) setting).setValue(settings.get(settingKey).getAsDouble()); - } else if (setting instanceof ColorSetting) { - ((ColorSetting) setting).setValue(new Color(settings.get(settingKey).getAsInt())); - } else if (setting instanceof EnumSetting) { - ((EnumSetting) setting).setValueIndex(settings.get(settingKey).getAsInt()); - } else if (setting instanceof KeybindSetting) { - ((KeybindSetting) setting).setValue(settings.get(settingKey).getAsInt()); - } else if (setting instanceof StringSetting) { - ((StringSetting) setting).setValue(settings.get(settingKey).getAsString()); + setSettingValue(setting, settings.get(settingKey)); + if (subSettings != null) { + for (String subSettingKey : subSettings.keySet()) { + Setting subSetting = setting.getSubSettingsInstances().stream() + .filter(subSettingInstance -> subSettingInstance.getConfigName().equals(subSettingKey)) + .findFirst() + .orElse(null); + if (subSetting != null) { + setSettingValue(subSetting, subSettings.get(subSettingKey)); + } + } } } } } } } + + private void setSettingValue(Setting setting, JsonElement value) { + if (setting instanceof BooleanSetting) { + ((BooleanSetting) setting).setValue(value.getAsBoolean()); + } else if (setting instanceof IntegerSetting) { + ((IntegerSetting) setting).setValue(value.getAsInt()); + } else if (setting instanceof DoubleSetting) { + ((DoubleSetting) setting).setValue(value.getAsDouble()); + } else if (setting instanceof ColorSetting) { + ((ColorSetting) setting).setValue(new Color(value.getAsInt())); + } else if (setting instanceof EnumSetting) { + ((EnumSetting) setting).setValueIndex(value.getAsInt()); + } else if (setting instanceof KeybindSetting) { + ((KeybindSetting) setting).setValue(value.getAsInt()); + } else if (setting instanceof StringSetting) { + ((StringSetting) setting).setValue(value.getAsString()); + } + } } diff --git a/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java b/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java index 0dbbdd5..136cf89 100644 --- a/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java +++ b/src/main/java/me/leeeaf/oakclient/utils/io/JsonUtils.java @@ -1,22 +1,27 @@ package me.leeeaf.oakclient.utils.io; import com.google.gson.Gson; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.util.Map; + public class JsonUtils { - private static final Gson gson = new Gson(); - public static JsonObject mergeJsonObjects(JsonObject o1, JsonObject o2){ - if(o1.size()<=0){ - return o2; - }else if(o2.size()<=0){ - return o1; + public static void mergeJsonObject(JsonObject obj1, JsonObject obj2){ + for (Map.Entry entry : obj2.entrySet()) { + String key = entry.getKey(); + JsonElement value = entry.getValue(); + if (obj1.has(key)) { + JsonElement existingValue = obj1.get(key); + if (existingValue.isJsonObject() && value.isJsonObject()) { + mergeJsonObject(existingValue.getAsJsonObject(), value.getAsJsonObject()); + } else { + obj1.add(key, value); + } + } else { + obj1.add(key, value); + } } - - String o1str = o1.toString(); - String o2str = o2.toString(); - - String result = o1str.substring(0, o1str.length()-1) + "," + o2str.substring(1); - return gson.fromJson(result, JsonObject.class); } }