diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java index dd58602..ac72621 100644 --- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java +++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java @@ -19,6 +19,7 @@ public final class BetterControlsConfig{ public boolean sneakingMovesCameraSmoothly = true; public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight"); + public boolean doubleTapJumpToToggleFlight = true; public boolean disableFlightInertia = false; public boolean disableChangingFovWhileFlying = false; public boolean flyOnGroundInCreative = false; diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java index c34cdcd..6ed3033 100644 --- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java +++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java @@ -40,6 +40,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js Json.setBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly); Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight); + Json.setBool(obj, "Flight.DoubleTapJump", cfg.doubleTapJumpToToggleFlight); Json.setBool(obj, "Flight.DisableInertia", cfg.disableFlightInertia); Json.setBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying); Json.setBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative); @@ -78,6 +79,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js cfg.sneakingMovesCameraSmoothly = Json.getBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly); Json.readKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight); + cfg.doubleTapJumpToToggleFlight = Json.getBool(obj, "Flight.DoubleTapJump", cfg.doubleTapJumpToToggleFlight); 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); diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java index 8653c40..55cbf17 100644 --- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java @@ -121,6 +121,11 @@ public class BetterControlsScreen extends GameOptionsScreen{ y += ROW_HEIGHT; + generateLeftSideText(y, elements, text("Double Tap 'Jump' To Fly (Creative)")); + elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.doubleTapJumpToToggleFlight, value -> cfg.doubleTapJumpToToggleFlight = value)); + + 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)); diff --git a/src/main/java/chylex/bettercontrols/mixin/AccessPlayerFields.java b/src/main/java/chylex/bettercontrols/mixin/AccessPlayerFields.java new file mode 100644 index 0000000..10baf34 --- /dev/null +++ b/src/main/java/chylex/bettercontrols/mixin/AccessPlayerFields.java @@ -0,0 +1,10 @@ +package chylex.bettercontrols.mixin; +import net.minecraft.entity.player.PlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(PlayerEntity.class) +public interface AccessPlayerFields{ + @Accessor("abilityResyncCountdown") + void setTicksLeftToDoubleTapFlight(int value); +} diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java index 9c4f3de..0fe87b7 100644 --- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java +++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java @@ -8,6 +8,7 @@ import chylex.bettercontrols.input.ToggleTrackerForStickyKey; import chylex.bettercontrols.mixin.AccessCameraFields; import chylex.bettercontrols.mixin.AccessClientPlayerFields; import chylex.bettercontrols.mixin.AccessGameRendererFields; +import chylex.bettercontrols.mixin.AccessPlayerFields; import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter; import chylex.bettercontrols.util.Key; import net.minecraft.client.input.Input; @@ -82,6 +83,10 @@ public final class PlayerTicker{ ((AccessClientPlayerFields)player).setTicksLeftToDoubleTapSprint(0); } + if (!cfg().doubleTapJumpToToggleFlight){ + ((AccessPlayerFields)player).setTicksLeftToDoubleTapFlight(0); + } + final SprintMode sprintMode = cfg().sprintMode; final boolean wasSprintToggled = OPTIONS.sprintToggled; final boolean isSprintToggled = toggleSprint.tick(); diff --git a/src/main/resources/bettercontrols.mixins.json b/src/main/resources/bettercontrols.mixins.json index e37e753..d08aef1 100644 --- a/src/main/resources/bettercontrols.mixins.json +++ b/src/main/resources/bettercontrols.mixins.json @@ -10,6 +10,7 @@ "AccessControlsListKeyBinding", "AccessGameRendererFields", "AccessKeyBindingFields", + "AccessPlayerFields", "AccessScreenButtons", "AccessStickyKeyBindingStateGetter", "HookClientPlayerInputTick",