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

Add options for vertical flight speed boost in creative/spectator and default/sprinting modes

This commit is contained in:
chylex 2020-10-27 01:39:01 +01:00
parent fa82145530
commit b511727be9
5 changed files with 89 additions and 12 deletions

View File

@ -27,6 +27,10 @@ public final class BetterControlsConfig{
public float flightSpeedMpCreativeSprinting = 2F;
public float flightSpeedMpSpectatorDefault = 1F;
public float flightSpeedMpSpectatorSprinting = 2F;
public float flightVerticalBoostCreativeDefault = 0F;
public float flightVerticalBoostCreativeSprinting = 0F;
public float flightVerticalBoostSpectatorDefault = 0F;
public float flightVerticalBoostSpectatorSprinting = 0F;
public final KeyBindingWithModifier keyToggleWalkForward = new KeyBindingWithModifier("key.bettercontrols.toggle_forward");
public final KeyBindingWithModifier keyToggleJump = new KeyBindingWithModifier("key.bettercontrols.toggle_jump");

View File

@ -48,6 +48,10 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
Json.setFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting);
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
Json.setFloat(obj, "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalBoostCreativeDefault);
Json.setFloat(obj, "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalBoostCreativeSprinting);
Json.setFloat(obj, "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalBoostSpectatorDefault);
Json.setFloat(obj, "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalBoostSpectatorSprinting);
Json.writeKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward);
Json.writeKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump);
@ -82,6 +86,10 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
cfg.flightSpeedMpCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting), 0.25F, 8F);
cfg.flightSpeedMpSpectatorDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault), 0.25F, 8F);
cfg.flightSpeedMpSpectatorSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting), 0.25F, 8F);
cfg.flightVerticalBoostCreativeDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalBoostCreativeDefault), 0F, 3F);
cfg.flightVerticalBoostCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalBoostCreativeSprinting), 0F, 3F);
cfg.flightVerticalBoostSpectatorDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalBoostSpectatorDefault), 0F, 3F);
cfg.flightVerticalBoostSpectatorSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalBoostSpectatorSprinting), 0F, 3F);
Json.readKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward);
Json.readKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump);

View File

