diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java index 3bd86f2..dd58602 100644 --- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java +++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java @@ -19,7 +19,6 @@ public final class BetterControlsConfig{ public boolean sneakingMovesCameraSmoothly = true; public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight"); - public SprintMode sprintModeWhileFlying = SprintMode.TAP_TO_START; 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 7659884..c34cdcd 100644 --- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java +++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java @@ -40,7 +40,6 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js Json.setBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly); Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight); - 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.FlyOnGround.Creative", cfg.flyOnGroundInCreative); @@ -79,7 +78,6 @@ 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.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.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 f55a8f0..ca82ee0 100644 --- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java @@ -121,11 +121,6 @@ public class BetterControlsScreen extends SettingsScreen{ y += ROW_HEIGHT; - generateLeftSideText(y, elements, text("Sprint Key Mode While Flying")); - elements.add(new CycleButtonWidget<>(col2(1), y, COL2_W, SPRINT_MODE_OPTIONS, cfg.sprintModeWhileFlying, value -> cfg.sprintModeWhileFlying = 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/HookPlayerFlightSpeed.java b/src/main/java/chylex/bettercontrols/mixin/HookPlayerFlightSpeed.java new file mode 100644 index 0000000..2ebd03a --- /dev/null +++ b/src/main/java/chylex/bettercontrols/mixin/HookPlayerFlightSpeed.java @@ -0,0 +1,25 @@ +package chylex.bettercontrols.mixin; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; + +@Mixin(PlayerEntity.class) +public abstract class HookPlayerFlightSpeed extends LivingEntity{ + protected HookPlayerFlightSpeed(final EntityType<? extends LivingEntity> type, final World world){ + super(type, world); + } + + @Redirect( + method = "travel", + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isSprinting()Z"), + slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerAbilities;getFlySpeed()F")) + ) + private boolean disableVanillaSprintBoost(final PlayerEntity player){ + return false; + } +} diff --git a/src/main/java/chylex/bettercontrols/player/FlightHelper.java b/src/main/java/chylex/bettercontrols/player/FlightHelper.java index 83acc75..d896705 100644 --- a/src/main/java/chylex/bettercontrols/player/FlightHelper.java +++ b/src/main/java/chylex/bettercontrols/player/FlightHelper.java @@ -7,7 +7,6 @@ final class FlightHelper{ private FlightHelper(){} private static final float BASE_FLIGHT_SPEED = 0.05F; - private static final float BASE_FLIGHT_SPEED_SPRINT_MP_INV = 0.5F; // sprinting doubles speed in PlayerEntity.travel private static final float BASE_VERTICAL_VELOCITY = 3F; private static BetterControlsConfig cfg(){ @@ -22,18 +21,18 @@ final class FlightHelper{ return cfg().flyOnGroundInCreative && player.isCreative() && player.abilities.isFlying; } - static float getFlightSpeed(final ClientPlayerEntity player){ + static float getFlightSpeed(final ClientPlayerEntity player, final boolean boost){ if (player.isCreative()){ - if (player.isSprinting()){ - return BASE_FLIGHT_SPEED * cfg().flightSpeedMpCreativeSprinting * BASE_FLIGHT_SPEED_SPRINT_MP_INV; + if (boost){ + return BASE_FLIGHT_SPEED * cfg().flightSpeedMpCreativeSprinting; } else{ return BASE_FLIGHT_SPEED * cfg().flightSpeedMpCreativeDefault; } } else if (player.isSpectator()){ - if (player.isSprinting()){ - return BASE_FLIGHT_SPEED * cfg().flightSpeedMpSpectatorSprinting * BASE_FLIGHT_SPEED_SPRINT_MP_INV; + if (boost){ + return BASE_FLIGHT_SPEED * cfg().flightSpeedMpSpectatorSprinting; } else{ return BASE_FLIGHT_SPEED * cfg().flightSpeedMpSpectatorDefault; @@ -44,9 +43,9 @@ final class FlightHelper{ } } - static float getExtraVerticalVelocity(final ClientPlayerEntity player){ + static float getExtraVerticalVelocity(final ClientPlayerEntity player, final boolean isSprinting){ if (player.isCreative()){ - if (player.isSprinting()){ + if (isSprinting){ return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostCreativeSprinting; } else{ @@ -54,7 +53,7 @@ final class FlightHelper{ } } else if (player.isSpectator()){ - if (player.isSprinting()){ + if (isSprinting){ return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostSpectatorSprinting; } else{ diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java index c322ea8..322ddcf 100644 --- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java +++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java @@ -81,15 +81,7 @@ public final class PlayerTicker{ ((AccessClientPlayerFields)player).setTicksLeftToDoubleTapSprint(0); } - final SprintMode sprintMode; - - if (FlightHelper.isFlyingCreativeOrSpectator(player)){ - sprintMode = cfg().sprintModeWhileFlying; - } - else{ - sprintMode = cfg().sprintMode; - } - + final SprintMode sprintMode = cfg().sprintMode; final boolean wasSprintToggled = OPTIONS.toggleSprint; final boolean isSprintToggled = toggleSprint.tick(); @@ -160,8 +152,9 @@ public final class PlayerTicker{ } if (FlightHelper.isFlyingCreativeOrSpectator(player)){ - final float flightSpeed = FlightHelper.getFlightSpeed(player); - final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player); + final boolean boost = Key.isPressed(KEY_SPRINT); + final float flightSpeed = FlightHelper.getFlightSpeed(player, boost); + final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player, boost); if (flightSpeed > 0F){ player.abilities.setFlySpeed(flightSpeed); diff --git a/src/main/resources/bettercontrols.mixins.json b/src/main/resources/bettercontrols.mixins.json index b407e51..e0160b4 100644 --- a/src/main/resources/bettercontrols.mixins.json +++ b/src/main/resources/bettercontrols.mixins.json @@ -18,6 +18,7 @@ "HookControlsListWidget", "HookLoadGameOptions", "HookOpenScreen", + "HookPlayerFlightSpeed", "HookStickyKeyBindingState" ], "injectors": {