mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-20 07:34:04 +02:00
Add option to prevent FOV changing while flying
This commit is contained in:
parent
90c3379d57
commit
ebd522dca7
src/main
java/chylex/bettercontrols
config
gui
mixin
player
resources
@ -21,6 +21,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 disableChangingFovWhileFlying = false;
|
||||||
public boolean flyOnGroundInCreative = false;
|
public boolean flyOnGroundInCreative = false;
|
||||||
public float flightSpeedMpCreativeDefault = 1F;
|
public float flightSpeedMpCreativeDefault = 1F;
|
||||||
public float flightSpeedMpCreativeSprinting = 2F;
|
public float flightSpeedMpCreativeSprinting = 2F;
|
||||||
|
@ -42,6 +42,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.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);
|
||||||
Json.setFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting);
|
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);
|
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.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 = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault), 0.25F, 8F);
|
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);
|
cfg.flightSpeedMpCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting), 0.25F, 8F);
|
||||||
|
@ -112,6 +112,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
|||||||
|
|
||||||
y += ROW_HEIGHT;
|
y += ROW_HEIGHT;
|
||||||
|
|
||||||
|
generateLeftSideText(y, elements, Text.of("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.of("Fly On Ground (Creative Mode)"));
|
generateLeftSideText(y, elements, Text.of("Fly On Ground (Creative Mode)"));
|
||||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.flyOnGroundInCreative, value -> cfg.flyOnGroundInCreative = value));
|
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.flyOnGroundInCreative, value -> cfg.flyOnGroundInCreative = value));
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
@ -13,6 +13,10 @@ final class FlightHelper{
|
|||||||
return BetterControlsMod.config;
|
return BetterControlsMod.config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isFlyingCreativeOrSpectator(final ClientPlayerEntity player){
|
||||||
|
return player.abilities.flying && (player.isCreative() || player.isSpectator());
|
||||||
|
}
|
||||||
|
|
||||||
static boolean shouldFlyOnGround(final ClientPlayerEntity player){
|
static boolean shouldFlyOnGround(final ClientPlayerEntity player){
|
||||||
return cfg().flyOnGroundInCreative && player.isCreative() && player.abilities.flying;
|
return cfg().flyOnGroundInCreative && player.isCreative() && player.abilities.flying;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import chylex.bettercontrols.input.ToggleTracker;
|
|||||||
import chylex.bettercontrols.input.ToggleTrackerForStickyKey;
|
import chylex.bettercontrols.input.ToggleTrackerForStickyKey;
|
||||||
import chylex.bettercontrols.mixin.AccessCameraFields;
|
import chylex.bettercontrols.mixin.AccessCameraFields;
|
||||||
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
||||||
|
import chylex.bettercontrols.mixin.AccessGameRendererFields;
|
||||||
import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
|
import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.input.KeyboardInput;
|
import net.minecraft.client.input.KeyboardInput;
|
||||||
@ -81,7 +82,7 @@ public final class PlayerTicker{
|
|||||||
|
|
||||||
final SprintMode sprintMode;
|
final SprintMode sprintMode;
|
||||||
|
|
||||||
if (player.abilities.flying && (player.isCreative() || player.isSpectator())){
|
if (FlightHelper.isFlyingCreativeOrSpectator(player)){
|
||||||
sprintMode = cfg().sprintModeWhileFlying;
|
sprintMode = cfg().sprintModeWhileFlying;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -180,6 +181,12 @@ public final class PlayerTicker{
|
|||||||
wasHittingObstacle = player.horizontalCollision;
|
wasHittingObstacle = player.horizontalCollision;
|
||||||
wasSprintingBeforeHittingObstacle = false;
|
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){
|
public void afterSuperCall(final ClientPlayerEntity player){
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"AccessClientPlayerFields",
|
"AccessClientPlayerFields",
|
||||||
"AccessControlsListCategory",
|
"AccessControlsListCategory",
|
||||||
"AccessControlsListKeyBinding",
|
"AccessControlsListKeyBinding",
|
||||||
|
"AccessGameRendererFields",
|
||||||
"AccessKeyBindingFields",
|
"AccessKeyBindingFields",
|
||||||
"AccessScreenButtons",
|
"AccessScreenButtons",
|
||||||
"AccessStickyKeyBindingStateGetter",
|
"AccessStickyKeyBindingStateGetter",
|
||||||
|
Loading…
Reference in New Issue
Block a user