Browse Source

Add option to disable double tapping 'Jump' key to flight

Fixes #6
chylex 4 years ago
parent
commit
b23d1ebca5

+ 1 - 0
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;

+ 2 - 0
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);

+ 5 - 0
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));
 		

+ 10 - 0
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);
+}

+ 5 - 0
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();

+ 1 - 0
src/main/resources/bettercontrols.mixins.json

@@ -10,6 +10,7 @@
     "AccessControlsListKeyBinding",
     "AccessGameRendererFields",
     "AccessKeyBindingFields",
+    "AccessPlayerFields",
     "AccessScreenButtons",
     "AccessStickyKeyBindingStateGetter",
     "HookClientPlayerInputTick",