diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java index 4f224d1..c9f3a8a 100644 --- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java +++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java @@ -6,10 +6,18 @@ import java.nio.file.Path; public final class BetterControlsConfig { public static BetterControlsConfig load(final Path path) { - return ConfigSerializer.deserialize(path).setPath(path); + final BetterControlsConfig cfg = ConfigSerializer.read(path); + cfg.path = path; + + if (cfg.wasMigrated) { + cfg.save(); + } + + return cfg; } private Path path; + boolean wasMigrated = false; public final KeyBindingWithModifier keyToggleSprint = new KeyBindingWithModifier("key.bettercontrols.toggle_sprint"); public SprintMode sprintMode = SprintMode.TAP_TO_START; @@ -40,11 +48,6 @@ public final class BetterControlsConfig { BetterControlsConfig() {} - private BetterControlsConfig setPath(final Path path) { - this.path = path; - return this; - } - public KeyBindingWithModifier[] getAllKeyBindings() { return new KeyBindingWithModifier[] { keyToggleSprint, @@ -58,6 +61,6 @@ public final class BetterControlsConfig { } public void save() { - ConfigSerializer.serialize(path, this); + ConfigSerializer.write(path, this); } } diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java index 8328922..c07eb11 100644 --- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java +++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java @@ -89,10 +89,10 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js cfg.flightHorizontalSpeedMpCreativeSprinting = readHorizontalSpeedMultiplier(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightHorizontalSpeedMpCreativeSprinting); cfg.flightHorizontalSpeedMpSpectatorDefault = readHorizontalSpeedMultiplier(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightHorizontalSpeedMpSpectatorDefault); cfg.flightHorizontalSpeedMpSpectatorSprinting = readHorizontalSpeedMultiplier(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightHorizontalSpeedMpSpectatorSprinting); - cfg.flightVerticalSpeedMpCreativeDefault = readVerticalSpeedMultiplier(obj, "Flight.VerticalSpeedMp.Creative.Default", "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalSpeedMpCreativeDefault); - cfg.flightVerticalSpeedMpCreativeSprinting = readVerticalSpeedMultiplier(obj, "Flight.VerticalSpeedMp.Creative.Sprinting", "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalSpeedMpCreativeSprinting); - cfg.flightVerticalSpeedMpSpectatorDefault = readVerticalSpeedMultiplier(obj, "Flight.VerticalSpeedMp.Spectator.Default", "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalSpeedMpSpectatorDefault); - cfg.flightVerticalSpeedMpSpectatorSprinting = readVerticalSpeedMultiplier(obj, "Flight.VerticalSpeedMp.Spectator.Sprinting", "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalSpeedMpSpectatorSprinting); + cfg.flightVerticalSpeedMpCreativeDefault = readVerticalSpeedMultiplier(obj, cfg, "Flight.VerticalSpeedMp.Creative.Default", "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalSpeedMpCreativeDefault); + cfg.flightVerticalSpeedMpCreativeSprinting = readVerticalSpeedMultiplier(obj, cfg, "Flight.VerticalSpeedMp.Creative.Sprinting", "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalSpeedMpCreativeSprinting); + cfg.flightVerticalSpeedMpSpectatorDefault = readVerticalSpeedMultiplier(obj, cfg, "Flight.VerticalSpeedMp.Spectator.Default", "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalSpeedMpSpectatorDefault); + cfg.flightVerticalSpeedMpSpectatorSprinting = readVerticalSpeedMultiplier(obj, cfg, "Flight.VerticalSpeedMp.Spectator.Sprinting", "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalSpeedMpSpectatorSprinting); Json.readKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward); Json.readKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump); @@ -106,11 +106,13 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js return Json.getFloat(obj, key, defaultValue, 0.25F, 8F); } - private static float readVerticalSpeedMultiplier(final JsonObject obj, final String newKey, final String legacyBoostKey, final float defaultValue) { + private static float readVerticalSpeedMultiplier(final JsonObject obj, final BetterControlsConfig cfg, final String newKey, final String legacyBoostKey, final float defaultValue) { if (obj.has(newKey)) { return Json.getFloat(obj, newKey, defaultValue, 0.25F, 8F); } else if (obj.has(legacyBoostKey)) { + cfg.wasMigrated = true; + final float value = 1F + Json.getFloat(obj, legacyBoostKey, 0F, 0F, 3F); // 1.25x, 1.75x, 2.5x, and 3.5x are not supported if (Mth.equal(value, 1.25F) || Mth.equal(value, 1.75F)) { @@ -131,7 +133,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js } } - static void serialize(final Path path, final BetterControlsConfig config) { + static void write(final Path path, final BetterControlsConfig config) { try (final JsonWriter writer = gson.newJsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))) { gson.getAdapter(BetterControlsConfig.class).write(writer, config); } catch (final IOException e) { @@ -139,7 +141,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js } } - static BetterControlsConfig deserialize(final Path path) { + static BetterControlsConfig read(final Path path) { try (final JsonReader jsonReader = new JsonReader(Files.newBufferedReader(path, StandardCharsets.UTF_8))) { return gson.getAdapter(BetterControlsConfig.class).read(jsonReader); } catch (final FileNotFoundException | NoSuchFileException ignored) {