package WayofTime.bloodmagic.meteor; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.gson.Serializers; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.lang3.tuple.Pair; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MeteorConfigHandler { private static final Map DEFAULT_METEORS = new HashMap(); private static File meteorDir; public static void init(File meteorDirectory) { meteorDir = meteorDirectory; handleMeteors(true); } public static void handleMeteors(boolean checkNewVersion) { // Clear the meteors so that reloading in-game can be done MeteorRegistry.meteorMap.clear(); List> defaultMeteors = getDefaultMeteors(); try { // Create defaults if the folder doesn't exist if (!meteorDir.exists() && meteorDir.mkdir()) { for (Pair meteor : defaultMeteors) { String json = Serializers.GSON.toJson(meteor.getRight()); FileWriter writer = new FileWriter(new File(meteorDir, meteor.getLeft() + ".json")); writer.write(json); writer.close(); } } // Collect all meteors from the files File[] meteorFiles = meteorDir.listFiles((FileFilter) FileFilterUtils.suffixFileFilter(".json")); if (meteorFiles == null) return; List> meteors = new ArrayList>(); // Filter names so we can compare to defaults for (File meteorFile : meteorFiles) { Meteor meteor = Serializers.GSON.fromJson(new FileReader(meteorFile), Meteor.class); meteors.add(Pair.of(FilenameUtils.removeExtension(meteorFile.getName()), meteor)); } if (checkNewVersion && ConfigHandler.getConfig().getBoolean("resyncOnVersionChange", "Meteors", true, "Should the default meteors be regenerated if the mod has updated them")) { // Check defaults for new version for (Pair meteor : meteors) { Meteor defaultMeteor = DEFAULT_METEORS.get(meteor.getLeft()); if (defaultMeteor != null && defaultMeteor.version > meteor.getRight().version) { String json = Serializers.GSON.toJson(defaultMeteor); File meteorFile = new File(meteorDir, meteor.getLeft() + ".json"); new PrintWriter(meteorFile).close(); // Clear the file FileWriter fileWriter = new FileWriter(meteorFile); fileWriter.write(json); // Write the new contents fileWriter.close(); meteors.set(meteors.indexOf(meteor), Pair.of(meteor.getLeft(), defaultMeteor)); } } } // Finally, register all of our meteors for (Pair meteor : meteors) MeteorRegistry.registerMeteor(meteor.getRight().getCatalystStack(), meteor.getRight()); } catch (Exception e) { e.printStackTrace(); } ConfigHandler.getConfig().save(); } private static List> getDefaultMeteors() { List> holders = new ArrayList>(); // Iron List ironMeteorList = new ArrayList(); ironMeteorList.add(new MeteorComponent(400, "oreIron")); ironMeteorList.add(new MeteorComponent(200, "oreCopper")); ironMeteorList.add(new MeteorComponent(140, "oreTin")); ironMeteorList.add(new MeteorComponent(70, "oreSilver")); ironMeteorList.add(new MeteorComponent(80, "oreLead")); ironMeteorList.add(new MeteorComponent(30, "oreGold")); ironMeteorList.add(new MeteorComponent(60, "oreLapis")); ironMeteorList.add(new MeteorComponent(100, "oreRedstone")); Meteor ironMeteor = new Meteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5, 1000); ironMeteor.setVersion(2); // Gold List goldMeteorList = new ArrayList(); goldMeteorList.add(new MeteorComponent(200, "oreIron")); goldMeteorList.add(new MeteorComponent(100, "oreCopper")); goldMeteorList.add(new MeteorComponent(60, "oreTin")); goldMeteorList.add(new MeteorComponent(100, "oreGold")); goldMeteorList.add(new MeteorComponent(120, "oreLapis")); goldMeteorList.add(new MeteorComponent(30, "oreDiamond")); goldMeteorList.add(new MeteorComponent(20, "oreEmerald")); goldMeteorList.add(new MeteorComponent(20, "oreCoal")); Meteor goldMeteor = new Meteor(new ItemStack(Blocks.GOLD_BLOCK), goldMeteorList, 18, 6, 1000); goldMeteor.setVersion(3); List diamondMeteorList = new ArrayList(); diamondMeteorList.add(new MeteorComponent(50, "oreIron")); diamondMeteorList.add(new MeteorComponent(100, "oreGold")); diamondMeteorList.add(new MeteorComponent(10, "oreLapis")); diamondMeteorList.add(new MeteorComponent(250, "oreDiamond")); diamondMeteorList.add(new MeteorComponent(180, "oreEmerald")); diamondMeteorList.add(new MeteorComponent(50, "oreRedstone")); diamondMeteorList.add(new MeteorComponent(400, "oreCoal")); Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3, 1000); goldMeteor.setVersion(3); holders.add(Pair.of("IronMeteor", ironMeteor)); DEFAULT_METEORS.put("IronMeteor", ironMeteor); holders.add(Pair.of("GoldMeteor", goldMeteor)); DEFAULT_METEORS.put("GoldMeteor", goldMeteor); holders.add(Pair.of("DiamondMeteor", diamondMeteor)); DEFAULT_METEORS.put("DiamondMeteor", diamondMeteor); return holders; } }