mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-21 01:34:04 +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;
|
package chylex.bettercontrols.config;
|
||||||
|
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||||
import net.minecraft.client.options.KeyBinding;
|
import net.minecraft.client.options.KeyBinding;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
@ -20,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 keyOpenMenu = new KeyBindingWithModifier("key.bettercontrols.open_menu");
|
||||||
|
|
||||||
BetterControlsConfig(){}
|
BetterControlsConfig(){}
|
||||||
|
|
||||||
private BetterControlsConfig setPath(final Path path){
|
private BetterControlsConfig setPath(final Path path){
|
||||||
@ -28,7 +31,9 @@ public final class BetterControlsConfig{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public KeyBinding[] getAllKeyBindings(){
|
public KeyBinding[] getAllKeyBindings(){
|
||||||
return new KeyBinding[0];
|
return new KeyBinding[]{
|
||||||
|
keyOpenMenu
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(){
|
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.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.KeyOpenMenu", cfg.keyOpenMenu);
|
||||||
|
|
||||||
return obj;
|
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.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.KeyOpenMenu", cfg.keyOpenMenu);
|
||||||
|
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,10 +2,13 @@ package chylex.bettercontrols.gui;
|
|||||||
import chylex.bettercontrols.BetterControlsMod;
|
import chylex.bettercontrols.BetterControlsMod;
|
||||||
import chylex.bettercontrols.config.BetterControlsConfig;
|
import chylex.bettercontrols.config.BetterControlsConfig;
|
||||||
import chylex.bettercontrols.gui.elements.BooleanValueWidget;
|
import chylex.bettercontrols.gui.elements.BooleanValueWidget;
|
||||||
|
import chylex.bettercontrols.gui.elements.CycleButtonWidget;
|
||||||
import chylex.bettercontrols.gui.elements.DiscreteValueSliderWidget;
|
import chylex.bettercontrols.gui.elements.DiscreteValueSliderWidget;
|
||||||
import chylex.bettercontrols.gui.elements.KeyBindingWidget;
|
import chylex.bettercontrols.gui.elements.KeyBindingWidget;
|
||||||
import chylex.bettercontrols.gui.elements.Option;
|
import chylex.bettercontrols.gui.elements.Option;
|
||||||
import chylex.bettercontrols.gui.elements.TextWidget;
|
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.MinecraftClient;
|
||||||
import net.minecraft.client.gui.Element;
|
import net.minecraft.client.gui.Element;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
@ -22,8 +25,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import static chylex.bettercontrols.gui.OptionListWidget.COL2_W;
|
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.ROW_WIDTH;
|
||||||
import static chylex.bettercontrols.gui.OptionListWidget.col2;
|
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.gui.elements.TextWidget.CENTER;
|
||||||
|
|
||||||
public class BetterControlsScreen extends GameOptionsScreen{
|
public class BetterControlsScreen extends GameOptionsScreen{
|
||||||
@ -105,8 +110,35 @@ public class BetterControlsScreen extends GameOptionsScreen{
|
|||||||
return y;
|
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
|
// 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){
|
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));
|
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));
|
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, Text.of("Flying"), CENTER));
|
||||||
y = generateFlightOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP;
|
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)));
|
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));
|
addChild(optionsWidget = new OptionListWidget(21, height - 32, width, height, elements, y - TITLE_MARGIN_TOP + BOTTOM_PADDING));
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package chylex.bettercontrols.player;
|
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.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;
|
||||||
@ -123,5 +124,9 @@ public final class PlayerTicker{
|
|||||||
camera.setCameraY(player.getStandingEyeHeight());
|
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