1
0
mirror of https://github.com/chylex/Better-Controls.git synced 2025-05-08 19:34:04 +02:00

Implement option to disable smooth camera when sneaking

This commit is contained in:
chylex 2020-10-17 15:57:59 +02:00
parent d7151afd0e
commit bec0bcb597
6 changed files with 43 additions and 0 deletions

View File

@ -11,6 +11,8 @@ public final class BetterControlsConfig{
public boolean doubleTapForwardToSprint = true;
public boolean sneakingMovesCameraSmoothly = true;
public boolean flyOnGroundInCreative = false;
public float flightSpeedMpCreativeDefault = 1F;
public float flightSpeedMpCreativeSprinting = 2F;

View File

@ -32,6 +32,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.setBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
Json.setBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
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);
@ -48,6 +50,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
cfg.doubleTapForwardToSprint = Json.getBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
cfg.sneakingMovesCameraSmoothly = Json.getBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
cfg.flightSpeedMpCreativeDefault = Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault);
cfg.flightSpeedMpCreativeSprinting = Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting);

View File

@ -46,6 +46,16 @@ public class BetterControlsScreen extends GameOptionsScreen{
return y;
}
private int generateSneakingOptions(int y, final List<Element> elements){
final BetterControlsConfig cfg = BetterControlsMod.config;
generateLeftSideText(y, elements, Text.of("Move Camera Smoothly"));
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.sneakingMovesCameraSmoothly, value -> cfg.sneakingMovesCameraSmoothly = value));
y += ROW_HEIGHT;
return y;
}
@SuppressWarnings({ "AutoBoxing", "AutoUnboxing" })
private int generateFlightOptions(int y, final List<Element> elements){
final BetterControlsConfig cfg = BetterControlsMod.config;
@ -116,6 +126,9 @@ public class BetterControlsScreen extends GameOptionsScreen{
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Sprinting"), CENTER));
y = generateSprintingOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Sneaking"), CENTER));
y = generateSneakingOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Flying"), CENTER));
y = generateFlightOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;

View File

@ -0,0 +1,14 @@
package chylex.bettercontrols.mixin;
import net.minecraft.client.render.Camera;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Camera.class)
public interface AccessCameraFields{
@Accessor
Entity getFocusedEntity();
@Accessor
void setCameraY(float y);
}

View File

@ -1,6 +1,7 @@
package chylex.bettercontrols.player;
import chylex.bettercontrols.BetterControlsMod;
import chylex.bettercontrols.config.BetterControlsConfig;
import chylex.bettercontrols.mixin.AccessCameraFields;
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
@ -92,5 +93,13 @@ public final class PlayerTicker{
wasSneakingBeforeTouchingGround = false;
holdingSneakWhileTouchingGround = false;
}
if (!cfg().sneakingMovesCameraSmoothly){
final AccessCameraFields camera = (AccessCameraFields)mc().gameRenderer.getCamera();
if (camera.getFocusedEntity() == player){
camera.setCameraY(player.getStandingEyeHeight());
}
}
}
}

View File

@ -4,6 +4,7 @@
"package": "chylex.bettercontrols.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
"AccessCameraFields",
"AccessClientPlayerFields",
"AccessKeyBindingFields",
"AccessScreenButtons",