package me.exz.wailanbt.configuration; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import me.exz.wailanbt.handler.NBTHandler; import me.exz.wailanbt.reference.Reference; import me.exz.wailanbt.util.LogHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.StatCollector; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import java.io.*; import java.util.HashSet; import java.util.Map; import java.util.Set; public class config { public static JsonObject configJson; public static File modConfigurationDirectory; private static File configDir; @SuppressWarnings("ResultOfMethodCallIgnored") public static void init(File dir, EntityPlayer player) { configDir = new File(dir, Reference.MOD_ID); if (!configDir.exists()) { try { configDir.mkdir(); File defaultFile = new File(configDir, "default.json"); defaultFile.createNewFile(); LogHelper.info("Empty config created"); player.addChatMessage(new ChatComponentTranslation("wailanbt.info.CreateEmptyConfig")); } catch (Exception e) { LogHelper.info("Create config file failed"); player.addChatMessage(new ChatComponentTranslation("wailanbt.info.FailCreateEmptyConfig")); e.printStackTrace(); } } loadConfig(player); } public static void loadConfig(EntityPlayer player) { configJson = new JsonObject(); NBTHandler.manager = new ScriptEngineManager(null); NBTHandler.engine = NBTHandler.manager.getEngineByName("javascript"); NBTHandler.scriptSet = new HashSet<String>(); // try { // NBTHandler.engine.eval("var names={}"); // } catch (ScriptException e) { // e.printStackTrace(); // } // for (Object item : Item.itemRegistry) { // String ID = String.valueOf(Item.itemRegistry.getIDForObject(item)); // String name = StatCollector.translateToLocal(((Item)item).getUnlocalizedName()+".name").trim(); // try { // NBTHandler.engine.eval("names['"+ID+"']='"+name+"'"); // } catch (ScriptException e) { // e.printStackTrace(); // } // } File[] configFiles = configDir.listFiles(new FilenameFilter(){ public boolean accept(File dir, String name) { return name.endsWith(".json"); } }); if (!(configFiles == null)) { for (File configFile : configFiles) { if (configFile.isFile()) { try { InputStream inputStream = new FileInputStream(configFile); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); JsonParser parser = new JsonParser(); JsonElement jsonElementCurrent = parser.parse(inputStreamReader); if (jsonElementCurrent.isJsonObject()) { JsonObject jsonObjectCurrent = jsonElementCurrent.getAsJsonObject(); mergeJson(jsonObjectCurrent); } else { LogHelper.error("Parse " + configFile.getName() + " failed"); player.addChatComponentMessage(new ChatComponentText(String.format(StatCollector.translateToLocal("wailanbt.info.JsonContentError"),configFile.getName()))); } } catch (Exception e) { //e.printStackTrace(); LogHelper.error("Error parsing file '" + configFile.getName() + "'. Possible error: " + e.getCause().getMessage()); player.addChatComponentMessage(new ChatComponentText(String.format(StatCollector.translateToLocal("wailanbt.info.ParsingError"),configFile.getName()))); } } } } LogHelper.info("Config Loaded"); System.out.println(configJson); player.addChatMessage(new ChatComponentTranslation("wailanbt.info.ConfigLoaded")); } private static void mergeJson(JsonObject jsonObjectCurrent) { Set<Map.Entry<String, JsonElement>> holdItemA = jsonObjectCurrent.entrySet(); try { for (Map.Entry<String, JsonElement> holdItem : holdItemA) { if (configJson.has(holdItem.getKey())) { JsonObject configJsonHoldItem = configJson.get(holdItem.getKey()).getAsJsonObject(); Set<Map.Entry<String, JsonElement>> teA = holdItem.getValue().getAsJsonObject().entrySet(); for (Map.Entry<String, JsonElement> te : teA) { if (!configJsonHoldItem.has(te.getKey())) { configJsonHoldItem.add(te.getKey(), te.getValue()); } } configJson.remove(holdItem.getKey()); configJson.add(holdItem.getKey(), configJsonHoldItem); } else { configJson.add(holdItem.getKey(), holdItem.getValue()); } } } catch (Exception e) { e.printStackTrace(); } } }