package com.arsenicclient.config; import com.arsenicclient.Arsenic; import com.arsenicclient.module.Module; import com.arsenicclient.settings.Setting; import com.arsenicclient.settings.impl.*; import com.arsenicclient.utils.io.FileIOUtils; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.io.File; import java.util.ArrayList; public class ConfigSaver { private final File rootFolder = new File(Arsenic.name); private final File moduleFolder = new File(rootFolder, "modules"); private final File clickGui = new File(rootFolder, "clickgui.json"); public void save(ArrayList modules) { if (!rootFolder.exists()) rootFolder.mkdirs(); if (!moduleFolder.exists()) moduleFolder.mkdirs(); for (Module module : modules) { save(module); } } private void save(Module module) { JsonObject json = new JsonObject(); json.addProperty("name", module.getName()); json.addProperty("enabled", module.isEnabled()); JsonArray settings = new JsonArray(); for (Setting setting : module.getSettings()) { JsonObject setting_json = settingToJson(setting); settings.add(setting_json); } json.add("settings", settings); FileIOUtils.writeFile(new File(moduleFolder, module.getName() + ".json").getAbsolutePath(), json); } private JsonObject settingToJson(Setting setting) { JsonObject json = new JsonObject(); if (setting instanceof NumberSetting) { json.addProperty("name", setting.name); json.addProperty("type", "slider"); json.addProperty("value", ((NumberSetting) setting).getValue()); } else if (setting instanceof ModeSetting) { json.addProperty("name", setting.name); json.addProperty("type", "mode"); json.addProperty("value", ((ModeSetting) setting).getMode()); } else if (setting instanceof ColorSetting) { json.addProperty("name", setting.name); json.addProperty("type", "color"); JsonObject color = new JsonObject(); color.addProperty("red", ((ColorSetting) setting).getColor().getRed()); color.addProperty("green", ((ColorSetting) setting).getColor().getGreen()); color.addProperty("blue", ((ColorSetting) setting).getColor().getBlue()); color.addProperty("alpha", ((ColorSetting) setting).getColor().getAlpha()); json.add("value", color); } else if (setting instanceof KeySetting) { json.addProperty("type", "key"); json.addProperty("value", ((KeySetting) setting).getCode()); } else if (setting instanceof BooleanSetting) { json.addProperty("name", setting.name); json.addProperty("type", "bool"); json.addProperty("value", ((BooleanSetting) setting).isToggled()); } else { System.err.println("Unknown setting type: " + setting); } return json; } }