forked from Clones/Controlify
virtual mouse + singleplayer screen compat + 22w05a
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package dev.isxander.controlify.config;
|
||||
|
||||
import com.google.gson.*;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import dev.isxander.controlify.controller.ControllerConfig;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@ -19,20 +20,23 @@ public class ControlifyConfig {
|
||||
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
|
||||
.create();
|
||||
|
||||
private static JsonObject config = new JsonObject();
|
||||
private JsonObject controllerData = new JsonObject();
|
||||
private GlobalSettings globalSettings = new GlobalSettings();
|
||||
|
||||
public void save() {
|
||||
Controlify.LOGGER.info("Saving Controlify config...");
|
||||
|
||||
public static void save() {
|
||||
try {
|
||||
generateConfig();
|
||||
|
||||
Files.deleteIfExists(CONFIG_PATH);
|
||||
Files.writeString(CONFIG_PATH, GSON.toJson(config), StandardOpenOption.CREATE_NEW, StandardOpenOption.TRUNCATE_EXISTING);
|
||||
Files.writeString(CONFIG_PATH, GSON.toJson(generateConfig()), StandardOpenOption.CREATE_NEW, StandardOpenOption.TRUNCATE_EXISTING);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Failed to save config!", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void load() {
|
||||
public void load() {
|
||||
Controlify.LOGGER.info("Loading Controlify config...");
|
||||
|
||||
if (!Files.exists(CONFIG_PATH)) {
|
||||
save();
|
||||
return;
|
||||
@ -45,19 +49,26 @@ public class ControlifyConfig {
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateConfig() {
|
||||
JsonObject configCopy = config.deepCopy(); // we use the old config, so we don't lose disconnected controller data
|
||||
private JsonObject generateConfig() {
|
||||
JsonObject config = new JsonObject();
|
||||
|
||||
JsonObject newControllerData = controllerData.deepCopy(); // we use the old config, so we don't lose disconnected controller data
|
||||
|
||||
for (var controller : Controller.CONTROLLERS.values()) {
|
||||
// `add` replaces if already existing
|
||||
// TODO: find a better way to identify controllers, GUID will report the same for multiple controllers of the same model
|
||||
configCopy.add(controller.guid(), generateControllerConfig(controller));
|
||||
newControllerData.add(controller.guid(), generateControllerConfig(controller));
|
||||
}
|
||||
|
||||
config = configCopy;
|
||||
controllerData = newControllerData;
|
||||
config.add("controllers", controllerData);
|
||||
|
||||
config.add("global", GSON.toJsonTree(globalSettings));
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
private static JsonObject generateControllerConfig(Controller controller) {
|
||||
private JsonObject generateControllerConfig(Controller controller) {
|
||||
JsonObject object = new JsonObject();
|
||||
|
||||
object.add("config", GSON.toJsonTree(controller.config()));
|
||||
@ -66,17 +77,27 @@ public class ControlifyConfig {
|
||||
return object;
|
||||
}
|
||||
|
||||
private static void applyConfig(JsonObject object) {
|
||||
for (var controller : Controller.CONTROLLERS.values()) {
|
||||
var settings = object.getAsJsonObject(controller.guid());
|
||||
if (settings != null) {
|
||||
applyControllerConfig(controller, settings);
|
||||
private void applyConfig(JsonObject object) {
|
||||
globalSettings = GSON.fromJson(object.getAsJsonObject("global"), GlobalSettings.class);
|
||||
if (globalSettings == null) globalSettings = new GlobalSettings();
|
||||
|
||||
JsonObject controllers = object.getAsJsonObject("controllers");
|
||||
if (controllers != null) {
|
||||
for (var controller : Controller.CONTROLLERS.values()) {
|
||||
var settings = controllers.getAsJsonObject(controller.guid());
|
||||
if (settings != null) {
|
||||
applyControllerConfig(controller, settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void applyControllerConfig(Controller controller, JsonObject object) {
|
||||
controller.config().overwrite(GSON.fromJson(object.getAsJsonObject("config"), ControllerConfig.class));
|
||||
private void applyControllerConfig(Controller controller, JsonObject object) {
|
||||
controller.setConfig(GSON.fromJson(object.getAsJsonObject("config"), ControllerConfig.class));
|
||||
controller.bindings().fromJson(object.getAsJsonObject("bindings"));
|
||||
}
|
||||
|
||||
public GlobalSettings globalSettings() {
|
||||
return globalSettings;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user