package chbachman.armour.util.json;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import net.minecraft.item.ItemStack;
import org.apache.commons.io.filefilter.FileFilterUtils;
import chbachman.api.registry.UpgradeRegistry;
import chbachman.api.upgrade.IUpgrade;
import chbachman.api.upgrade.Recipe;
import chbachman.armour.ModularArmour;
import com.google.gson.GsonBuilder;
public class JsonRegister {
public static void registerCustomSerializers(GsonBuilder gsonBuilder) {
gsonBuilder.registerTypeAdapter(ItemStack.class, new CustomItemStackJson());
gsonBuilder.registerTypeAdapter(IUpgrade.class, new CustomIUpgradeJson());
gsonBuilder.registerTypeAdapter(Recipe.class, new CustomRecipeJson());
}
public static void createJsonRecipes(GsonBuilder gsonBuilder) {
File folder = new File(ModularArmour.getConfigDirectory(), "recipes");
folder.mkdir();
if (folder.listFiles((FileFilter) FileFilterUtils.suffixFileFilter(".json")).length == 0) {
for (Recipe recipe : UpgradeRegistry.getRecipeList()) {
writeRecipeToFile(gsonBuilder, recipe, folder);
}
}
}
public static void registerJsonRecipes(GsonBuilder gsonBuilder) {
File folder = new File(ModularArmour.getConfigDirectory(), "recipes");
folder.mkdir();
File[] files = folder.listFiles((FileFilter) FileFilterUtils.suffixFileFilter(".json"));
UpgradeRegistry.INSTANCE.recipeList.clear();
for (File file : files) {
UpgradeRegistry.registerRecipe(createRecipeFromJson(gsonBuilder, file));
}
}
public static void writeRecipeToFile(GsonBuilder gsonBuilder, Recipe recipe, File directory) {
String baseName = recipe.getRecipeOutput().getBaseName();
File destination = new File(directory, baseName + ".json");
int counter = 0;
while (destination.exists()) {
destination = new File(directory, baseName + counter + ".json");
counter++;
}
try {
FileWriter writer = new FileWriter(destination);
writer.write(createJsonFromRecipe(gsonBuilder, recipe));
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String createJsonFromRecipe(GsonBuilder gsonBuilder, Recipe recipe) {
return gsonBuilder.setPrettyPrinting().create().toJson(recipe, Recipe.class);
}
public static Recipe createRecipeFromJson(GsonBuilder gsonBuilder, File file) {
try {
return gsonBuilder.setPrettyPrinting().create().fromJson(new FileReader(file), Recipe.class);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
}