1
0
mirror of https://github.com/chylex/Better-Controls.git synced 2025-05-04 07:34:06 +02:00

Implement option to stop sprinting by pressing 'Sprint' key again

This commit is contained in:
chylex 2020-10-18 10:05:08 +02:00
parent 572e1f16c8
commit d28ece5759
4 changed files with 26 additions and 0 deletions

View File

@ -12,6 +12,7 @@ public final class BetterControlsConfig{
public final KeyBindingWithModifier keyToggleSprint = new KeyBindingWithModifier("key.bettercontrols.toggle_sprint");
public boolean doubleTapForwardToSprint = true;
public boolean tapSprintKeyAgainToStopSprinting = false;
public boolean resumeSprintingAfterHittingObstacle = false;
public final KeyBindingWithModifier keyToggleSneak = new KeyBindingWithModifier("key.bettercontrols.toggle_sneak");

View File

@ -32,6 +32,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.writeKeyBinding(obj, "Sprint.KeyToggle", cfg.keyToggleSprint);
Json.setBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
Json.setBool(obj, "Sprint.TapToStop", cfg.tapSprintKeyAgainToStopSprinting);
Json.setBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
Json.writeKeyBinding(obj, "Sneak.KeyToggle", cfg.keyToggleSneak);
@ -58,6 +59,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.readKeyBinding(obj, "Sprint.KeyToggle", cfg.keyToggleSprint);
cfg.doubleTapForwardToSprint = Json.getBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
cfg.tapSprintKeyAgainToStopSprinting = Json.getBool(obj, "Sprint.TapToStop", cfg.tapSprintKeyAgainToStopSprinting);
cfg.resumeSprintingAfterHittingObstacle = Json.getBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
Json.readKeyBinding(obj, "Sneak.KeyToggle", cfg.keyToggleSneak);

View File

@ -53,6 +53,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
y += ROW_HEIGHT;
generateLeftSideText(y, elements, Text.of("Tap 'Sprint' While Sprinting To Stop"));
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.tapSprintKeyAgainToStopSprinting, value -> cfg.tapSprintKeyAgainToStopSprinting = value));
y += ROW_HEIGHT;
generateLeftSideText(y, elements, Text.of("Resume Sprinting After Hitting Obstacle"));
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.resumeSprintingAfterHittingObstacle, value -> cfg.resumeSprintingAfterHittingObstacle = value));

View File

@ -44,6 +44,7 @@ public final class PlayerTicker{
private final ToggleTracker toggleWalkForward = new ToggleTracker(cfg().keyToggleWalkForward, mc().options.keyForward);
private final ToggleTracker toggleJump = new ToggleTracker(cfg().keyToggleJump, mc().options.keyJump);
private boolean waitingForSprintKeyRelease = false;
private boolean stopSprintingAfterReleasingSprintKey = false;
private boolean wasHittingObstacle = false;
private boolean wasSprintingBeforeHittingObstacle = false;
@ -67,9 +68,26 @@ public final class PlayerTicker{
if (isSprintToggled){
stopSprintingAfterReleasingSprintKey = false;
waitingForSprintKeyRelease = false;
}
else if (wasSprintToggled){
stopSprintingAfterReleasingSprintKey = true;
waitingForSprintKeyRelease = false;
}
else if (cfg().tapSprintKeyAgainToStopSprinting){
if (opts.keySprint.isPressed()){
if (!waitingForSprintKeyRelease){
waitingForSprintKeyRelease = true;
stopSprintingAfterReleasingSprintKey = player.isSprinting();
}
}
else{
if (player.isSprinting() && !waitingForSprintKeyRelease){
stopSprintingAfterReleasingSprintKey = false;
}
waitingForSprintKeyRelease = false;
}
}
if (stopSprintingAfterReleasingSprintKey && !opts.keySprint.isPressed()){