/** Configを同期する。 */
 public static void syncConfig() {
   String separator = System.lineSeparator();
   String restart = separator + "Please restart Minecraft to reflect this setting." + separator;
   try {
     // General
     isUpdateCheckEnabled =
         cfg.getBoolean(
             "enabledUpdateCheck",
             GENERAL,
             isUpdateCheckEnabled,
             "Update Check is valid when true." + restart);
     efficiencyPerfectTool =
         cfg.getFloat(
             "efficiencyPerfectTool",
             GENERAL,
             efficiencyPerfectTool,
             1,
             Float.MAX_VALUE,
             "Efficiency of Ofalen Perfect Tool." + restart);
     sizeExplosion =
         (byte)
             cfg.getInt(
                 "sizeExplosion",
                 GENERAL,
                 sizeExplosion,
                 0,
                 Byte.MAX_VALUE,
                 "Explosion size of Explosion Ball.");
     // Difficulty
     amountDrop =
         (byte)
             cfg.getInt(
                 "amountDrop",
                 DIFFICULTY,
                 amountDrop,
                 1,
                 Byte.MAX_VALUE,
                 "Drop amount of Ofalen Fragment from Ofalen Ore.");
     // Generate
     isGeneratorEnabled =
         cfg.getBoolean(
             "enabledGenerator",
             GENERATE,
             isGeneratorEnabled,
             "Ofalen Ore will be generated when true.");
     limitGeneration =
         (byte)
             cfg.getInt(
                 "limitGeneration",
                 GENERATE,
                 limitGeneration,
                 1,
                 Byte.MAX_VALUE,
                 "Maximum generation size of Ofalen Ore.");
     frequencyGeneration =
         (byte)
             cfg.getInt(
                 "GenerationFrequency",
                 GENERATE,
                 frequencyGeneration,
                 1,
                 Byte.MAX_VALUE,
                 "Generation Frequency of Ofalen Ore.");
     probabilityLodeGeneration =
         (short)
             cfg.getInt(
                 "probabilityLodeGeneration",
                 GENERATE,
                 probabilityLodeGeneration,
                 1,
                 10000,
                 "Generation probability of Huge Ofalen Ore Lode.(/10000)");
     // Machine
     factorFurnaceFuelBurningTime =
         (short)
             cfg.getInt(
                 "factorFurnaceFuelBurningTime",
                 MACHINE,
                 factorFurnaceFuelBurningTime,
                 1,
                 Short.MAX_VALUE,
                 "Burning time factor of furnace fuel.");
     timeStoneFuelBurning =
         (short)
             cfg.getInt(
                 "timeStoneFuelBurning",
                 MACHINE,
                 timeStoneFuelBurning,
                 1,
                 Short.MAX_VALUE,
                 "Burning time of Stone Fuel.(tick)");
     timeOfalenFuelBurning =
         (short)
             cfg.getInt(
                 "timeOfalenFuelBurning",
                 MACHINE,
                 timeOfalenFuelBurning,
                 1,
                 Short.MAX_VALUE,
                 "Burning time of Ofalen Fuel.(tick)");
     timeSmelting =
         (short)
             cfg.getInt(
                 "timeSmelting",
                 MACHINE,
                 timeSmelting,
                 1,
                 Short.MAX_VALUE,
                 "Working time of Ofalen Smelting Machine.(tick)");
     timeConverting =
         (short)
             cfg.getInt(
                 "timeConverting",
                 MACHINE,
                 timeConverting,
                 1,
                 Short.MAX_VALUE,
                 "Working time of Ofalen Converting Machine.(tick)");
     timeRepairing =
         (short)
             cfg.getInt(
                 "timeRepairing",
                 MACHINE,
                 timeRepairing,
                 1,
                 Short.MAX_VALUE,
                 "Working time of Ofalen Repairing Machine.(tick)");
     timeFusing =
         (short)
             cfg.getInt(
                 "timeFusing",
                 MACHINE,
                 timeFusing,
                 1,
                 Short.MAX_VALUE,
                 "Working time of Ofalen Fusing Machine.(tick)");
     baseOfalenSmeltingAmount =
         (byte)
             cfg.getInt(
                 "baseOfalenSmeltingAmount",
                 MACHINE,
                 baseOfalenSmeltingAmount,
                 1,
                 64,
                 "Smelting amount of Ofalen Smelting Machine from Ofalen Ore to Ofalen."
                     + restart);
     // Recipe
     blankLumpRecipe =
         (byte)
             cfg.getInt(
                 "blankLumpRecipe",
                 RECIPE,
                 blankLumpRecipe,
                 0,
                 8,
                 "Recipe of \"Lump of Stone\". Number is location of space."
                     + separator
                     + "0 1 2"
                     + separator
                     + "3 4 5"
                     + separator
                     + "6 7 8"
                     + restart);
     amountShieldIngotRecipe =
         (byte)
             cfg.getInt(
                 "amountShieldIngotRecipe",
                 RECIPE,
                 amountShieldIngotRecipe,
                 1,
                 64,
                 "Amount of Ofalen Shield Ingot when made by normal recipe." + restart);
     amountTeleportPearlRecipe =
         (byte)
             cfg.getInt(
                 "amountTeleportPearlRecipe",
                 RECIPE,
                 amountTeleportPearlRecipe,
                 1,
                 64,
                 "Amount of Ofalen Teleport Pearl when made by normal recipe." + restart);
     amountFloatDustRecipe =
         (byte)
             cfg.getInt(
                 "amountFloatDustRecipe",
                 RECIPE,
                 amountFloatDustRecipe,
                 1,
                 64,
                 "Amount of Ofalen Float Dust when made by normal recipe." + restart);
     amountCollectingLampRecipe =
         (byte)
             cfg.getInt(
                 "amountCollectingLampRecipe",
                 RECIPE,
                 amountCollectingLampRecipe,
                 1,
                 64,
                 "Amount of Ofalen Collecting Dust when made by normal recipe." + restart);
     // Future
     amountShieldDamage =
         (short)
             cfg.getInt(
                 "amountShieldDamage",
                 FUTURE,
                 amountShieldDamage,
                 0,
                 64 * 9,
                 "Damage amount of Ofalen Shield when protect player.");
     amountTeleporterDamage =
         (short)
             cfg.getInt(
                 "amountTeleporterDamage",
                 FUTURE,
                 amountTeleporterDamage,
                 0,
                 64,
                 "Damage amount of Ofalen Teleporter when teleport player.");
     amountFloaterDamage =
         (short)
             cfg.getInt(
                 "amountFloaterDamage",
                 FUTURE,
                 amountFloaterDamage,
                 0,
                 64 * 9,
                 "Damage amount of Ofalen Floater when float player.");
     amountCollectorDamageItem =
         (short)
             cfg.getInt(
                 "amountCollectorDamageItem",
                 FUTURE,
                 amountCollectorDamageItem,
                 0,
                 64 * 9,
                 "Damage amount of Ofalen Collector when collect item.");
     amountCollectorDamageExp =
         (short)
             cfg.getInt(
                 "amountCollectorDamageExp",
                 FUTURE,
                 amountCollectorDamageExp,
                 0,
                 64 * 9,
                 "Damage amount of Ofalen Collector when collect experience orb.");
     intervalFloaterDamage =
         (byte)
             cfg.getInt(
                 "intervalFloaterDamage",
                 FUTURE,
                 intervalFloaterDamage,
                 0,
                 Byte.MAX_VALUE,
                 "Damage interval of Ofalen Floater.(tick)");
   } catch (Exception e) {
     OfalenLog.error("Error on loading config.", "OfalenModConfigCore");
   } finally {
     cfg.save();
   }
 }
  public void load(File file) {
    Configuration config = new Configuration(file, String.valueOf(VERSION));
    config.setCategoryComment(
        GAMEPLAY,
        "These settings will affect how the mod behaves in certain situations and the players' overall gameplay,\n"
            + "but generally won't affect performance.");
    config.setCategoryComment(
        INTERFACE, "These setting will affect the look and feel of the Atlas' interface.");
    config.setCategoryComment(
        PERFORMANCE,
        "These settings affect the algorithms for scanning the world, drawing the map etc. Changing them may\n"
            + "improve the game's overall stability and performance at the cost of Atlas' functionality.");

    doSaveBrowsingPos =
        config.getBoolean(
            "do_save_browsing_pos",
            GAMEPLAY,
            doSaveBrowsingPos,
            "Whether to remember last open browsing position and zoom level for each dimension in every atlas.\n"
                + "If disabled, all dimensions and all atlases will be \"synchronized\" at the same coordinates and\n"
                + "zoom level, and map will \"follow\" player by default.");
    autoDeathMarker =
        config.getBoolean(
            "auto_death_marker",
            GAMEPLAY,
            autoDeathMarker,
            "Whether to add local marker for the spot where the player died.");
    autoVillageMarkers =
        config.getBoolean(
            "auto_village_markers",
            GAMEPLAY,
            autoVillageMarkers,
            "Whether to add global markers for NPC villages.");

    defaultScale =
        config.getFloat(
            "default_scale",
            INTERFACE,
            defaultScale,
            (float) GuiAtlas.MIN_SCALE,
            (float) GuiAtlas.MAX_SCALE,
            "Default zoom level. The number corresponds to the size of a block on the map relative to the size of\n"
                + "a GUI pixel.");
    doScaleMarkers =
        config.getBoolean(
            "do_scale_markers",
            INTERFACE,
            doScaleMarkers,
            "Whether to change markers size depending on zoom level.");

    scanRadius =
        config.getInt(
            "area_scan_radius",
            PERFORMANCE,
            scanRadius,
            1,
            256,
            "The radius of the area around the player which is scanned by the Atlas at regular intervals.\n"
                + "Note that this will not force faraway chunks to load, unless force_chunk_loading is enabled.\n"
                + "Lower value gives better performance.");
    forceChunkLoading =
        config.getBoolean(
            "force_chunk_loading",
            PERFORMANCE,
            forceChunkLoading,
            "Force loading of chunks within scan radius even if it exceeds regular chunk loading distance.\n"
                + "Enabling this may SEVERELY decrease performance!");
    newScanInterval =
        config.getFloat(
            "area_scan_interval",
            PERFORMANCE,
            newScanInterval,
            1f / 20f,
            3600,
            "Time in seconds between two scans of the area.\nHigher value gives better performance.");
    doRescan =
        config.getBoolean(
            "do_rescan",
            PERFORMANCE,
            doRescan,
            "Whether to rescan chunks in the area that have been previously mapped. This is useful in case of\n"
                + "changes in coastline (including small ponds of water and lava), or if land disappears completely\n"
                + "(for sky worlds).\nDisable for better performance.");
    rescanRate =
        config.getInt(
            "area_rescan_rate",
            PERFORMANCE,
            rescanRate,
            1,
            1000,
            "The number of area scans between full rescans.\nHigher value gives better performance.");
    doScanPonds =
        config.getBoolean(
            "do_scan_ponds",
            PERFORMANCE,
            doScanPonds,
            "Whether to perform additional scanning to locate small ponds of water or lava.\nDisable for better performance.");

    config.save();
  }