Respackopts/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java

97 lines
3.8 KiB
Java
Raw Normal View History

2020-11-24 22:04:13 +01:00
package io.gitlab.jfronny.respackopts;
import com.google.gson.Gson;
2021-06-10 13:10:12 +02:00
import com.google.gson.GsonBuilder;
2021-06-10 16:07:22 +02:00
import io.gitlab.jfronny.respackopts.data.entry.*;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
2021-06-10 13:10:12 +02:00
import io.gitlab.jfronny.respackopts.gson.BooleanEntrySerializer;
import io.gitlab.jfronny.respackopts.gson.ConfigBranchSerializer;
import io.gitlab.jfronny.respackopts.gson.EnumEntrySerializer;
import io.gitlab.jfronny.respackopts.gson.NumericEntrySerializer;
2021-06-10 16:07:22 +02:00
import io.gitlab.jfronny.respackopts.gui.GuiFactory;
2020-11-24 22:04:13 +01:00
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.loader.api.FabricLoader;
2021-06-10 13:10:12 +02:00
import net.minecraft.util.Identifier;
2020-12-28 12:12:59 +01:00
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
2020-11-24 22:04:13 +01:00
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
2020-11-24 22:04:13 +01:00
@Environment(EnvType.CLIENT)
public class Respackopts implements ClientModInitializer {
2021-06-10 13:10:12 +02:00
public static final Integer META_VERSION = 1;
public static final String ID = "respackopts";
public static final Identifier CONF_ID = new Identifier(ID, "conf.json");
public static final Logger LOGGER = LogManager.getFormatterLogger(ID);
private static final Path CONF_DIR = FabricLoader.getInstance().getConfigDir().resolve(ID);
public static final String FILE_EXTENSION = ".rpo";
public static final Set<Runnable> SAVE_ACTIONS = new HashSet<>();
public static final Map<String, ConfigBranch> CONFIG_BRANCH = new HashMap<>();
public static final Gson GSON;
2020-11-24 22:04:13 +01:00
public static GuiFactory factory = new GuiFactory();
public static Map<String, Respackmeta> resPackMetas = new HashMap<>();
public static boolean forceRespackReload = false;
2021-06-10 13:10:12 +02:00
static {
GSON = new GsonBuilder()
.registerTypeAdapter(ConfigEnumEntry.class, new EnumEntrySerializer())
.registerTypeAdapter(ConfigNumericEntry.class, new NumericEntrySerializer())
.registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer())
.registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer())
.setPrettyPrinting()
.create();
}
2020-11-24 22:04:13 +01:00
@Override
public void onInitializeClient() {
try {
2021-06-10 13:10:12 +02:00
Files.createDirectories(CONF_DIR);
} catch (IOException e) {
2021-06-10 13:10:12 +02:00
Respackopts.LOGGER.error(e);
}
2020-11-25 21:58:21 +01:00
if (FabricLoader.getInstance().isDevelopmentEnvironment())
2021-06-10 13:10:12 +02:00
SAVE_ACTIONS.add(() -> LOGGER.info("Save"));
}
public static void save() {
for (String s : resPackMetas.keySet()) {
s = resPackMetas.get(s).id;
2021-06-10 16:07:22 +02:00
//LOGGER.info(s + ": " + CONFIG_BRANCH.get(s));
2021-06-10 13:10:12 +02:00
try (Writer writer = Files.newBufferedWriter(CONF_DIR.resolve(s + ".json"))) {
GSON.toJson(CONFIG_BRANCH.get(s), writer);
writer.flush();
} catch (IOException e) {
2021-06-10 13:10:12 +02:00
Respackopts.LOGGER.error(e);
}
}
2021-06-10 13:10:12 +02:00
for (Runnable action : SAVE_ACTIONS) {
action.run();
}
}
public static void load(String id) {
2021-06-10 13:10:12 +02:00
Path q = CONF_DIR.resolve(id + ".json");
if (Files.exists(q)) {
2021-06-10 13:10:12 +02:00
try (Reader reader = Files.newBufferedReader(q)) {
ConfigBranch b = GSON.fromJson(reader, ConfigBranch.class);
if (CONFIG_BRANCH.containsKey(id))
2021-06-10 14:55:03 +02:00
CONFIG_BRANCH.get(id).sync(b, SyncMode.CONF_LOAD);
2021-06-10 13:10:12 +02:00
else
CONFIG_BRANCH.put(id, b);
2021-06-10 14:55:03 +02:00
} catch (IOException e) {
2021-06-10 13:10:12 +02:00
LOGGER.error("Failed to load " + id, e);
}
}
2021-06-10 13:10:12 +02:00
/*if ("lumi".equals(id)) {
LOGGER.info("w" + CONFIG_BRANCH.get(id).subClasses.get("subcategoryTest").booleanEntries.get("enableLangJokeFallback").value);
}*/
}
2020-11-24 22:04:13 +01:00
}