mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-11 01:34:04 +02:00
Implement option to resume sprinting after hitting an obstacle
This commit is contained in:
parent
bec0bcb597
commit
b76a65fb70
src/main/java/chylex/bettercontrols
@ -10,6 +10,7 @@ public final class BetterControlsConfig{
|
||||
private Path path;
|
||||
|
||||
public boolean doubleTapForwardToSprint = true;
|
||||
public boolean resumeSprintingAfterHittingObstacle = false;
|
||||
|
||||
public boolean sneakingMovesCameraSmoothly = true;
|
||||
|
||||
|
@ -31,6 +31,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
||||
final JsonObject obj = new JsonObject();
|
||||
|
||||
Json.setBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
|
||||
Json.setBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
|
||||
|
||||
Json.setBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
|
||||
|
||||
@ -49,6 +50,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
||||
final JsonObject obj = json.getAsJsonObject();
|
||||
|
||||
cfg.doubleTapForwardToSprint = Json.getBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
|
||||
cfg.resumeSprintingAfterHittingObstacle = Json.getBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
|
||||
|
||||
cfg.sneakingMovesCameraSmoothly = Json.getBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
|
||||
|
||||
|
@ -42,6 +42,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
generateLeftSideText(y, elements, Text.of("Double Tap 'Walk Forwards' To Sprint"));
|
||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.doubleTapForwardToSprint, value -> cfg.doubleTapForwardToSprint = 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));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
return y;
|
||||
}
|
||||
|
@ -34,6 +34,9 @@ public final class PlayerTicker{
|
||||
|
||||
// Logic
|
||||
|
||||
private boolean wasHittingObstacle = false;
|
||||
private boolean wasSprintingBeforeHittingObstacle = false;
|
||||
|
||||
private boolean wasSneakingBeforeTouchingGround = false;
|
||||
private boolean holdingSneakWhileTouchingGround = false;
|
||||
|
||||
@ -53,6 +56,25 @@ public final class PlayerTicker{
|
||||
if (flightSpeed > 0F){
|
||||
player.abilities.setFlySpeed(flightSpeed);
|
||||
}
|
||||
|
||||
if (cfg().resumeSprintingAfterHittingObstacle){
|
||||
if (wasHittingObstacle != player.horizontalCollision){
|
||||
if (!wasHittingObstacle){
|
||||
wasSprintingBeforeHittingObstacle = player.isSprinting() || mc().options.keySprint.isPressed();
|
||||
}
|
||||
else if (wasSprintingBeforeHittingObstacle){
|
||||
wasSprintingBeforeHittingObstacle = false;
|
||||
player.setSprinting(true);
|
||||
}
|
||||
|
||||
// collision also stops when the player lets go of movement keys
|
||||
wasHittingObstacle = player.horizontalCollision;
|
||||
}
|
||||
}
|
||||
else{
|
||||
wasHittingObstacle = player.horizontalCollision;
|
||||
wasSprintingBeforeHittingObstacle = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void afterSuperCall(final ClientPlayerEntity player){
|
||||
|
Loading…
Reference in New Issue
Block a user