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

136 lines
5.6 KiB
Java
Raw Normal View History

2020-11-24 22:04:13 +01:00
package io.gitlab.jfronny.respackopts;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
2020-11-24 22:04:13 +01:00
import io.gitlab.jfronny.respackopts.data.Config;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.loader.api.FabricLoader;
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 {
public static Map<String, Map<String, Boolean>> boolVals;
public static Map<String, Map<String, Double>> numVals;
public static Map<String, Map<String, String>> strVals;
public static Map<String, Map<String, Set<String>>> enumKeys;
2020-11-24 22:04:13 +01:00
public static Gson g = new Gson();
public static GuiFactory factory = new GuiFactory();
public static final Integer metaVersion = 1;
public static Map<String, Respackmeta> resPackMetas = new HashMap<>();
2020-11-24 22:04:13 +01:00
public static final String ID = "respackopts";
static final Path p = FabricLoader.getInstance().getConfigDir().resolve("respackopts");
public static final Set<Runnable> saveActions = new HashSet<>();
public static final String fileExtension = ".rpo";
public static boolean forceRespackReload = false;
2020-12-28 12:12:59 +01:00
public static final Logger logger = LogManager.getFormatterLogger(ID);
2020-11-24 22:04:13 +01:00
@Override
public void onInitializeClient() {
try {
Files.createDirectories(p);
} catch (IOException e) {
e.printStackTrace();
}
if (boolVals == null)
boolVals = new HashMap<>();
if (numVals == null)
numVals = new HashMap<>();
if (strVals == null)
strVals = new HashMap<>();
if (enumKeys == null)
enumKeys = new HashMap<>();
2020-11-25 21:58:21 +01:00
if (FabricLoader.getInstance().isDevelopmentEnvironment())
2020-12-28 12:12:59 +01:00
saveActions.add(() -> logger.info("Save"));
}
public static void save() {
for (String s : resPackMetas.keySet()) {
s = resPackMetas.get(s).id;
Config cfg = new Config();
if (boolVals.containsKey(s))
{
cfg.bools = new JsonObject();
for (Map.Entry<String, Boolean> entry : boolVals.get(s).entrySet()) {
cfg.bools.addProperty(entry.getKey(), entry.getValue());
}
}
if (numVals.containsKey(s))
{
cfg.doubles = new JsonObject();
for (Map.Entry<String, Double> entry : numVals.get(s).entrySet()) {
cfg.doubles.addProperty(entry.getKey(), entry.getValue());
}
}
if (strVals.containsKey(s))
{
cfg.strings = new JsonObject();
for (Map.Entry<String, String> entry : strVals.get(s).entrySet()) {
cfg.strings.addProperty(entry.getKey(), entry.getValue());
}
}
try {
Writer writer = Files.newBufferedWriter(p.resolve(s + ".json"));
g.toJson(cfg, writer);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
for (Runnable action : saveActions) {
action.run();
}
}
public static void load(String id) {
Path q = p.resolve(id + ".json");
if (Files.exists(q)) {
try {
Reader reader = Files.newBufferedReader(q);
Config c = g.fromJson(reader, Config.class);
reader.close();
2020-12-20 22:28:25 +01:00
if (c.bools != null) {
boolVals.get(id).forEach((i, val) -> {
if (c.bools.has(i)
&& c.bools.get(i).isJsonPrimitive()
&& c.bools.get(i).getAsJsonPrimitive().isBoolean()) {
boolVals.get(id).put(i, c.bools.get(i).getAsBoolean());
2020-12-28 12:12:59 +01:00
} else if (FabricLoader.getInstance().isDevelopmentEnvironment())
Respackopts.logger.error("Could not find bool " + i + " in " + id);
2020-12-20 22:28:25 +01:00
});
}
if (c.doubles != null) {
numVals.get(id).forEach((i, val) -> {
if (c.doubles.has(i)
&& c.doubles.get(i).isJsonPrimitive()
&& c.doubles.get(i).getAsJsonPrimitive().isNumber()) {
numVals.get(id).put(i, c.doubles.get(i).getAsNumber().doubleValue());
2020-12-28 12:12:59 +01:00
} else if (FabricLoader.getInstance().isDevelopmentEnvironment())
Respackopts.logger.error("Could not find num " + i + " in " + id);
2020-12-20 22:28:25 +01:00
});
}
if (c.strings != null) {
strVals.get(id).forEach((i, val) -> {
if (c.strings.has(i)
&& c.strings.get(i).isJsonPrimitive()
&& c.strings.get(i).getAsJsonPrimitive().isString()) {
strVals.get(id).put(i, c.strings.get(i).getAsString());
2020-12-28 12:12:59 +01:00
} else if (FabricLoader.getInstance().isDevelopmentEnvironment())
Respackopts.logger.error("Could not find str " + i + " in " + id);
2020-12-20 22:28:25 +01:00
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2020-11-24 22:04:13 +01:00
}