1
0
mirror of https://github.com/chylex/Better-Controls.git synced 2025-04-09 15:15:51 +02:00

Add option to prevent FOV changing while flying

This commit is contained in:
chylex 2020-10-26 21:27:41 +01:00
parent 9baa7c4460
commit 116bbe241d
7 changed files with 34 additions and 1 deletions

View File

@ -21,6 +21,7 @@ public final class BetterControlsConfig{
public final KeyBindingWithModifier keyToggleFlight = new KeyBindingWithModifier("key.bettercontrols.toggle_flight");
public SprintMode sprintModeWhileFlying = SprintMode.TAP_TO_START;
public boolean disableChangingFovWhileFlying = false;
public boolean flyOnGroundInCreative = false;
public float flightSpeedMpCreativeDefault = 1F;
public float flightSpeedMpCreativeSprinting = 2F;

View File

@ -42,6 +42,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.writeKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight);
Json.setEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying);
Json.setBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying);
Json.setBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
Json.setFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault);
Json.setFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting);
@ -75,6 +76,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.readKeyBinding(obj, "Flight.KeyToggle.Creative", cfg.keyToggleFlight);
cfg.sprintModeWhileFlying = Json.getEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying, SprintMode.class);
cfg.disableChangingFovWhileFlying = Json.getBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying);
cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
cfg.flightSpeedMpCreativeDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault), 0.25F, 8F);
cfg.flightSpeedMpCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting), 0.25F, 8F);

View File

@ -111,6 +111,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
y += ROW_HEIGHT;
generateLeftSideText(y, elements, text("Disable Field Of View Changing"));
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.disableChangingFovWhileFlying, value -> cfg.disableChangingFovWhileFlying = value));
y += ROW_HEIGHT;
generateLeftSideText(y, elements, text("Fly On Ground (Creative Mode)"));
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.flyOnGroundInCreative, value -> cfg.flyOnGroundInCreative = value));

View File

@ -0,0 +1,13 @@
package chylex.bettercontrols.mixin;
import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(GameRenderer.class)
public interface AccessGameRendererFields{
@Accessor
void setMovementFovMultiplier(float value);
@Accessor
void setLastMovementFovMultiplier(float value);
}

View File

@ -13,6 +13,10 @@ final class FlightHelper{
return BetterControlsMod.config;
}
static boolean isFlyingCreativeOrSpectator(final ClientPlayerEntity player){
return player.abilities.flying && (player.isCreative() || player.isSpectator());
}
static boolean shouldFlyOnGround(final ClientPlayerEntity player){
return cfg().flyOnGroundInCreative && player.isCreative() && player.abilities.flying;
}

View File

@ -7,6 +7,7 @@ import chylex.bettercontrols.input.ToggleTracker;
import chylex.bettercontrols.input.ToggleTrackerForStickyKey;
import chylex.bettercontrols.mixin.AccessCameraFields;
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
import chylex.bettercontrols.mixin.AccessGameRendererFields;
import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.input.KeyboardInput;
@ -81,7 +82,7 @@ public final class PlayerTicker{
final SprintMode sprintMode;
if (player.abilities.flying && (player.isCreative() || player.isSpectator())){
if (FlightHelper.isFlyingCreativeOrSpectator(player)){
sprintMode = cfg().sprintModeWhileFlying;
}
else{
@ -180,6 +181,12 @@ public final class PlayerTicker{
wasHittingObstacle = player.horizontalCollision;
wasSprintingBeforeHittingObstacle = false;
}
if (cfg().disableChangingFovWhileFlying && FlightHelper.isFlyingCreativeOrSpectator(player)){
final AccessGameRendererFields renderer = (AccessGameRendererFields)mc().gameRenderer;
renderer.setMovementFovMultiplier(1F);
renderer.setLastMovementFovMultiplier(1F);
}
}
public void afterSuperCall(final ClientPlayerEntity player){

View File

@ -8,6 +8,7 @@
"AccessClientPlayerFields",
"AccessControlsListCategory",
"AccessControlsListKeyBinding",
"AccessGameRendererFields",
"AccessKeyBindingFields",
"AccessOptionButtonWidgetOption",
"AccessScreenButtons",