diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java index 0c2a4b2..3bd86f2 100644 --- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java +++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java @@ -20,6 +20,7 @@ public final class BetterControlsConfig{ public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight"); public SprintMode sprintModeWhileFlying = SprintMode.TAP_TO_START; + public boolean disableFlightInertia = false; public boolean disableChangingFovWhileFlying = false; public boolean flyOnGroundInCreative = false; public float flightSpeedMpCreativeDefault = 1F; diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java index 76c9554..7659884 100644 --- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java +++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java @@ -41,6 +41,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight); Json.setEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying); + Json.setBool(obj, "Flight.DisableInertia", cfg.disableFlightInertia); Json.setBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying); Json.setBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative); Json.setFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault); @@ -79,6 +80,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js Json.readKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight); cfg.sprintModeWhileFlying = Json.getEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying, SprintMode.class); + cfg.disableFlightInertia = Json.getBool(obj, "Flight.DisableInertia", cfg.disableFlightInertia); cfg.disableChangingFovWhileFlying = Json.getBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying); cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative); cfg.flightSpeedMpCreativeDefault = Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault, 0.25F, 8F); diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java index bee0a6a..a599fa3 100644 --- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java @@ -127,6 +127,11 @@ public class BetterControlsScreen extends SettingsScreen{ y += ROW_HEIGHT; + generateLeftSideText(y, elements, text("Disable Flight Inertia")); + elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.disableFlightInertia, value -> cfg.disableFlightInertia = value)); + + y += ROW_HEIGHT; + generateLeftSideText(y, elements, text("Disable Field Of View Changing")); elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.disableChangingFovWhileFlying, value -> cfg.disableChangingFovWhileFlying = value)); diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java index 1008605..c0f7cef 100644 --- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java +++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java @@ -153,8 +153,10 @@ public final class PlayerTicker{ } public void afterInputTick(final ClientPlayerEntity player){ + final MovementInput input = player.movementInput; + if (MINECRAFT.currentScreen == null && !player.abilities.isFlying){ - player.movementInput.jump |= toggleJump.tick(); + input.jump |= toggleJump.tick(); } if (FlightHelper.isFlyingCreativeOrSpectator(player)){ @@ -168,11 +170,11 @@ public final class PlayerTicker{ if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getRenderViewEntity()){ int direction = 0; - if (player.movementInput.sneaking){ + if (input.sneaking){ --direction; } - if (player.movementInput.jump){ + if (input.jump){ ++direction; } @@ -180,6 +182,16 @@ public final class PlayerTicker{ player.setMotion(player.getMotion().add(0D, flightSpeed * verticalVelocity * direction, 0D)); } } + + if (cfg().disableFlightInertia){ + if (input.moveForward == 0F && input.moveStrafe == 0F){ + player.setMotion(player.getMotion().mul(0.0, 1.0, 0.0)); + } + + if (!input.jump && !input.sneaking){ + player.setMotion(player.getMotion().mul(1.0, 0.0, 1.0)); + } + } } if (cfg().resumeSprintingAfterHittingObstacle){