mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-25 22:34:04 +02:00
Add option to disable flight inertia after releasing movement keys
Fixes #2
This commit is contained in:
parent
dae0eb4b25
commit
b1fd62dd91
src/main/java/chylex/bettercontrols
@ -20,6 +20,7 @@ public final class BetterControlsConfig{
|
|||||||
|
|
||||||
public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight");
|
public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight");
|
||||||
public SprintMode sprintModeWhileFlying = SprintMode.TAP_TO_START;
|
public SprintMode sprintModeWhileFlying = SprintMode.TAP_TO_START;
|
||||||
|
public boolean disableFlightInertia = false;
|
||||||
public boolean disableChangingFovWhileFlying = false;
|
public boolean disableChangingFovWhileFlying = false;
|
||||||
public boolean flyOnGroundInCreative = false;
|
public boolean flyOnGroundInCreative = false;
|
||||||
public float flightSpeedMpCreativeDefault = 1F;
|
public float flightSpeedMpCreativeDefault = 1F;
|
||||||
|
@ -41,6 +41,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
|||||||
|
|
||||||
Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight);
|
Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight);
|
||||||
Json.setEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying);
|
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.DisableChangingFOV", cfg.disableChangingFovWhileFlying);
|
||||||
Json.setBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
|
Json.setBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
|
||||||
Json.setFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault);
|
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);
|
Json.readKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight);
|
||||||
cfg.sprintModeWhileFlying = Json.getEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying, SprintMode.class);
|
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.disableChangingFovWhileFlying = Json.getBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying);
|
||||||
cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
|
cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
|
||||||
cfg.flightSpeedMpCreativeDefault = Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault, 0.25F, 8F);
|
cfg.flightSpeedMpCreativeDefault = Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault, 0.25F, 8F);
|
||||||
|
@ -126,6 +126,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
|||||||
|
|
||||||
y += ROW_HEIGHT;
|
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"));
|
generateLeftSideText(y, elements, text("Disable Field Of View Changing"));
|
||||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.disableChangingFovWhileFlying, value -> cfg.disableChangingFovWhileFlying = value));
|
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.disableChangingFovWhileFlying, value -> cfg.disableChangingFovWhileFlying = value));
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
|||||||
import chylex.bettercontrols.mixin.AccessGameRendererFields;
|
import chylex.bettercontrols.mixin.AccessGameRendererFields;
|
||||||
import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
|
import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
|
||||||
import chylex.bettercontrols.util.Key;
|
import chylex.bettercontrols.util.Key;
|
||||||
|
import net.minecraft.client.input.Input;
|
||||||
import net.minecraft.client.input.KeyboardInput;
|
import net.minecraft.client.input.KeyboardInput;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
@ -153,8 +154,10 @@ public final class PlayerTicker{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void afterInputTick(final ClientPlayerEntity player){
|
public void afterInputTick(final ClientPlayerEntity player){
|
||||||
|
final Input input = player.input;
|
||||||
|
|
||||||
if (MINECRAFT.currentScreen == null && !player.abilities.flying){
|
if (MINECRAFT.currentScreen == null && !player.abilities.flying){
|
||||||
player.input.jumping |= toggleJump.tick();
|
input.jumping |= toggleJump.tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FlightHelper.isFlyingCreativeOrSpectator(player)){
|
if (FlightHelper.isFlyingCreativeOrSpectator(player)){
|
||||||
@ -168,11 +171,11 @@ public final class PlayerTicker{
|
|||||||
if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getCameraEntity()){
|
if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getCameraEntity()){
|
||||||
int direction = 0;
|
int direction = 0;
|
||||||
|
|
||||||
if (player.input.sneaking){
|
if (input.sneaking){
|
||||||
--direction;
|
--direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.input.jumping){
|
if (input.jumping){
|
||||||
++direction;
|
++direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,6 +183,16 @@ public final class PlayerTicker{
|
|||||||
player.setVelocity(player.getVelocity().add(0D, flightSpeed * verticalVelocity * direction, 0D));
|
player.setVelocity(player.getVelocity().add(0D, flightSpeed * verticalVelocity * direction, 0D));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cfg().disableFlightInertia){
|
||||||
|
if (input.movementForward == 0F && input.movementSideways == 0F){
|
||||||
|
player.setVelocity(player.getVelocity().multiply(0.0, 1.0, 0.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!input.jumping && !input.sneaking){
|
||||||
|
player.setVelocity(player.getVelocity().multiply(1.0, 0.0, 1.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg().resumeSprintingAfterHittingObstacle){
|
if (cfg().resumeSprintingAfterHittingObstacle){
|
||||||
|
Loading…
Reference in New Issue
Block a user