package jas.spawner.refactor.configsloader;
import jas.common.helper.FileUtilities;
import jas.common.helper.GsonHelper;
import jas.spawner.modern.DefaultProps;
import jas.spawner.refactor.WorldProperties;
import jas.spawner.refactor.structure.StructureHandlerLoader;
import java.io.File;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.google.gson.Gson;
public class ConfigLoader {
public static interface VersionedFile {
public String getVersion();
}
public static class LoadedFile<T extends VersionedFile> {
public final T saveObject; // TODO: Rename loadedFile: or NOT as it is Write as well as read
public LoadedFile(T saveObject) {
this.saveObject = saveObject;
}
}
public LoadedFile<LivingTypeLoader> livingTypeLoader;
public LoadedFile<DespawnRulesLoader> despawnRulesLoader;
public LoadedFile<LivingSettingsLoader> livingGroupLoader;
public Map<String, LoadedFile<LivingHandlerLoader>> livingHandlerLoaders;
public LoadedFile<BiomeSettingsLoader> biomeGroupLoader;
public Map<String, LoadedFile<BiomeSpawnListLoader>> biomeSpawnListLoaders;
public LoadedFile<StructureHandlerLoader> structureHandlerLoader;
public ConfigLoader() {
}
public ConfigLoader(File settingDirectory, WorldProperties worldProperties) {
loadFromConfig(settingDirectory, worldProperties);
}
public ConfigLoader loadFromConfig(File settingDirectory, WorldProperties worldProperties) {
Type[] types = new java.lang.reflect.Type[] { LivingTypeLoader.class, LivingSettingsLoader.class,
LivingHandlerLoader.class, BiomeSettingsLoader.class, BiomeSpawnListLoader.class,
StructureHandlerLoader.class, DespawnRulesLoader.class };
Object[] serializers = new Object[] { new LivingTypeLoader.Serializer(), new LivingSettingsLoader.Serializer(),
new LivingHandlerLoader.Serializer(), new BiomeSettingsLoader.Serializer(),
new BiomeSpawnListLoader.Serializer(worldProperties.getFolderConfiguration().sortCreatureByBiome),
new StructureHandlerLoader.Serializer(worldProperties.getFolderConfiguration().sortCreatureByBiome),
new DespawnRulesLoader.Serializer() };
Gson gson = GsonHelper.createGson(true, types, serializers);
this.livingTypeLoader = new LoadedFile(GsonHelper.readOrCreateFromGson(
FileUtilities.createReader(new File(settingDirectory, "CreatureType.cfg"), false),
LivingTypeLoader.class, gson));
this.livingGroupLoader = new LoadedFile(GsonHelper.readOrCreateFromGson(
FileUtilities.createReader(new File(settingDirectory, "LivingGroups.cfg"), false),
LivingSettingsLoader.class, gson));
this.livingHandlerLoaders = new HashMap<String, ConfigLoader.LoadedFile<LivingHandlerLoader>>();
File handlerFileFolder = new File(settingDirectory, "/" + DefaultProps.ENTITYHANDLERDIR);
File[] filesLH = FileUtilities.getFileInDirectory(handlerFileFolder, ".cfg");
for (File file : filesLH) {
livingHandlerLoaders.put(
file.getName(),
new LoadedFile(GsonHelper.readOrCreateFromGson(FileUtilities.createReader(file, false),
LivingHandlerLoader.class, gson)));
}
this.biomeGroupLoader = new LoadedFile(GsonHelper.readOrCreateFromGson(
FileUtilities.createReader(new File(settingDirectory, "/" + "BiomeGroups.cfg"), false),
BiomeSettingsLoader.class, gson));
File entriesDir = new File(settingDirectory, "/" + DefaultProps.ENTITYSPAWNRDIR);
File[] filesSLE = FileUtilities.getFileInDirectory(entriesDir, ".cfg");
this.biomeSpawnListLoaders = new HashMap<String, ConfigLoader.LoadedFile<BiomeSpawnListLoader>>();
for (File file : filesSLE) {
biomeSpawnListLoaders.put(
file.getName(),
new LoadedFile(GsonHelper.readOrCreateFromGson(FileUtilities.createReader(file, false),
BiomeSpawnListLoader.class, gson)));
}
this.structureHandlerLoader = new LoadedFile<StructureHandlerLoader>(GsonHelper.readOrCreateFromGson(
FileUtilities.createReader(new File(settingDirectory, "/" + "StructureSpawns.cfg"), false),
StructureHandlerLoader.class, gson));
this.despawnRulesLoader = new LoadedFile<DespawnRulesLoader>(GsonHelper.readOrCreateFromGson(
FileUtilities.createReader(new File(settingDirectory, "/" + "DespawnRules.cfg"), false),
DespawnRulesLoader.class, gson));
return this;
}
public ConfigLoader saveToConfig(File settingDirectory, WorldProperties worldProperties) {
Type[] types = new java.lang.reflect.Type[] { LivingTypeLoader.class, LivingSettingsLoader.class,
LivingHandlerLoader.class, BiomeSettingsLoader.class, BiomeSpawnListLoader.class,
StructureHandlerLoader.class, DespawnRulesLoader.class };
Object[] serializers = new Object[] { new LivingTypeLoader.Serializer(), new LivingSettingsLoader.Serializer(),
new LivingHandlerLoader.Serializer(), new BiomeSettingsLoader.Serializer(),
new BiomeSpawnListLoader.Serializer(worldProperties.getFolderConfiguration().sortCreatureByBiome),
new StructureHandlerLoader.Serializer(worldProperties.getFolderConfiguration().sortCreatureByBiome),
new DespawnRulesLoader.Serializer() };
Gson gson = GsonHelper.createGson(true, types, serializers);
GsonHelper.writeToGson(FileUtilities.createWriter(new File(settingDirectory, "CreatureType.cfg"), true),
livingTypeLoader.saveObject, LivingTypeLoader.class, gson);
GsonHelper.writeToGson(FileUtilities.createWriter(new File(settingDirectory, "LivingGroups.cfg"), true),
livingGroupLoader.saveObject, LivingSettingsLoader.class, gson);
for (Entry<String, LoadedFile<LivingHandlerLoader>> entry : livingHandlerLoaders.entrySet()) {
LivingHandlerLoader loader = entry.getValue().saveObject;
File handlerFileFolder = new File(settingDirectory, "/" + DefaultProps.ENTITYHANDLERDIR);
if (entry.getValue().saveObject.getHandlers().isPresent()) {
GsonHelper.writeToGson(
FileUtilities.createWriter(new File(handlerFileFolder, entry.getKey() + ".cfg"), true),
entry.getValue().saveObject, LivingHandlerLoader.class, gson);
}
}
GsonHelper.writeToGson(FileUtilities.createWriter(new File(settingDirectory, "BiomeGroups.cfg"), true),
biomeGroupLoader.saveObject, BiomeSettingsLoader.class, gson);
for (Entry<String, LoadedFile<BiomeSpawnListLoader>> entry : biomeSpawnListLoaders.entrySet()) {
BiomeSpawnListLoader loader = entry.getValue().saveObject;
File handlerFileFolder = new File(settingDirectory, "/" + DefaultProps.ENTITYSPAWNRDIR);
GsonHelper.writeToGson(
FileUtilities.createWriter(new File(handlerFileFolder, entry.getKey() + ".cfg"), true),
entry.getValue().saveObject, BiomeSpawnListLoader.class, gson);
}
GsonHelper.writeToGson(FileUtilities.createWriter(new File(settingDirectory, "StructureSpawns.cfg"), true),
structureHandlerLoader.saveObject, StructureHandlerLoader.class, gson);
GsonHelper.writeToGson(FileUtilities.createWriter(new File(settingDirectory, "DespawnRules.cfg"), true),
despawnRulesLoader.saveObject, DespawnRulesLoader.class, gson);
return this;
}
public static File getFile(File configDirectory, String saveName, String fileName) {
String filePath = saveName + "/" + DefaultProps.ENTITYSPAWNRDIR;
if (fileName != null && !fileName.equals("")) {
filePath = filePath.concat(fileName).concat(".cfg");
}
return new File(configDirectory, filePath);
}
public void saveToConfigs(File settingDirectory) {
}
}