Add mod-menu, fix backward compat bugs, ready for 1.17

This commit is contained in:
Surya 2021-06-12 12:16:06 +05:30
parent e8f29b2d30
commit e4fe4b2388
6 changed files with 92 additions and 46 deletions

View File

@ -28,7 +28,7 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" 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 "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation include("io.github.cottonmc:LibGui:${project.libgui_version}") modImplementation include("io.github.cottonmc:LibGui:${project.libgui_version}")
} }

View File

@ -1,11 +1,14 @@
package me.bionicbeanie.mods.savecoords.gui.impl; package me.bionicbeanie.mods.savecoords.gui.impl;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import me.bionicbeanie.mods.savecoords.IFileStore; import me.bionicbeanie.mods.savecoords.IFileStore;
import me.bionicbeanie.mods.savecoords.IKeyBinds; import me.bionicbeanie.mods.savecoords.IKeyBinds;
import me.bionicbeanie.mods.savecoords.IModGui; import me.bionicbeanie.mods.savecoords.IModGui;
import me.bionicbeanie.mods.savecoords.IPlayerLocator; import me.bionicbeanie.mods.savecoords.IPlayerLocator;
import me.bionicbeanie.mods.savecoords.impl.Factory; import me.bionicbeanie.mods.savecoords.impl.Factory;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
//All of this works because single-threaded initialization!! Sed lyf :( //All of this works because single-threaded initialization!! Sed lyf :(
public class DIContainer { public class DIContainer {
@ -16,7 +19,7 @@ public class DIContainer {
private static IPlayerLocator playerLocator; private static IPlayerLocator playerLocator;
private static IModGui modGui; private static IModGui modGui;
private static IKeyBinds keyBinds; private static IKeyBinds keyBinds;
//private static ConfigScreenFactory<Screen> modMenuScreenFactory; private static ConfigScreenFactory<Screen> modMenuScreenFactory;
private static PingPositionOperation pingPositionOperation; private static PingPositionOperation pingPositionOperation;
public static IModGui getModGui() { public static IModGui getModGui() {
@ -29,25 +32,25 @@ public class DIContainer {
return keyBinds; return keyBinds;
} }
// public static ConfigScreenFactory<Screen> getModMenuScreenFactory() { public static ConfigScreenFactory<Screen> getModMenuScreenFactory() {
// initialize(); initialize();
//
// if (modMenuScreenFactory == null) { if (modMenuScreenFactory == null) {
// modMenuScreenFactory = (parent) -> { modMenuScreenFactory = (parent) -> {
// ConfigViewHandler handler = new ConfigViewHandler(); ConfigViewHandler handler = new ConfigViewHandler();
//
// handler.onSave(() -> { handler.onSave(() -> {
// new SaveConfigsOperation(keyBinds, fileStore, handler::getState).run(); new SaveConfigsOperation(keyBinds, fileStore, handler::getState).run();
// guiController.closeScreen(); guiController.closeScreen();
// }); });
//
// handler.onBack(() -> guiController.closeScreen()); handler.onBack(() -> guiController.closeScreen());
//
// return handler.createView(keyBinds.getAllBinds()); return handler.createView(keyBinds.getAllBinds());
// }; };
// } }
// return modMenuScreenFactory; return modMenuScreenFactory;
// } }
public static Runnable getPingPositionOperation() { public static Runnable getPingPositionOperation() {
initialize(); initialize();

View File

@ -82,8 +82,8 @@ class ListViewHandler extends ViewHandlerBase<Void> {
List<PlayerPosition> positions = fileStore.listPositions(); List<PlayerPosition> positions = fileStore.listPositions();
Collections.sort(positions, (p1, p2) -> { Collections.sort(positions, (p1, p2) -> {
if (p1.getPositionMetadata() != null && p2.getPositionMetadata() != null) { if (p1.getPositionMetadata() != null && p2.getPositionMetadata() != null) {
return p2.getPositionMetadata().getLastModifiedMillis() > p1.getPositionMetadata().getLastModifiedMillis() ? 1 return p2.getPositionMetadata().getLastModifiedMillis() > p1.getPositionMetadata()
: 0; .getLastModifiedMillis() ? 1 : -1;
} }
return -1; return -1;

View File

@ -16,6 +16,7 @@ import com.google.gson.GsonBuilder;
import me.bionicbeanie.mods.savecoords.IFileStore; import me.bionicbeanie.mods.savecoords.IFileStore;
import me.bionicbeanie.mods.savecoords.model.ConfigData; 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.ModData;
import me.bionicbeanie.mods.savecoords.model.PlayerPosition; import me.bionicbeanie.mods.savecoords.model.PlayerPosition;
@ -28,7 +29,11 @@ class FileStore implements IFileStore {
private Gson gson; private Gson gson;
public FileStore(String baseDir) { 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); this.saveFilePath = Paths.get(baseDir, DEFAULT_DIR, DEFAULT_FILE);
try { try {
@ -59,7 +64,6 @@ class FileStore implements IFileStore {
public void writeDefaultWorldName(String defaultWorldName) throws IOException { public void writeDefaultWorldName(String defaultWorldName) throws IOException {
ModData data = load(); ModData data = load();
data.setDefaultWorldName(defaultWorldName); data.setDefaultWorldName(defaultWorldName);
;
dump(data); dump(data);
} }

View File

@ -1,7 +1,15 @@
package me.bionicbeanie.mods.savecoords.model; package me.bionicbeanie.mods.savecoords.model;
import java.lang.reflect.Type;
import org.lwjgl.glfw.GLFW; 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 { public class ConfigData {
private Config[] keyConfigs; private Config[] keyConfigs;
@ -39,20 +47,51 @@ public class ConfigData {
public int getCode() { public int getCode() {
return code; return code;
} }
public void setCode(int code) { public void setCode(int code) {
this.code = code; this.code = code;
} }
public String getType() { public String getType() {
return type; return type;
} }
public void setType(String type) { public void setType(String type) {
this.type = type; this.type = type;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
} }
public static class ConfigDeserializer implements JsonDeserializer<Config> {
@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;
}
}
} }

View File

@ -1,14 +1,14 @@
//package me.bionicbeanie.mods.savecoords.modmenu; package me.bionicbeanie.mods.savecoords.modmenu;
//
//import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ConfigScreenFactory;
//import com.terraformersmc.modmenu.api.ModMenuApi; import com.terraformersmc.modmenu.api.ModMenuApi;
//
//import me.bionicbeanie.mods.savecoords.gui.impl.DIContainer; import me.bionicbeanie.mods.savecoords.gui.impl.DIContainer;
//
//public class SaveCoordinatesModMenu implements ModMenuApi { public class SaveCoordinatesModMenu implements ModMenuApi {
//
// @Override @Override
// public ConfigScreenFactory<?> getModConfigScreenFactory() { public ConfigScreenFactory<?> getModConfigScreenFactory() {
// return DIContainer.getModMenuScreenFactory(); return DIContainer.getModMenuScreenFactory();
// } }
//} }