package org.halvors.electrometrics.common; import cpw.mods.fml.common.Loader; import io.netty.buffer.ByteBuf; import net.minecraftforge.common.config.Configuration; import org.halvors.electrometrics.common.base.MachineType; import org.halvors.electrometrics.common.network.NetworkHandler; import org.halvors.electrometrics.common.util.energy.EnergyUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ConfigurationManager { public static final String CATEGORY_MACHINE = "machine"; public static final String CATEGORY_INTEGRATION = "integration"; public static final String CATEGORY_CLIENT = "client"; public static class General { public static boolean enableUpdateNotice; public static boolean destroyDisabledBlocks; public static double toJoules; public static double toElectricalUnits; } public static class Machine { private static final Map<MachineType, Boolean> machines = new HashMap<>(); public static boolean isEnabled(MachineType machineType) { return machines.get(machineType) != null && machines.get(machineType); } public static void setEntry(MachineType machineType, boolean isEnabled) { machines.put(machineType, isEnabled); } } public static class Integration { public static boolean isVersionCheckerEnabled; public static boolean isBuildCraftEnabled; public static boolean isCoFHCoreEnabled; public static boolean isMekanismEnabled; } public static class Client { public static EnergyUnit energyUnit; } public static void loadConfiguration(Configuration configuration) { configuration.load(); // General. General.enableUpdateNotice = configuration.get(Configuration.CATEGORY_GENERAL, "EnableUpdateNotice", true).getBoolean(); General.destroyDisabledBlocks = configuration.get(Configuration.CATEGORY_GENERAL, "DestroyDisabledBlocks", true).getBoolean(); General.toJoules = configuration.get(Configuration.CATEGORY_GENERAL, "RFToJoules", 2.5).getDouble(); General.toElectricalUnits = configuration.get(Configuration.CATEGORY_GENERAL, "RFToElectricalUnits", 0.25).getDouble(); // Machine. for (MachineType machineType : MachineType.values()) { Machine.setEntry(machineType, configuration.get(CATEGORY_MACHINE, machineType.getUnlocalizedName() + "Enabled", true).getBoolean()); } // Integration. Integration.isVersionCheckerEnabled = configuration.get(CATEGORY_INTEGRATION, "VersionChecker", Loader.isModLoaded("VersionChecker")).getBoolean(); Integration.isBuildCraftEnabled = configuration.get(CATEGORY_INTEGRATION, "BuildCraft", Loader.isModLoaded("BuildCraft|Core")).getBoolean(); Integration.isCoFHCoreEnabled = configuration.get(CATEGORY_INTEGRATION, "CoFHCore", Loader.isModLoaded("CoFHCore")).getBoolean(); Integration.isMekanismEnabled = configuration.get(CATEGORY_INTEGRATION, "Mekanism", Loader.isModLoaded("Mekanism")).getBoolean(); // Client. Client.energyUnit = EnergyUnit.getUnitFromSymbol(configuration.get(CATEGORY_CLIENT, "EnergyUnitType", EnergyUnit.REDSTONE_FLUX.getSymbol(), "The default energy system to display. " + EnergyUnit.getSymbols(), EnergyUnit.getSymbols().toArray(new String[EnergyUnit.getSymbols().size()])).getString()); configuration.save(); } public static void saveConfiguration(Configuration configuration) { configuration.get(CATEGORY_CLIENT, "EnergyUnitType", EnergyUnit.REDSTONE_FLUX.getSymbol(), "The default energy system to display. " + EnergyUnit.getSymbols(), EnergyUnit.getSymbols().toArray(new String[EnergyUnit.getSymbols().size()])).set(Client.energyUnit.getSymbol()); configuration.save(); } public static void readConfiguration(ByteBuf dataStream) { // General. General.enableUpdateNotice = dataStream.readBoolean(); General.destroyDisabledBlocks = dataStream.readBoolean(); General.toJoules = dataStream.readDouble(); General.toElectricalUnits = dataStream.readDouble(); // Machine. for (MachineType machineType : MachineType.values()) { Machine.setEntry(machineType, dataStream.readBoolean()); } // Integration. Integration.isVersionCheckerEnabled = dataStream.readBoolean(); Integration.isBuildCraftEnabled = dataStream.readBoolean(); Integration.isCoFHCoreEnabled = dataStream.readBoolean(); Integration.isMekanismEnabled = dataStream.readBoolean(); // Client. // We don't sync this as this is client specific changes that the server shouldn't care about. } public static void writeConfiguration(ByteBuf dataStream) { List<Object> objects = new ArrayList<>(); // General. objects.add(General.enableUpdateNotice); objects.add(General.destroyDisabledBlocks); objects.add(General.toJoules); objects.add(General.toElectricalUnits); // Machine. for (MachineType machineType : MachineType.values()) { objects.add(Machine.isEnabled(machineType)); } // Integration. objects.add(Integration.isVersionCheckerEnabled); objects.add(Integration.isBuildCraftEnabled); objects.add(Integration.isCoFHCoreEnabled); objects.add(Integration.isMekanismEnabled); // Client. // We don't sync this as this is client specific changes that the server shouldn't care about. NetworkHandler.writeObjects(objects, dataStream); } }