Guard against corrupted config files on 1.14

This commit is contained in:
Jonas Herzig
2019-07-19 14:48:00 +02:00
parent 67d7af2dc3
commit 3cd21b8a78

View File

@@ -1,6 +1,8 @@
package com.replaymod.core; package com.replaymod.core;
import com.replaymod.core.events.SettingsChangedCallback; import com.replaymod.core.events.SettingsChangedCallback;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
@@ -30,6 +32,7 @@ import java.nio.file.Path;
import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.core.versions.MCVer.*;
public class SettingsRegistry { public class SettingsRegistry {
private static Logger LOGGER = LogManager.getLogger();
private Map<SettingKey<?>, Object> settings = Collections.synchronizedMap(new LinkedHashMap<>()); private Map<SettingKey<?>, Object> settings = Collections.synchronizedMap(new LinkedHashMap<>());
//#if MC>=11400 //#if MC>=11400
private final Path configFile = getMinecraft().runDirectory.toPath().resolve("config/replaymod.json"); private final Path configFile = getMinecraft().runDirectory.toPath().resolve("config/replaymod.json");
@@ -59,6 +62,11 @@ public class SettingsRegistry {
} }
Gson gson = new Gson(); Gson gson = new Gson();
JsonObject root = gson.fromJson(config, JsonObject.class); JsonObject root = gson.fromJson(config, JsonObject.class);
if (root == null) {
LOGGER.error("Config file {} appears corrupted: {}", configFile, config);
save();
return;
}
for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) { for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) {
SettingKey<?> key = entry.getKey(); SettingKey<?> key = entry.getKey();
JsonElement category = root.get(key.getCategory()); JsonElement category = root.get(key.getCategory());