From e4fe4b2388c7358b00d88b77674379597f81acf7 Mon Sep 17 00:00:00 2001 From: Surya Date: Sat, 12 Jun 2021 12:16:06 +0530 Subject: [PATCH] Add mod-menu, fix backward compat bugs, ready for 1.17 --- build.gradle | 2 +- .../mods/savecoords/gui/impl/DIContainer.java | 43 ++++++++------- .../savecoords/gui/impl/ListViewHandler.java | 4 +- .../mods/savecoords/impl/FileStore.java | 8 ++- .../mods/savecoords/model/ConfigData.java | 53 ++++++++++++++++--- .../modmenu/SaveCoordinatesModMenu.java | 28 +++++----- 6 files changed, 92 insertions(+), 46 deletions(-) diff --git a/build.gradle b/build.gradle index fb942f9..ab622a1 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - // modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" + modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modImplementation include("io.github.cottonmc:LibGui:${project.libgui_version}") } diff --git a/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/DIContainer.java b/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/DIContainer.java index 28f3e20..cce280d 100644 --- a/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/DIContainer.java +++ b/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/DIContainer.java @@ -1,11 +1,14 @@ package me.bionicbeanie.mods.savecoords.gui.impl; +import com.terraformersmc.modmenu.api.ConfigScreenFactory; + import me.bionicbeanie.mods.savecoords.IFileStore; import me.bionicbeanie.mods.savecoords.IKeyBinds; import me.bionicbeanie.mods.savecoords.IModGui; import me.bionicbeanie.mods.savecoords.IPlayerLocator; import me.bionicbeanie.mods.savecoords.impl.Factory; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; //All of this works because single-threaded initialization!! Sed lyf :( public class DIContainer { @@ -16,7 +19,7 @@ public class DIContainer { private static IPlayerLocator playerLocator; private static IModGui modGui; private static IKeyBinds keyBinds; - //private static ConfigScreenFactory modMenuScreenFactory; + private static ConfigScreenFactory modMenuScreenFactory; private static PingPositionOperation pingPositionOperation; public static IModGui getModGui() { @@ -29,25 +32,25 @@ public class DIContainer { return keyBinds; } -// public static ConfigScreenFactory getModMenuScreenFactory() { -// initialize(); -// -// if (modMenuScreenFactory == null) { -// modMenuScreenFactory = (parent) -> { -// ConfigViewHandler handler = new ConfigViewHandler(); -// -// handler.onSave(() -> { -// new SaveConfigsOperation(keyBinds, fileStore, handler::getState).run(); -// guiController.closeScreen(); -// }); -// -// handler.onBack(() -> guiController.closeScreen()); -// -// return handler.createView(keyBinds.getAllBinds()); -// }; -// } -// return modMenuScreenFactory; -// } + public static ConfigScreenFactory getModMenuScreenFactory() { + initialize(); + + if (modMenuScreenFactory == null) { + modMenuScreenFactory = (parent) -> { + ConfigViewHandler handler = new ConfigViewHandler(); + + handler.onSave(() -> { + new SaveConfigsOperation(keyBinds, fileStore, handler::getState).run(); + guiController.closeScreen(); + }); + + handler.onBack(() -> guiController.closeScreen()); + + return handler.createView(keyBinds.getAllBinds()); + }; + } + return modMenuScreenFactory; + } public static Runnable getPingPositionOperation() { initialize(); diff --git a/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/ListViewHandler.java b/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/ListViewHandler.java index 19b5695..27066f2 100644 --- a/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/ListViewHandler.java +++ b/src/main/java/me/bionicbeanie/mods/savecoords/gui/impl/ListViewHandler.java @@ -82,8 +82,8 @@ class ListViewHandler extends ViewHandlerBase { List positions = fileStore.listPositions(); Collections.sort(positions, (p1, p2) -> { if (p1.getPositionMetadata() != null && p2.getPositionMetadata() != null) { - return p2.getPositionMetadata().getLastModifiedMillis() > p1.getPositionMetadata().getLastModifiedMillis() ? 1 - : 0; + return p2.getPositionMetadata().getLastModifiedMillis() > p1.getPositionMetadata() + .getLastModifiedMillis() ? 1 : -1; } return -1; diff --git a/src/main/java/me/bionicbeanie/mods/savecoords/impl/FileStore.java b/src/main/java/me/bionicbeanie/mods/savecoords/impl/FileStore.java index 47b70a0..674c1db 100644 --- a/src/main/java/me/bionicbeanie/mods/savecoords/impl/FileStore.java +++ b/src/main/java/me/bionicbeanie/mods/savecoords/impl/FileStore.java @@ -16,6 +16,7 @@ import com.google.gson.GsonBuilder; import me.bionicbeanie.mods.savecoords.IFileStore; import me.bionicbeanie.mods.savecoords.model.ConfigData; +import me.bionicbeanie.mods.savecoords.model.ConfigData.Config; import me.bionicbeanie.mods.savecoords.model.ModData; import me.bionicbeanie.mods.savecoords.model.PlayerPosition; @@ -28,7 +29,11 @@ class FileStore implements IFileStore { private Gson gson; public FileStore(String baseDir) { - this.gson = new GsonBuilder().setPrettyPrinting().setLenient(). create(); + this.gson = new GsonBuilder() + .registerTypeAdapter(Config.class, new ConfigData.ConfigDeserializer()) + .setPrettyPrinting() + .setLenient().create(); + this.saveFilePath = Paths.get(baseDir, DEFAULT_DIR, DEFAULT_FILE); try { @@ -59,7 +64,6 @@ class FileStore implements IFileStore { public void writeDefaultWorldName(String defaultWorldName) throws IOException { ModData data = load(); data.setDefaultWorldName(defaultWorldName); - ; dump(data); } diff --git a/src/main/java/me/bionicbeanie/mods/savecoords/model/ConfigData.java b/src/main/java/me/bionicbeanie/mods/savecoords/model/ConfigData.java index 358fc67..d8a7e06 100644 --- a/src/main/java/me/bionicbeanie/mods/savecoords/model/ConfigData.java +++ b/src/main/java/me/bionicbeanie/mods/savecoords/model/ConfigData.java @@ -1,28 +1,36 @@ package me.bionicbeanie.mods.savecoords.model; +import java.lang.reflect.Type; + import org.lwjgl.glfw.GLFW; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + public class ConfigData { private Config[] keyConfigs; - + @Deprecated private int defaultKeyBindingCode; - + public ConfigData() { this.defaultKeyBindingCode = GLFW.GLFW_KEY_H; } - + @Deprecated public void setDefaultKeyBindingCode(int defaultKeyBindingCode) { this.defaultKeyBindingCode = defaultKeyBindingCode; } - + @Deprecated public int getDefaultKeyBindingCode() { return defaultKeyBindingCode; } - + public Config[] getKeyConfigs() { return keyConfigs; } @@ -31,28 +39,59 @@ public class ConfigData { this.keyConfigs = keyConfigs; } - public static class Config{ + public static class Config { private String name; private String type; private int code; - + public int getCode() { return code; } + public void setCode(int code) { this.code = code; } + public String getType() { return type; } + public void setType(String type) { this.type = type; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } } + + public static class ConfigDeserializer implements JsonDeserializer { + + @Override + public Config deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + String inputType = "KEYSYM"; + if (jsonObject.has("type")) { + JsonElement elem = jsonObject.get("type"); + if("1".equalsIgnoreCase(elem.getAsString())) { + inputType = "MOUSE"; + }else if("MOUSE".equalsIgnoreCase(elem.getAsString())) { + inputType = "MOUSE"; + } + } + Config config = new Config(); + + config.setCode(jsonObject.get("code").getAsInt()); + config.setName(jsonObject.get("name").getAsString()); + config.setType(inputType); + + return config; + } + } } diff --git a/src/main/java/me/bionicbeanie/mods/savecoords/modmenu/SaveCoordinatesModMenu.java b/src/main/java/me/bionicbeanie/mods/savecoords/modmenu/SaveCoordinatesModMenu.java index ec884de..4eee60a 100644 --- a/src/main/java/me/bionicbeanie/mods/savecoords/modmenu/SaveCoordinatesModMenu.java +++ b/src/main/java/me/bionicbeanie/mods/savecoords/modmenu/SaveCoordinatesModMenu.java @@ -1,14 +1,14 @@ -//package me.bionicbeanie.mods.savecoords.modmenu; -// -//import com.terraformersmc.modmenu.api.ConfigScreenFactory; -//import com.terraformersmc.modmenu.api.ModMenuApi; -// -//import me.bionicbeanie.mods.savecoords.gui.impl.DIContainer; -// -//public class SaveCoordinatesModMenu implements ModMenuApi { -// -// @Override -// public ConfigScreenFactory getModConfigScreenFactory() { -// return DIContainer.getModMenuScreenFactory(); -// } -//} +package me.bionicbeanie.mods.savecoords.modmenu; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; + +import me.bionicbeanie.mods.savecoords.gui.impl.DIContainer; + +public class SaveCoordinatesModMenu implements ModMenuApi { + + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return DIContainer.getModMenuScreenFactory(); + } +}