mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-03 04:34:06 +02:00
Add keybinding to open configuration screen
This commit is contained in:
parent
b76a65fb70
commit
87315529f4
src/main
java/chylex/bettercontrols
config
gui
player
resources/assets/bettercontrols/lang
@ -1,4 +1,5 @@
|
||||
package chylex.bettercontrols.config;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@ -20,6 +21,8 @@ public final class BetterControlsConfig{
|
||||
public float flightSpeedMpSpectatorDefault = 1F;
|
||||
public float flightSpeedMpSpectatorSprinting = 2F;
|
||||
|
||||
public final KeyBindingWithModifier keyOpenMenu = new KeyBindingWithModifier("key.bettercontrols.open_menu");
|
||||
|
||||
BetterControlsConfig(){}
|
||||
|
||||
private BetterControlsConfig setPath(final Path path){
|
||||
@ -28,7 +31,9 @@ public final class BetterControlsConfig{
|
||||
}
|
||||
|
||||
public KeyBinding[] getAllKeyBindings(){
|
||||
return new KeyBinding[0];
|
||||
return new KeyBinding[]{
|
||||
keyOpenMenu
|
||||
};
|
||||
}
|
||||
|
||||
public void save(){
|
||||
|
@ -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.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
||||
|
||||
Json.writeKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
@ -60,6 +62,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
|
||||
cfg.flightSpeedMpSpectatorDefault = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault);
|
||||
cfg.flightSpeedMpSpectatorSprinting = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting);
|
||||
|
||||
Json.readKeyBinding(obj, "Misc.KeyOpenMenu", cfg.keyOpenMenu);
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
|
@ -2,10 +2,13 @@ package chylex.bettercontrols.gui;
|
||||
import chylex.bettercontrols.BetterControlsMod;
|
||||
import chylex.bettercontrols.config.BetterControlsConfig;
|
||||
import chylex.bettercontrols.gui.elements.BooleanValueWidget;
|
||||
import chylex.bettercontrols.gui.elements.CycleButtonWidget;
|
||||
import chylex.bettercontrols.gui.elements.DiscreteValueSliderWidget;
|
||||
import chylex.bettercontrols.gui.elements.KeyBindingWidget;
|
||||
import chylex.bettercontrols.gui.elements.Option;
|
||||
import chylex.bettercontrols.gui.elements.TextWidget;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import chylex.bettercontrols.input.ModifierKey;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
@ -22,8 +25,10 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import static chylex.bettercontrols.gui.OptionListWidget.COL2_W;
|
||||
import static chylex.bettercontrols.gui.OptionListWidget.COL4_W;
|
||||
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;
|
||||
|
||||
public class BetterControlsScreen extends GameOptionsScreen{
|
||||
@ -105,8 +110,35 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
return y;
|
||||
}
|
||||
|
||||
private int generateMiscellaneousOptions(int y, final List<Element> elements){
|
||||
final BetterControlsConfig cfg = BetterControlsMod.config;
|
||||
|
||||
generateKeyBindingWithModifierOption(y, elements, Text.of("Open Better Controls Menu"), cfg.keyOpenMenu);
|
||||
|
||||
y += ROW_HEIGHT;
|
||||
return y;
|
||||
}
|
||||
|
||||
// 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"))
|
||||
);
|
||||
|
||||
private void generateKeyBindingWithModifierOption(final int y, final List<Element> elements, final Text 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);
|
||||
|
||||
generateLeftSideText(y, elements, text);
|
||||
elements.add(modifierButton);
|
||||
elements.add(bindingButton);
|
||||
allKeyBindings.add(bindingButton);
|
||||
}
|
||||
|
||||
private static void generateLeftSideText(final int y, final List<Element> elements, final Text text){
|
||||
elements.add(new TextWidget(col2(0), y, COL2_W - TEXT_PADDING_RIGHT, text));
|
||||
}
|
||||
@ -137,6 +169,9 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
||||
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("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));
|
||||
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)));
|
||||
addChild(optionsWidget = new OptionListWidget(21, height - 32, width, height, elements, y - TITLE_MARGIN_TOP + BOTTOM_PADDING));
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package chylex.bettercontrols.player;
|
||||
import chylex.bettercontrols.BetterControlsMod;
|
||||
import chylex.bettercontrols.config.BetterControlsConfig;
|
||||
import chylex.bettercontrols.gui.BetterControlsScreen;
|
||||
import chylex.bettercontrols.mixin.AccessCameraFields;
|
||||
import chylex.bettercontrols.mixin.AccessClientPlayerFields;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
@ -123,5 +124,9 @@ public final class PlayerTicker{
|
||||
camera.setCameraY(player.getStandingEyeHeight());
|
||||
}
|
||||
}
|
||||
|
||||
if (cfg().keyOpenMenu.isPressed()){
|
||||
mc().openScreen(new BetterControlsScreen(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
{
|
||||
"key.categories.bettercontrols": "Better Controls"
|
||||
"key.categories.bettercontrols": "Better Controls",
|
||||
"key.bettercontrols.open_menu": "Open Menu"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user