@ -105,6 +105,18 @@ public class BetterControlsScreen extends GameOptionsScreen{
new Option<>(Float.valueOf(8.00F), Text.of("8x"))
);
final List<Option<Float>> flightVerticalBoostOptions = Arrays.asList(
new Option<>(Float.valueOf(0.00F), Text.of("None")),
new Option<>(Float.valueOf(0.25F), Text.of("+25%")),
new Option<>(Float.valueOf(0.50F), Text.of("+50%")),
new Option<>(Float.valueOf(0.75F), Text.of("+75%")),
new Option<>(Float.valueOf(1.00F), Text.of("+100%")),
new Option<>(Float.valueOf(1.50F), Text.of("+150%")),
new Option<>(Float.valueOf(2.00F), Text.of("+200%")),
new Option<>(Float.valueOf(2.50F), Text.of("+250%")),
new Option<>(Float.valueOf(3.00F), Text.of("+300%"))
);
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Flight (Creative)"), cfg.keyToggleFlight);
y += ROW_HEIGHT;
@ -124,23 +136,32 @@ public class BetterControlsScreen extends GameOptionsScreen{
y += ROW_HEIGHT * 4 / 3;
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Creative)"));
elements.add(new DiscreteValueSliderWidget<>(col2(1), y, COL2_W, flightSpeedOptions, cfg.flightSpeedMpCreativeDefault, value -> cfg.flightSpeedMpCreativeDefault = value));
elements.add(new TextWidget(col4(2), y, COL4_W - TEXT_PADDING_RIGHT, Text.of("Creative"), CENTER));
elements.add(new TextWidget(col4(3), y, COL4_W - TEXT_PADDING_RIGHT, Text.of("Spectator"), CENTER));
y += ROW_HEIGHT * 7 / 8;
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Default)"));
elements.add(new DiscreteValueSliderWidget<>(col4(2), y, COL4_W, flightSpeedOptions, cfg.flightSpeedMpCreativeDefault, value -> cfg.flightSpeedMpCreativeDefault = value));
elements.add(new DiscreteValueSliderWidget<>(col4(3), y, COL4_W, flightSpeedOptions, cfg.flightSpeedMpSpectatorDefault, value -> cfg.flightSpeedMpSpectatorDefault = value));
y += ROW_HEIGHT;
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Creative + Sprinting)"));
elements.add(new DiscreteValueSliderWidget<>(col2(1), y, COL2_W, flightSpeedOptions, cfg.flightSpeedMpCreativeSprinting, value -> cfg.flightSpeedMpCreativeSprinting = value));
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Sprinting)"));
elements.add(new DiscreteValueSliderWidget<>(col4(2), y, COL4_W, flightSpeedOptions, cfg.flightSpeedMpCreativeSprinting, value -> cfg.flightSpeedMpCreativeSprinting = value));
elements.add(new DiscreteValueSliderWidget<>(col4(3), y, COL4_W, flightSpeedOptions, cfg.flightSpeedMpSpectatorSprinting, value -> cfg.flightSpeedMpSpectatorSprinting = value));
y += ROW_HEIGHT;
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Spectator)"));
elements.add(new DiscreteValueSliderWidget<>(col2(1), y, COL2_W, flightSpeedOptions, cfg.flightSpeedMpSpectatorDefault, value -> cfg.flightSpeedMpSpectatorDefault = value));
generateLeftSideText(y, elements, Text.of("Vertical Speed Boost (Default)"));
elements.add(new DiscreteValueSliderWidget<>(col4(2), y, COL4_W, flightVerticalBoostOptions, cfg.flightVerticalBoostCreativeDefault, value -> cfg.flightVerticalBoostCreativeDefault = value));
elements.add(new DiscreteValueSliderWidget<>(col4(3), y, COL4_W, flightVerticalBoostOptions, cfg.flightVerticalBoostSpectatorDefault, value -> cfg.flightVerticalBoostSpectatorDefault = value));
y += ROW_HEIGHT;
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Spectator + Sprinting)"));
elements.add(new DiscreteValueSliderWidget<>(col2(1), y, COL2_W, flightSpeedOptions, cfg.flightSpeedMpSpectatorSprinting, value -> cfg.flightSpeedMpSpectatorSprinting = value));
generateLeftSideText(y, elements, Text.of("Vertical Speed Boost (Sprinting)"));
elements.add(new DiscreteValueSliderWidget<>(col4(2), y, COL4_W, flightVerticalBoostOptions, cfg.flightVerticalBoostCreativeSprinting, value -> cfg.flightVerticalBoostCreativeSprinting = value));
elements.add(new DiscreteValueSliderWidget<>(col4(3), y, COL4_W, flightVerticalBoostOptions, cfg.flightVerticalBoostSpectatorSprinting, value -> cfg.flightVerticalBoostSpectatorSprinting = value));
y += ROW_HEIGHT;
return y;

View File

@ -8,6 +8,7 @@ final class 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(){
return BetterControlsMod.config;
@ -42,4 +43,26 @@ final class FlightHelper{
return 0F;
}
}
static float getExtraVerticalVelocity(final ClientPlayerEntity player){
if (player.isCreative()){
if (player.isSprinting()){
return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostCreativeSprinting;
}
else{
return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostCreativeDefault;
}
}
else if (player.isSpectator()){
if (player.isSprinting()){
return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostSpectatorSprinting;
}
else{
return BASE_VERTICAL_VELOCITY * cfg().flightVerticalBoostSpectatorDefault;
}
}
else{
return 0F;
}
}
}

View File

@ -13,6 +13,7 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.client.input.KeyboardInput;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.options.GameOptions;
import net.minecraft.util.math.MathHelper;
import java.lang.ref.WeakReference;
import java.util.function.BooleanSupplier;
@ -157,10 +158,30 @@ public final class PlayerTicker{
player.input.jumping |= toggleJump.tick();
}
final float flightSpeed = FlightHelper.getFlightSpeed(player);
if (flightSpeed > 0F){
player.abilities.setFlySpeed(flightSpeed);
if (FlightHelper.isFlyingCreativeOrSpectator(player)){
final float flightSpeed = FlightHelper.getFlightSpeed(player);
if (flightSpeed > 0F){
player.abilities.setFlySpeed(flightSpeed);
}
final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player);
if (!MathHelper.approximatelyEquals(verticalVelocity, 0F) && player == mc().getCameraEntity()){
int direction = 0;
if (player.input.sneaking){
--direction;
}
if (player.input.jumping){
++direction;
}
if (direction != 0){
player.setVelocity(player.getVelocity().add(0D, flightSpeed * verticalVelocity * direction, 0D));
}
}
}
if (cfg().resumeSprintingAfterHittingObstacle){