mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-06-01 16:34:06 +02:00
Implement toggle keys for walking forward & jumping
This commit is contained in:
parent
87315529f4
commit
b32bebe33d
src/main
java/chylex/bettercontrols
config
gui
mixin
player
resources
@ -21,6 +21,8 @@ public final class BetterControlsConfig{
|
|||||||
public float flightSpeedMpSpectatorDefault = 1F;
|
public float flightSpeedMpSpectatorDefault = 1F;
|
||||||
public float flightSpeedMpSpectatorSprinting = 2F;
|
public float flightSpeedMpSpectatorSprinting = 2F;
|
||||||
|
|
||||||
|
public final KeyBindingWithModifier keyToggleWalkForward = new KeyBindingWithModifier("key.bettercontrols.toggle_forward");
|
||||||
|
public final KeyBindingWithModifier keyToggleJump = new KeyBindingWithModifier("key.bettercontrols.toggle_jump");
|
||||||
public final KeyBindingWithModifier keyOpenMenu = new KeyBindingWithModifier("key.bettercontrols.open_menu");
|
public final KeyBindingWithModifier keyOpenMenu = new KeyBindingWithModifier("key.bettercontrols.open_menu");
|
||||||
|
|
||||||
BetterControlsConfig(){}
|
BetterControlsConfig(){}
|
||||||
@ -32,6 +34,8 @@ public final class BetterControlsConfig{
|
|||||||
|
|
||||||
public KeyBinding[] getAllKeyBindings(){
|
public KeyBinding[] getAllKeyBindings(){
|
||||||
return new KeyBinding[]{
|
return new KeyBinding[]{
|
||||||
|
keyToggleWalkForward,
|
||||||
|
keyToggleJump,
|
||||||
keyOpenMenu
|
keyOpenMenu
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
|||||||
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
|
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
|
||||||
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
Json.setFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
||||||
|
|
||||||
|
Json.writeKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward);
|
||||||
|
Json.writeKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump);
|
||||||
Json.writeKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
Json.writeKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
@ -62,6 +64,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
|||||||
cfg.flightSpeedMpSpectatorDefault = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
|
cfg.flightSpeedMpSpectatorDefault = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
|
||||||
cfg.flightSpeedMpSpectatorSprinting = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
cfg.flightSpeedMpSpectatorSprinting = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
||||||
|
|
||||||
|
Json.readKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward);
|
||||||
|
Json.readKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump);
|
||||||
Json.readKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
Json.readKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
||||||
|
|
||||||
return cfg;
|
return cfg;
|
||||||
|
@ -113,6 +113,14 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
|||||||
private int generateMiscellaneousOptions(int y, final List<Element> elements){
|
private int generateMiscellaneousOptions(int y, final List<Element> elements){
|
||||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||||
|
|
||||||
|
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Walk Forwards"), cfg.keyToggleWalkForward);
|
||||||
|
|
||||||
|
y += ROW_HEIGHT;
|
||||||
|
|
||||||
|
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Jump"), cfg.keyToggleJump);
|
||||||
|
|
||||||
|
y += ROW_HEIGHT * 4 / 3;
|
||||||
|
|
||||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Open Better Controls Menu"), cfg.keyOpenMenu);
|
generateKeyBindingWithModifierOption(y, elements, Text.of("Open Better Controls Menu"), cfg.keyOpenMenu);
|
||||||
|
|
||||||
y += ROW_HEIGHT;
|
y += ROW_HEIGHT;
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package chylex.bettercontrols.mixin;
|
||||||
|
import chylex.bettercontrols.player.PlayerTicker;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.input.KeyboardInput;
|
||||||
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import static org.spongepowered.asm.mixin.injection.At.Shift.AFTER;
|
||||||
|
|
||||||
|
@Mixin(KeyboardInput.class)
|
||||||
|
public abstract class HookClientPlayerInputTick{
|
||||||
|
@Inject(method = "tick(Z)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/input/KeyboardInput;pressingForward:Z", ordinal = 0, shift = AFTER))
|
||||||
|
private void afterInputTick(final CallbackInfo info){
|
||||||
|
final KeyboardInput input = (KeyboardInput)(Object)this;
|
||||||
|
final ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||||
|
|
||||||
|
if (player != null){
|
||||||
|
PlayerTicker.get(player).afterInputAssignsPressingForward(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,9 +2,11 @@ package chylex.bettercontrols.player;
|
|||||||
import chylex.bettercontrols.BetterControlsMod;
|
import chylex.bettercontrols.BetterControlsMod;
|
||||||
import chylex.bettercontrols.config.BetterControlsConfig;
|
import chylex.bettercontrols.config.BetterControlsConfig;
|
||||||
import chylex.bettercontrols.gui.BetterControlsScreen;
|
import chylex.bettercontrols.gui.BetterControlsScreen;
|
||||||
|
import chylex.bettercontrols.input.ToggleTracker;
|
||||||
import chylex.bettercontrols.mixin.AccessCameraFields;
|
import chylex.bettercontrols.mixin.AccessCameraFields;
|
||||||
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.input.KeyboardInput;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
@ -35,6 +37,9 @@ public final class PlayerTicker{
|
|||||||
|
|
||||||
// Logic
|
// Logic
|
||||||
|
|
||||||
|
private final ToggleTracker toggleWalkForward = new ToggleTracker(cfg().keyToggleWalkForward, mc().options.keyForward);
|
||||||
|
private final ToggleTracker toggleJump = new ToggleTracker(cfg().keyToggleJump, mc().options.keyJump);
|
||||||
|
|
||||||
private boolean wasHittingObstacle = false;
|
private boolean wasHittingObstacle = false;
|
||||||
private boolean wasSprintingBeforeHittingObstacle = false;
|
private boolean wasSprintingBeforeHittingObstacle = false;
|
||||||
|
|
||||||
@ -51,7 +56,17 @@ public final class PlayerTicker{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void afterInputAssignsPressingForward(final KeyboardInput input){
|
||||||
|
if (mc().currentScreen == null){
|
||||||
|
input.pressingForward |= toggleWalkForward.tick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void afterInputTick(final ClientPlayerEntity player){
|
public void afterInputTick(final ClientPlayerEntity player){
|
||||||
|
if (mc().currentScreen == null && !player.abilities.flying){
|
||||||
|
player.input.jumping |= toggleJump.tick();
|
||||||
|
}
|
||||||
|
|
||||||
final float flightSpeed = FlightHelper.getFlightSpeed(player);
|
final float flightSpeed = FlightHelper.getFlightSpeed(player);
|
||||||
|
|
||||||
if (flightSpeed > 0F){
|
if (flightSpeed > 0F){
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
"key.categories.bettercontrols": "Better Controls",
|
"key.categories.bettercontrols": "Better Controls",
|
||||||
|
"key.bettercontrols.toggle_forward": "Toggle Walk Forwards",
|
||||||
|
"key.bettercontrols.toggle_jump": "Toggle Jump",
|
||||||
"key.bettercontrols.open_menu": "Open Menu"
|
"key.bettercontrols.open_menu": "Open Menu"
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"AccessClientPlayerFields",
|
"AccessClientPlayerFields",
|
||||||
"AccessKeyBindingFields",
|
"AccessKeyBindingFields",
|
||||||
"AccessScreenButtons",
|
"AccessScreenButtons",
|
||||||
|
"HookClientPlayerInputTick",
|
||||||
"HookClientPlayerTick",
|
"HookClientPlayerTick",
|
||||||
"HookLoadGameOptions",
|
"HookLoadGameOptions",
|
||||||
"HookOpenScreen",
|
"HookOpenScreen",
|
||||||
|
Loading…
Reference in New Issue
Block a user