mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-04-09 15:15:51 +02:00
Refactor code to make porting easier
This commit is contained in:
parent
2b1a032295
commit
0c2eb63a24
src/main/java/chylex/bettercontrols
config
gui
input
mixin
player
util
@ -1,7 +1,6 @@
|
||||
package chylex.bettercontrols.config;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import chylex.bettercontrols.input.SprintMode;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public final class BetterControlsConfig{
|
||||
@ -44,8 +43,8 @@ public final class BetterControlsConfig{
|
||||
return this;
|
||||
}
|
||||
|
||||
public KeyBinding[] getAllKeyBindings(){
|
||||
return new KeyBinding[]{
|
||||
public KeyBindingWithModifier[] getAllKeyBindings(){
|
||||
return new KeyBindingWithModifier[]{
|
||||
keyToggleSprint,
|
||||
keyToggleSneak,
|
||||
keyToggleFlight,
|
||||
|
@ -1,20 +1,12 @@
|
||||
package chylex.bettercontrols.config;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import chylex.bettercontrols.input.ModifierKey;
|
||||
import chylex.bettercontrols.util.Key;
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
|
||||
final class Json{
|
||||
private Json(){}
|
||||
|
||||
static void setInt(final JsonObject obj, final String key, final int value){
|
||||
obj.addProperty(key, Integer.valueOf(value));
|
||||
}
|
||||
|
||||
static int getInt(final JsonObject obj, final String key, final int defaultValue){
|
||||
return obj.has(key) ? obj.get(key).getAsInt() : defaultValue;
|
||||
}
|
||||
|
||||
static void setFloat(final JsonObject obj, final String key, final float value){
|
||||
obj.addProperty(key, Float.valueOf(value));
|
||||
}
|
||||
@ -59,7 +51,7 @@ final class Json{
|
||||
private static final String MOD_SUFFIX = ".Mod";
|
||||
|
||||
static void writeKeyBinding(final JsonObject obj, final String key, final KeyBindingWithModifier keyBinding){
|
||||
obj.addProperty(key + KEY_SUFFIX, keyBinding.getBoundKeyTranslationKey());
|
||||
obj.addProperty(key + KEY_SUFFIX, Key.writeBinding(keyBinding));
|
||||
|
||||
if (keyBinding.getModifier() != null){
|
||||
obj.addProperty(key + MOD_SUFFIX, Integer.valueOf(keyBinding.getModifier().id));
|
||||
@ -68,7 +60,7 @@ final class Json{
|
||||
|
||||
static void readKeyBinding(final JsonObject obj, final String key, final KeyBindingWithModifier keyBinding){
|
||||
if (obj.has(key + KEY_SUFFIX)){
|
||||
keyBinding.setBoundKey(InputUtil.fromTranslationKey(obj.get(key + KEY_SUFFIX).getAsString()));
|
||||
Key.readBinding(keyBinding, obj.get(key + KEY_SUFFIX).getAsString());
|
||||
}
|
||||
|
||||
if (obj.has(key + MOD_SUFFIX)){
|
||||
|
@ -10,7 +10,7 @@ import chylex.bettercontrols.gui.elements.TextWidget;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import chylex.bettercontrols.input.ModifierKey;
|
||||
import chylex.bettercontrols.input.SprintMode;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import chylex.bettercontrols.util.LiteralText;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.ScreenTexts;
|
||||
@ -19,8 +19,6 @@ import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.Text;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -31,9 +29,11 @@ import static chylex.bettercontrols.gui.OptionListWidget.ROW_WIDTH;
|
||||
import static chylex.bettercontrols.gui.OptionListWidget.col2;
|
||||
import static chylex.bettercontrols.gui.OptionListWidget.col4;
|
||||
import static chylex.bettercontrols.gui.elements.TextWidget.CENTER;
|
||||
import static chylex.bettercontrols.util.LiteralText.text;
|
||||
import static chylex.bettercontrols.util.Statics.OPTIONS;
|
||||
|
||||
public class BetterControlsScreen extends GameOptionsScreen{
|
||||
public static final LiteralText TITLE = new LiteralText("Better Controls");
|
||||
public static final LiteralText TITLE = text("Better Controls");
|
||||
|
||||
private static final int BOTTOM_PADDING = 3;
|
||||
private static final int TEXT_PADDING_RIGHT = 4;
|
||||
@ -41,9 +41,9 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
private static final int ROW_HEIGHT = 22;
|
||||
|
||||
private final List<Option<SprintMode>> SPRINT_MODE_OPTIONS = Arrays.asList(
|
||||
new Option<>(SprintMode.TAP_TO_START, Text.of("Tap To Start Sprinting")),
|
||||
new Option<>(SprintMode.TAP_TO_TOGGLE, Text.of("Tap To Start / Stop Sprinting")),
|
||||
new Option<>(SprintMode.HOLD, Text.of("Hold To Sprint"))
|
||||
new Option<>(SprintMode.TAP_TO_START, text("Tap To Start Sprinting")),
|
||||
new Option<>(SprintMode.TAP_TO_TOGGLE, text("Tap To Start / Stop Sprinting")),
|
||||
new Option<>(SprintMode.HOLD, text("Hold To Sprint"))
|
||||
);
|
||||
|
||||
// Options
|
||||
@ -51,21 +51,21 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
private int generateSprintingOptions(int y, final List<Element> elements){
|
||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Sprint"), cfg.keyToggleSprint);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Toggle Sprint"), cfg.keyToggleSprint);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Sprint Key Mode"));
|
||||
generateLeftSideText(y, elements, text("Sprint Key Mode"));
|
||||
elements.add(new CycleButtonWidget<>(col2(1), y, COL2_W, SPRINT_MODE_OPTIONS, cfg.sprintMode, value -> cfg.sprintMode = value));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Double Tap 'Walk Forwards' To Sprint"));
|
||||
generateLeftSideText(y, elements, text("Double Tap 'Walk Forwards' To Sprint"));
|
||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.doubleTapForwardToSprint, value -> cfg.doubleTapForwardToSprint = value));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Resume Sprinting After Hitting Obstacle"));
|
||||
generateLeftSideText(y, elements, text("Resume Sprinting After Hitting Obstacle"));
|
||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.resumeSprintingAfterHittingObstacle, value -> cfg.resumeSprintingAfterHittingObstacle = value));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
@ -75,11 +75,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
private int generateSneakingOptions(int y, final List<Element> elements){
|
||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Sneak"), cfg.keyToggleSneak);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Toggle Sneak"), cfg.keyToggleSneak);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Move Camera Smoothly"));
|
||||
generateLeftSideText(y, elements, text("Move Camera Smoothly"));
|
||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.sneakingMovesCameraSmoothly, value -> cfg.sneakingMovesCameraSmoothly = value));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
@ -91,75 +91,75 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||
|
||||
final List<Option<Float>> flightSpeedOptions = Arrays.asList(
|
||||
new Option<>(Float.valueOf(0.25F), Text.of("0.25x")),
|
||||
new Option<>(Float.valueOf(0.50F), Text.of("0.5x")),
|
||||
new Option<>(Float.valueOf(0.75F), Text.of("0.75x")),
|
||||
new Option<>(Float.valueOf(1.00F), Text.of("1x")),
|
||||
new Option<>(Float.valueOf(1.50F), Text.of("1.5x")),
|
||||
new Option<>(Float.valueOf(2.00F), Text.of("2x")),
|
||||
new Option<>(Float.valueOf(3.00F), Text.of("3x")),
|
||||
new Option<>(Float.valueOf(4.00F), Text.of("4x")),
|
||||
new Option<>(Float.valueOf(5.00F), Text.of("5x")),
|
||||
new Option<>(Float.valueOf(6.00F), Text.of("6x")),
|
||||
new Option<>(Float.valueOf(7.00F), Text.of("7x")),
|
||||
new Option<>(Float.valueOf(8.00F), Text.of("8x"))
|
||||
new Option<>(Float.valueOf(0.25F), text("0.25x")),
|
||||
new Option<>(Float.valueOf(0.50F), text("0.5x")),
|
||||
new Option<>(Float.valueOf(0.75F), text("0.75x")),
|
||||
new Option<>(Float.valueOf(1.00F), text("1x")),
|
||||
new Option<>(Float.valueOf(1.50F), text("1.5x")),
|
||||
new Option<>(Float.valueOf(2.00F), text("2x")),
|
||||
new Option<>(Float.valueOf(3.00F), text("3x")),
|
||||
new Option<>(Float.valueOf(4.00F), text("4x")),
|
||||
new Option<>(Float.valueOf(5.00F), text("5x")),
|
||||
new Option<>(Float.valueOf(6.00F), text("6x")),
|
||||
new Option<>(Float.valueOf(7.00F), text("7x")),
|
||||
new Option<>(Float.valueOf(8.00F), text("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%"))
|
||||
new Option<>(Float.valueOf(0.00F), text("None")),
|
||||
new Option<>(Float.valueOf(0.25F), text("+25%")),
|
||||
new Option<>(Float.valueOf(0.50F), text("+50%")),
|
||||
new Option<>(Float.valueOf(0.75F), text("+75%")),
|
||||
new Option<>(Float.valueOf(1.00F), text("+100%")),
|
||||
new Option<>(Float.valueOf(1.50F), text("+150%")),
|
||||
new Option<>(Float.valueOf(2.00F), text("+200%")),
|
||||
new Option<>(Float.valueOf(2.50F), text("+250%")),
|
||||
new Option<>(Float.valueOf(3.00F), text("+300%"))
|
||||
);
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Flight (Creative)"), cfg.keyToggleFlight);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Toggle Flight (Creative)"), cfg.keyToggleFlight);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Sprint Key Mode While Flying"));
|
||||
generateLeftSideText(y, elements, text("Sprint Key Mode While Flying"));
|
||||
elements.add(new CycleButtonWidget<>(col2(1), y, COL2_W, SPRINT_MODE_OPTIONS, cfg.sprintModeWhileFlying, value -> cfg.sprintModeWhileFlying = value));
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Disable Field Of View Changing"));
|
||||
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.of("Fly On Ground (Creative Mode)"));
|
||||
generateLeftSideText(y, elements, text("Fly On Ground (Creative Mode)"));
|
||||
elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.flyOnGroundInCreative, value -> cfg.flyOnGroundInCreative = value));
|
||||
|
||||
y += ROW_HEIGHT * 4 / 3;
|
||||
|
||||
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));
|
||||
elements.add(new TextWidget(col4(2), y, COL4_W - TEXT_PADDING_RIGHT, text("Creative"), CENTER));
|
||||
elements.add(new TextWidget(col4(3), y, COL4_W - TEXT_PADDING_RIGHT, text("Spectator"), CENTER));
|
||||
|
||||
y += ROW_HEIGHT * 7 / 8;
|
||||
|
||||
generateLeftSideText(y, elements, Text.of("Speed Multiplier (Default)"));
|
||||
generateLeftSideText(y, elements, text("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 (Sprinting)"));
|
||||
generateLeftSideText(y, elements, text("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("Vertical Speed Boost (Default)"));
|
||||
generateLeftSideText(y, elements, text("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("Vertical Speed Boost (Sprinting)"));
|
||||
generateLeftSideText(y, elements, text("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));
|
||||
|
||||
@ -170,19 +170,19 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
private int generateMiscellaneousOptions(int y, final List<Element> elements){
|
||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Walk Forwards"), cfg.keyToggleWalkForward);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Toggle Walk Forwards"), cfg.keyToggleWalkForward);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Toggle Jump"), cfg.keyToggleJump);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Toggle Jump"), cfg.keyToggleJump);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Reset All Toggles"), cfg.keyResetAllToggles);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Reset All Toggles"), cfg.keyResetAllToggles);
|
||||
|
||||
y += ROW_HEIGHT * 4 / 3;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Open Better Controls Menu"), cfg.keyOpenMenu);
|
||||
generateKeyBindingWithModifierOption(y, elements, text("Open Better Controls Menu"), cfg.keyOpenMenu);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
return y;
|
||||
@ -191,13 +191,13 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
// Helpers
|
||||
|
||||
private static final List<Option<ModifierKey>> MODIFIER_OPTIONS = Arrays.asList(
|
||||
new Option<>(null, Text.of("(No Modifier)")),
|
||||
new Option<>(ModifierKey.CONTROL, Text.of("Control")),
|
||||
new Option<>(ModifierKey.SHIFT, Text.of("Shift")),
|
||||
new Option<>(ModifierKey.ALT, Text.of("Alt"))
|
||||
new Option<>(null, text("(No Modifier)")),
|
||||
new Option<>(ModifierKey.CONTROL, text("Control")),
|
||||
new Option<>(ModifierKey.SHIFT, text("Shift")),
|
||||
new Option<>(ModifierKey.ALT, text("Alt"))
|
||||
);
|
||||
|
||||
private void generateKeyBindingWithModifierOption(final int y, final List<Element> elements, final Text text, final KeyBindingWithModifier binding){
|
||||
private void generateKeyBindingWithModifierOption(final int y, final List<Element> elements, final LiteralText text, final KeyBindingWithModifier binding){
|
||||
final CycleButtonWidget<ModifierKey> modifierButton = new CycleButtonWidget<>(col4(2), y, COL4_W, MODIFIER_OPTIONS, binding.getModifier(), binding::setModifier);
|
||||
final KeyBindingWidget bindingButton = new KeyBindingWidget(col4(3), y, COL4_W, binding, this::startEditingKeyBinding);
|
||||
bindingButton.linkButtonToBoundState(modifierButton);
|
||||
@ -208,7 +208,7 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
allKeyBindings.add(bindingButton);
|
||||
}
|
||||
|
||||
private static void generateLeftSideText(final int y, final List<Element> elements, final Text text){
|
||||
private static void generateLeftSideText(final int y, final List<Element> elements, final LiteralText text){
|
||||
elements.add(new TextWidget(col2(0), y, COL2_W - TEXT_PADDING_RIGHT, text));
|
||||
}
|
||||
|
||||
@ -219,7 +219,7 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
private final List<KeyBindingWidget> allKeyBindings = new ArrayList<>();
|
||||
|
||||
public BetterControlsScreen(final Screen parentScreen){
|
||||
super(parentScreen, MinecraftClient.getInstance().options, TITLE);
|
||||
super(parentScreen, OPTIONS, TITLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -229,16 +229,16 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
final List<Element> elements = new ArrayList<>();
|
||||
int y = 0;
|
||||
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Sprinting"), CENTER));
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("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));
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("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));
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("Flying"), CENTER));
|
||||
y = generateFlightOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;
|
||||
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Miscellaneous"), CENTER));
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("Miscellaneous"), CENTER));
|
||||
y = generateMiscellaneousOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;
|
||||
|
||||
addButton(new ButtonWidget(width / 2 - 99, height - 29, 200, 20, ScreenTexts.DONE, btn -> client.openScreen(parent)));
|
||||
|
@ -1,6 +1,5 @@
|
||||
package chylex.bettercontrols.gui;
|
||||
import chylex.bettercontrols.gui.OptionListWidget.Entry;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.Drawable;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.widget.AbstractButtonWidget;
|
||||
@ -12,32 +11,23 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import static chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
|
||||
public final class OptionListWidget extends ElementListWidget<Entry>{
|
||||
public static final int ROW_WIDTH = 408;
|
||||
public static final int ROW_PADDING = 2;
|
||||
|
||||
public static final int COL2_W = (ROW_WIDTH / 2) - ROW_PADDING;
|
||||
public static final int COL3_W = (ROW_WIDTH / 3) - ROW_PADDING;
|
||||
public static final int COL4_W = (ROW_WIDTH / 4) - ROW_PADDING;
|
||||
public static final int COL6_W = (ROW_WIDTH / 6) - ROW_PADDING;
|
||||
|
||||
public static int col2(final int column){
|
||||
return (column * ROW_WIDTH) / 2;
|
||||
}
|
||||
|
||||
public static int col3(final int column){
|
||||
return (column * ROW_WIDTH) / 3;
|
||||
}
|
||||
|
||||
public static int col4(final int column){
|
||||
return (column * ROW_WIDTH) / 4;
|
||||
}
|
||||
|
||||
public static int col6(final int column){
|
||||
return (column * ROW_WIDTH) / 6;
|
||||
}
|
||||
|
||||
private static Offset getElementOffset(final Element element){
|
||||
if (element instanceof Widget){
|
||||
return new Offset(((Widget)element).getX(), ((Widget)element).getY());
|
||||
@ -68,7 +58,7 @@ public final class OptionListWidget extends ElementListWidget<Entry>{
|
||||
}
|
||||
|
||||
public OptionListWidget(final int top, final int bottom, final int width, final int height, final List<Element> widgets, final int innerHeight){
|
||||
super(MinecraftClient.getInstance(), width, height, top, bottom, innerHeight);
|
||||
super(MINECRAFT, width, height, top, bottom, innerHeight);
|
||||
addEntry(new Entry(widgets));
|
||||
}
|
||||
|
||||
|
@ -1,15 +1,16 @@
|
||||
package chylex.bettercontrols.gui;
|
||||
import chylex.bettercontrols.mixin.AccessScreenButtons;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.ParentElement;
|
||||
import net.minecraft.client.gui.screen.options.AccessibilityOptionsScreen;
|
||||
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen;
|
||||
import net.minecraft.client.gui.widget.AbstractButtonWidget;
|
||||
import net.minecraft.client.gui.widget.ButtonListWidget;
|
||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.client.gui.widget.OptionButtonWidget;
|
||||
import net.minecraft.client.options.Option;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import static chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
|
||||
public final class ScreenPatcher{
|
||||
private ScreenPatcher(){}
|
||||
@ -31,27 +32,31 @@ public final class ScreenPatcher{
|
||||
buttons.remove(autoJump);
|
||||
|
||||
accessor.callAddButton(new ButtonWidget(autoJump.x, autoJump.y, autoJump.getWidth(), autoJump.getHeight(), BetterControlsScreen.TITLE.copy().append("..."), btn -> {
|
||||
MinecraftClient.getInstance().openScreen(new BetterControlsScreen(screen));
|
||||
MINECRAFT.openScreen(new BetterControlsScreen(screen));
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public static void onAccessibilityScreenOpened(final AccessibilityOptionsScreen screen){
|
||||
final AccessScreenButtons accessor = (AccessScreenButtons)screen;
|
||||
|
||||
screen.children()
|
||||
.stream()
|
||||
.filter(it -> it instanceof ButtonListWidget)
|
||||
.flatMap(it -> ((ButtonListWidget)it).children().stream())
|
||||
.flatMap(it -> it.children().stream())
|
||||
.filter(it -> it instanceof OptionButtonWidget)
|
||||
.forEach(it -> {
|
||||
walkChildren(screen.children(), it -> {
|
||||
if (it instanceof OptionButtonWidget){
|
||||
final OptionButtonWidget button = (OptionButtonWidget)it;
|
||||
final Option option = button.getOption();
|
||||
|
||||
if (option == Option.SPRINT_TOGGLED || option == Option.SNEAK_TOGGLED){
|
||||
button.active = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void walkChildren(final List<? extends Element> elements, final Consumer<Element> callback){
|
||||
for(final Element element : elements){
|
||||
callback.accept(element);
|
||||
|
||||
if (element instanceof ParentElement){
|
||||
walkChildren(((ParentElement)element).children(), callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
package chylex.bettercontrols.gui.elements;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import chylex.bettercontrols.util.Key;
|
||||
import net.minecraft.client.gui.widget.AbstractButtonWidget;
|
||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
@ -12,6 +12,7 @@ import net.minecraft.util.Formatting;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import static chylex.bettercontrols.util.Statics.OPTIONS;
|
||||
|
||||
public final class KeyBindingWidget extends ButtonWidget{
|
||||
private final KeyBinding binding;
|
||||
@ -36,12 +37,12 @@ public final class KeyBindingWidget extends ButtonWidget{
|
||||
|
||||
public void linkButtonToBoundState(final AbstractButtonWidget button){
|
||||
linkedButtons.add(button);
|
||||
button.active = !binding.isUnbound();
|
||||
button.active = !Key.isUnbound(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MutableText getNarrationMessage(){
|
||||
return binding.isUnbound() ? new TranslatableText("narrator.controls.unbound", bindingName) : new TranslatableText("narrator.controls.bound", bindingName, super.getNarrationMessage());
|
||||
return Key.isUnbound(binding) ? new TranslatableText("narrator.controls.unbound", bindingName) : new TranslatableText("narrator.controls.bound", bindingName, super.getNarrationMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -52,11 +53,11 @@ public final class KeyBindingWidget extends ButtonWidget{
|
||||
}
|
||||
|
||||
public void bindAndStopEditing(final InputUtil.Key key){
|
||||
binding.setBoundKey(key);
|
||||
Key.bind(binding, key);
|
||||
stopEditing();
|
||||
|
||||
for(final AbstractButtonWidget button : linkedButtons){
|
||||
button.active = !binding.isUnbound();
|
||||
button.active = !Key.isUnbound(binding);
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,22 +69,23 @@ public final class KeyBindingWidget extends ButtonWidget{
|
||||
public void updateKeyBindingText(){
|
||||
boolean hasConflict = false;
|
||||
|
||||
if (!binding.isUnbound()){
|
||||
for(final KeyBinding other : MinecraftClient.getInstance().options.keysAll){
|
||||
if (!Key.isUnbound(binding)){
|
||||
for(final KeyBinding other : OPTIONS.keysAll){
|
||||
if (binding != other && binding.equals(other)){
|
||||
hasConflict = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isEditing){
|
||||
setMessage((new LiteralText("> ")).append(binding.getBoundKeyLocalizedText().shallowCopy().formatted(Formatting.YELLOW)).append(" <").formatted(Formatting.YELLOW));
|
||||
setMessage((new LiteralText("> ")).append(Key.getBoundKeyText(binding).copy().formatted(Formatting.YELLOW)).append(" <").formatted(Formatting.YELLOW));
|
||||
}
|
||||
else if (hasConflict){
|
||||
setMessage(binding.getBoundKeyLocalizedText().shallowCopy().formatted(Formatting.RED));
|
||||
setMessage(Key.getBoundKeyText(binding).copy().formatted(Formatting.RED));
|
||||
}
|
||||
else{
|
||||
setMessage(binding.isUnbound() ? Text.of("(No Binding)") : binding.getBoundKeyLocalizedText());
|
||||
setMessage(Key.isUnbound(binding) ? Text.of("(No Binding)") : Key.getBoundKeyText(binding));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
package chylex.bettercontrols.gui.elements;
|
||||
import net.minecraft.text.Text;
|
||||
import chylex.bettercontrols.util.LiteralText;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class Option<T>{
|
||||
private final T value;
|
||||
private final Text text;
|
||||
private final LiteralText text;
|
||||
|
||||
public Option(final T value, final Text text){
|
||||
public Option(final T value, final LiteralText text){
|
||||
this.value = value;
|
||||
this.text = text;
|
||||
}
|
||||
@ -16,7 +16,7 @@ public final class Option<T>{
|
||||
return value;
|
||||
}
|
||||
|
||||
public Text getText(){
|
||||
public LiteralText getText(){
|
||||
return text;
|
||||
}
|
||||
|
||||
|
@ -1,25 +1,25 @@
|
||||
package chylex.bettercontrols.gui.elements;
|
||||
import chylex.bettercontrols.gui.OptionListWidget.Widget;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import chylex.bettercontrols.util.LiteralText;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawableHelper;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import net.minecraft.text.Text;
|
||||
import java.util.List;
|
||||
import static chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
|
||||
public final class TextWidget extends DrawableHelper implements Widget{
|
||||
public static final int LEFT = 0;
|
||||
public static final int CENTER = 1;
|
||||
|
||||
private final Text text;
|
||||
private final LiteralText text;
|
||||
private int x;
|
||||
private int y;
|
||||
private final int width;
|
||||
private final int height;
|
||||
private final int align;
|
||||
|
||||
public TextWidget(final int x, final int y, final int width, final int height, final Text text, final int align){
|
||||
public TextWidget(final int x, final int y, final int width, final int height, final LiteralText text, final int align){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = width;
|
||||
@ -28,11 +28,11 @@ public final class TextWidget extends DrawableHelper implements Widget{
|
||||
this.align = align;
|
||||
}
|
||||
|
||||
public TextWidget(final int x, final int y, final int width, final Text text, final int align){
|
||||
public TextWidget(final int x, final int y, final int width, final LiteralText text, final int align){
|
||||
this(x, y, width, 20, text, align);
|
||||
}
|
||||
|
||||
public TextWidget(final int x, final int y, final int width, final Text text){
|
||||
public TextWidget(final int x, final int y, final int width, final LiteralText text){
|
||||
this(x, y, width, 20, text, LEFT);
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ public final class TextWidget extends DrawableHelper implements Widget{
|
||||
|
||||
@Override
|
||||
public void render(final MatrixStack matrices, final int mouseX, final int mouseY, final float delta){
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
final TextRenderer textRenderer = MINECRAFT.textRenderer;
|
||||
final List<OrderedText> lines = textRenderer.wrapLines(text, width);
|
||||
final int lineHeight = textRenderer.fontHeight + 1;
|
||||
|
||||
|
@ -19,11 +19,12 @@ public class KeyBindingWithModifier extends KeyBinding{
|
||||
super(translationKey, Type.KEYSYM, -1, CATEGORY);
|
||||
}
|
||||
|
||||
public void setModifier(final @Nullable ModifierKey modifier){
|
||||
public void setModifier(@Nullable final ModifierKey modifier){
|
||||
this.modifier = modifier;
|
||||
}
|
||||
|
||||
public @Nullable ModifierKey getModifier(){
|
||||
@Nullable
|
||||
public ModifierKey getModifier(){
|
||||
return modifier;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
package chylex.bettercontrols.input;
|
||||
import chylex.bettercontrols.util.Key;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
|
||||
public class ToggleTracker{
|
||||
@ -43,7 +44,7 @@ public class ToggleTracker{
|
||||
public boolean tick(){
|
||||
final boolean isHoldingReset = isResetKeyPressed();
|
||||
|
||||
if (bindingToggle.isPressed()){
|
||||
if (Key.isPressed(bindingToggle)){
|
||||
if (!waitForRelease){
|
||||
if (skipNextToggle){
|
||||
skipNextToggle = false;
|
||||
@ -78,7 +79,7 @@ public class ToggleTracker{
|
||||
}
|
||||
|
||||
protected boolean isResetKeyPressed(){
|
||||
return bindingReset.isPressed();
|
||||
return Key.isPressed(bindingReset);
|
||||
}
|
||||
|
||||
public void reset(){
|
||||
|
@ -1,12 +1,12 @@
|
||||
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 chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
import static org.spongepowered.asm.mixin.injection.At.Shift.AFTER;
|
||||
|
||||
@Mixin(KeyboardInput.class)
|
||||
@ -14,7 +14,7 @@ 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;
|
||||
final ClientPlayerEntity player = MINECRAFT.player;
|
||||
|
||||
if (player != null){
|
||||
PlayerTicker.get(player).afterInputAssignsPressingForward(input);
|
||||
|
@ -8,13 +8,13 @@ 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 chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
|
||||
@Mixin(value = MinecraftClient.class, priority = 100)
|
||||
public abstract class HookOpenScreen{
|
||||
@Inject(method = "openScreen(Lnet/minecraft/client/gui/screen/Screen;)V", at = @At("TAIL"))
|
||||
private void openScreen(final Screen ignore, final CallbackInfo ci){
|
||||
final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
final Screen screen = mc.currentScreen;
|
||||
final Screen screen = MINECRAFT.currentScreen;
|
||||
|
||||
if (screen != null && !Screen.hasAltDown()){
|
||||
if (screen.getClass() == ControlsOptionsScreen.class){
|
||||
|
@ -9,13 +9,18 @@ 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 chylex.bettercontrols.util.Key;
|
||||
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;
|
||||
import static chylex.bettercontrols.util.Statics.KEY_FORWARD;
|
||||
import static chylex.bettercontrols.util.Statics.KEY_JUMP;
|
||||
import static chylex.bettercontrols.util.Statics.KEY_SNEAK;
|
||||
import static chylex.bettercontrols.util.Statics.KEY_SPRINT;
|
||||
import static chylex.bettercontrols.util.Statics.MINECRAFT;
|
||||
import static chylex.bettercontrols.util.Statics.OPTIONS;
|
||||
|
||||
public final class PlayerTicker{
|
||||
private static PlayerTicker ticker = new PlayerTicker(null);
|
||||
@ -28,10 +33,6 @@ public final class PlayerTicker{
|
||||
return ticker;
|
||||
}
|
||||
|
||||
private static MinecraftClient mc(){
|
||||
return MinecraftClient.getInstance();
|
||||
}
|
||||
|
||||
private static BetterControlsConfig cfg(){
|
||||
return BetterControlsMod.config;
|
||||
}
|
||||
@ -45,10 +46,10 @@ public final class PlayerTicker{
|
||||
|
||||
// Logic
|
||||
|
||||
private final ToggleTracker toggleSprint = new ToggleTrackerForStickyKey(cfg().keyToggleSprint, mc().options.keySprint, toggled -> mc().options.sprintToggled = toggled);
|
||||
private final ToggleTracker toggleSneak = new ToggleTrackerForStickyKey(cfg().keyToggleSneak, mc().options.keySneak, toggled -> mc().options.sneakToggled = toggled);
|
||||
private final ToggleTracker toggleWalkForward = new ToggleTracker(cfg().keyToggleWalkForward, mc().options.keyForward);
|
||||
private final ToggleTracker toggleJump = new ToggleTracker(cfg().keyToggleJump, mc().options.keyJump);
|
||||
private final ToggleTracker toggleSprint = new ToggleTrackerForStickyKey(cfg().keyToggleSprint, KEY_SPRINT, toggled -> OPTIONS.sprintToggled = toggled);
|
||||
private final ToggleTracker toggleSneak = new ToggleTrackerForStickyKey(cfg().keyToggleSneak, KEY_SNEAK, toggled -> OPTIONS.sneakToggled = toggled);
|
||||
private final ToggleTracker toggleWalkForward = new ToggleTracker(cfg().keyToggleWalkForward, KEY_FORWARD);
|
||||
private final ToggleTracker toggleJump = new ToggleTracker(cfg().keyToggleJump, KEY_JUMP);
|
||||
|
||||
private boolean waitingForSprintKeyRelease = false;
|
||||
private boolean stopSprintingAfterReleasingSprintKey = false;
|
||||
@ -62,7 +63,7 @@ public final class PlayerTicker{
|
||||
private int temporaryFlyOnGroundTimer = 0;
|
||||
|
||||
private void setup(){
|
||||
final AccessStickyKeyBindingStateGetter sprint = (AccessStickyKeyBindingStateGetter)mc().options.keySprint;
|
||||
final AccessStickyKeyBindingStateGetter sprint = (AccessStickyKeyBindingStateGetter)KEY_SPRINT;
|
||||
BooleanSupplier getter = sprint.getToggleGetter();
|
||||
|
||||
if (getter instanceof SprintPressGetter){
|
||||
@ -90,8 +91,7 @@ public final class PlayerTicker{
|
||||
sprintMode = cfg().sprintMode;
|
||||
}
|
||||
|
||||
final GameOptions opts = mc().options;
|
||||
final boolean wasSprintToggled = opts.sprintToggled;
|
||||
final boolean wasSprintToggled = OPTIONS.sprintToggled;
|
||||
final boolean isSprintToggled = toggleSprint.tick();
|
||||
|
||||
if (temporarySprintTimer > 0){
|
||||
@ -101,7 +101,7 @@ public final class PlayerTicker{
|
||||
final int nextTemporarySprintTimer = temporarySprintTimer - 1;
|
||||
temporarySprintTimer = 0;
|
||||
|
||||
if (!opts.keySprint.isPressed() && opts.keyForward.isPressed()){
|
||||
if (!Key.isPressed(KEY_SPRINT) && Key.isPressed(KEY_FORWARD)){
|
||||
temporarySprintTimer = nextTemporarySprintTimer;
|
||||
}
|
||||
else if (sprintMode == SprintMode.TAP_TO_TOGGLE){
|
||||
@ -118,7 +118,7 @@ public final class PlayerTicker{
|
||||
waitingForSprintKeyRelease = true;
|
||||
}
|
||||
else if (sprintMode == SprintMode.TAP_TO_TOGGLE){
|
||||
if (opts.keySprint.isPressed()){
|
||||
if (Key.isPressed(KEY_SPRINT)){
|
||||
if (!waitingForSprintKeyRelease){
|
||||
waitingForSprintKeyRelease = true;
|
||||
stopSprintingAfterReleasingSprintKey = player.isSprinting();
|
||||
@ -133,12 +133,12 @@ public final class PlayerTicker{
|
||||
}
|
||||
}
|
||||
else if (sprintMode == SprintMode.HOLD){
|
||||
if (opts.keySprint.isPressed()){
|
||||
if (Key.isPressed(KEY_SPRINT)){
|
||||
stopSprintingAfterReleasingSprintKey = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (stopSprintingAfterReleasingSprintKey && !opts.keySprint.isPressed()){
|
||||
if (stopSprintingAfterReleasingSprintKey && !Key.isPressed(KEY_SPRINT)){
|
||||
stopSprintingAfterReleasingSprintKey = false;
|
||||
waitingForSprintKeyRelease = false;
|
||||
player.setSprinting(false);
|
||||
@ -148,13 +148,13 @@ public final class PlayerTicker{
|
||||
}
|
||||
|
||||
public void afterInputAssignsPressingForward(final KeyboardInput input){
|
||||
if (mc().currentScreen == null){
|
||||
if (MINECRAFT.currentScreen == null){
|
||||
input.pressingForward |= toggleWalkForward.tick();
|
||||
}
|
||||
}
|
||||
|
||||
public void afterInputTick(final ClientPlayerEntity player){
|
||||
if (mc().currentScreen == null && !player.abilities.flying){
|
||||
if (MINECRAFT.currentScreen == null && !player.abilities.flying){
|
||||
player.input.jumping |= toggleJump.tick();
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ public final class PlayerTicker{
|
||||
|
||||
final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player);
|
||||
|
||||
if (!MathHelper.approximatelyEquals(verticalVelocity, 0F) && player == mc().getCameraEntity()){
|
||||
if (!MathHelper.approximatelyEquals(verticalVelocity, 0F) && player == MINECRAFT.getCameraEntity()){
|
||||
int direction = 0;
|
||||
|
||||
if (player.input.sneaking){
|
||||
@ -187,7 +187,7 @@ public final class PlayerTicker{
|
||||
if (cfg().resumeSprintingAfterHittingObstacle){
|
||||
if (wasHittingObstacle != player.horizontalCollision){
|
||||
if (!wasHittingObstacle){
|
||||
wasSprintingBeforeHittingObstacle = player.isSprinting() || mc().options.keySprint.isPressed();
|
||||
wasSprintingBeforeHittingObstacle = player.isSprinting() || Key.isPressed(KEY_SPRINT);
|
||||
}
|
||||
else if (wasSprintingBeforeHittingObstacle){
|
||||
wasSprintingBeforeHittingObstacle = false;
|
||||
@ -204,7 +204,7 @@ public final class PlayerTicker{
|
||||
}
|
||||
|
||||
if (cfg().disableChangingFovWhileFlying && FlightHelper.isFlyingCreativeOrSpectator(player)){
|
||||
((AccessGameRendererFields)mc().gameRenderer).setMovementFovMultiplier(1F);
|
||||
((AccessGameRendererFields)MINECRAFT.gameRenderer).setMovementFovMultiplier(1F);
|
||||
}
|
||||
}
|
||||
|
||||
@ -248,7 +248,7 @@ public final class PlayerTicker{
|
||||
}
|
||||
|
||||
if (player.isCreative()){
|
||||
if (cfg().keyToggleFlight.wasPressed()){
|
||||
if (Key.wasPressed(cfg().keyToggleFlight)){
|
||||
final boolean isFlying = !player.abilities.flying;
|
||||
|
||||
player.abilities.flying = isFlying;
|
||||
@ -274,22 +274,22 @@ public final class PlayerTicker{
|
||||
}
|
||||
|
||||
if (!cfg().sneakingMovesCameraSmoothly){
|
||||
final AccessCameraFields camera = (AccessCameraFields)mc().gameRenderer.getCamera();
|
||||
final AccessCameraFields camera = (AccessCameraFields)MINECRAFT.gameRenderer.getCamera();
|
||||
|
||||
if (camera.getFocusedEntity() == player){
|
||||
camera.setCameraY(player.getStandingEyeHeight());
|
||||
}
|
||||
}
|
||||
|
||||
if (cfg().keyResetAllToggles.wasPressed()){
|
||||
if (Key.wasPressed(cfg().keyResetAllToggles)){
|
||||
toggleSprint.reset();
|
||||
toggleSneak.reset();
|
||||
toggleWalkForward.reset();
|
||||
toggleJump.reset();
|
||||
}
|
||||
|
||||
if (cfg().keyOpenMenu.isPressed()){
|
||||
mc().openScreen(new BetterControlsScreen(null));
|
||||
if (Key.isPressed(cfg().keyOpenMenu)){
|
||||
MINECRAFT.openScreen(new BetterControlsScreen(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
46
src/main/java/chylex/bettercontrols/util/Key.java
Normal file
46
src/main/java/chylex/bettercontrols/util/Key.java
Normal file
@ -0,0 +1,46 @@
|
||||
package chylex.bettercontrols.util;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
public final class Key{
|
||||
private Key(){}
|
||||
|
||||
public static final InputUtil.Key INVALID = InputUtil.UNKNOWN_KEY;
|
||||
|
||||
public static boolean isUnbound(final KeyBinding binding){
|
||||
return binding.isUnbound();
|
||||
}
|
||||
|
||||
public static boolean isPressed(final KeyBinding binding){
|
||||
return binding.isPressed();
|
||||
}
|
||||
|
||||
public static boolean wasPressed(final KeyBinding binding){
|
||||
return binding.wasPressed();
|
||||
}
|
||||
|
||||
public static Text getBoundKeyText(final KeyBinding binding){
|
||||
return binding.getBoundKeyLocalizedText();
|
||||
}
|
||||
|
||||
public static void bind(final KeyBinding binding, final InputUtil.Key input){
|
||||
binding.setBoundKey(input);
|
||||
}
|
||||
|
||||
public static String writeBinding(final KeyBinding binding){
|
||||
return binding.getTranslationKey();
|
||||
}
|
||||
|
||||
public static void readBinding(final KeyBinding binding, final String serialized){
|
||||
bind(binding, InputUtil.fromTranslationKey(serialized));
|
||||
}
|
||||
|
||||
public static InputUtil.Key inputFromMouse(final int button){
|
||||
return InputUtil.Type.MOUSE.createFromCode(button);
|
||||
}
|
||||
|
||||
public static InputUtil.Key inputFromKeyboard(final int keyCode, final int scanCode){
|
||||
return InputUtil.fromKeyCode(keyCode, scanCode);
|
||||
}
|
||||
}
|
11
src/main/java/chylex/bettercontrols/util/LiteralText.java
Normal file
11
src/main/java/chylex/bettercontrols/util/LiteralText.java
Normal file
@ -0,0 +1,11 @@
|
||||
package chylex.bettercontrols.util;
|
||||
|
||||
public final class LiteralText extends net.minecraft.text.LiteralText{
|
||||
public static LiteralText text(final String text){
|
||||
return new LiteralText(text);
|
||||
}
|
||||
|
||||
public LiteralText(final String msg){
|
||||
super(msg);
|
||||
}
|
||||
}
|
16
src/main/java/chylex/bettercontrols/util/Statics.java
Normal file
16
src/main/java/chylex/bettercontrols/util/Statics.java
Normal file
@ -0,0 +1,16 @@
|
||||
package chylex.bettercontrols.util;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.options.GameOptions;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
|
||||
public final class Statics{
|
||||
private Statics(){}
|
||||
|
||||
public static final MinecraftClient MINECRAFT = MinecraftClient.getInstance();
|
||||
public static final GameOptions OPTIONS = MINECRAFT.options;
|
||||
|
||||
public static final KeyBinding KEY_SPRINT = OPTIONS.keySprint;
|
||||
public static final KeyBinding KEY_SNEAK = OPTIONS.keySneak;
|
||||
public static final KeyBinding KEY_FORWARD = OPTIONS.keyForward;
|
||||
public static final KeyBinding KEY_JUMP = OPTIONS.keyJump;
|
||||
}
|
Loading…
Reference in New Issue
Block a user