1
0
forked from Clones/Controlify

virtual mouse + singleplayer screen compat + 22w05a

This commit is contained in:
isXander
2023-02-02 21:36:44 +00:00
parent 57fcd0c0dc
commit 09628defc4
34 changed files with 697 additions and 111 deletions

View File

@ -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;
}
}