From fd391e81a03f79d8c7b1dd49b10ef4de59572d47 Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Sat, 2 Oct 2021 15:03:26 +0200 Subject: [PATCH] Remove some utility classes & unify with Fabric codebase --- .../config/BetterControlsConfig.java | 2 +- .../chylex/bettercontrols/config/Json.java | 10 ++-- .../gui/BetterControlsScreen.java | 22 +++++---- .../gui/elements/KeyBindingWidget.java | 22 ++++----- .../bettercontrols/gui/elements/Option.java | 8 ++-- .../gui/elements/TextWidget.java | 10 ++-- .../bettercontrols/input/ModifierKey.java | 12 ++--- .../bettercontrols/input/ToggleTracker.java | 5 +- .../bettercontrols/player/PlayerTicker.java | 19 ++++---- .../java/chylex/bettercontrols/util/Key.java | 46 ------------------- .../bettercontrols/util/LiteralText.java | 12 ----- src/main/resources/bettercontrols.mixins.json | 2 +- 12 files changed, 58 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/chylex/bettercontrols/util/Key.java delete mode 100644 src/main/java/chylex/bettercontrols/util/LiteralText.java diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java index 248ac50..8aeea7c 100644 --- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java +++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java @@ -45,7 +45,7 @@ public final class BetterControlsConfig { } public KeyBindingWithModifier[] getAllKeyBindings() { - return new KeyBindingWithModifier[]{ + return new KeyBindingWithModifier[] { keyToggleSprint, keyToggleSneak, keyToggleFlight, diff --git a/src/main/java/chylex/bettercontrols/config/Json.java b/src/main/java/chylex/bettercontrols/config/Json.java index 210bfca..739a0ce 100644 --- a/src/main/java/chylex/bettercontrols/config/Json.java +++ b/src/main/java/chylex/bettercontrols/config/Json.java @@ -1,8 +1,8 @@ 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 com.mojang.blaze3d.platform.InputConstants; final class Json { private Json() {} @@ -52,7 +52,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, Key.writeBinding(keyBinding)); + obj.addProperty(key + KEY_SUFFIX, keyBinding.saveString()); if (keyBinding.getModifier() != null) { obj.addProperty(key + MOD_SUFFIX, Integer.valueOf(keyBinding.getModifier().id)); @@ -61,7 +61,11 @@ final class Json { static void readKeyBinding(final JsonObject obj, final String key, final KeyBindingWithModifier keyBinding) { if (obj.has(key + KEY_SUFFIX)) { - Key.readBinding(keyBinding, obj.get(key + KEY_SUFFIX).getAsString()); + try { + keyBinding.setKey(InputConstants.getKey(obj.get(key + KEY_SUFFIX).getAsString())); + } catch (final IllegalArgumentException e) { + e.printStackTrace(); // let's not crash if the config file has garbage, okay? + } } if (obj.has(key + MOD_SUFFIX)) { diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java index d68a7a0..6d173f8 100644 --- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java @@ -10,8 +10,7 @@ import chylex.bettercontrols.gui.elements.TextWidget; import chylex.bettercontrols.input.KeyBindingWithModifier; import chylex.bettercontrols.input.ModifierKey; import chylex.bettercontrols.input.SprintMode; -import chylex.bettercontrols.util.Key; -import chylex.bettercontrols.util.LiteralText; +import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.components.Button; @@ -19,6 +18,8 @@ import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.OptionsSubScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; import org.lwjgl.glfw.GLFW; import javax.annotation.Nullable; import java.util.ArrayList; @@ -30,11 +31,14 @@ 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 OptionsSubScreen { - public static final LiteralText TITLE = text("Better Controls"); + private static TextComponent text(final String text) { + return new TextComponent(text); + } + + public static final Component TITLE = text("Better Controls"); private static final int BOTTOM_PADDING = 3; private static final int TEXT_PADDING_RIGHT = 4; @@ -203,7 +207,7 @@ public class BetterControlsScreen extends OptionsSubScreen { new Option<>(ModifierKey.ALT, text("Alt")) ); - private void generateKeyBindingWithModifierOption(final int y, final List<GuiEventListener> elements, final LiteralText text, final KeyBindingWithModifier binding) { + private void generateKeyBindingWithModifierOption(final int y, final List<GuiEventListener> elements, final Component 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, text, binding, this::startEditingKeyBinding); bindingButton.linkButtonToBoundState(modifierButton); @@ -214,7 +218,7 @@ public class BetterControlsScreen extends OptionsSubScreen { allKeyBindings.add(bindingButton); } - private static void generateLeftSideText(final int y, final List<GuiEventListener> elements, final LiteralText text) { + private static void generateLeftSideText(final int y, final List<GuiEventListener> elements, final Component text) { elements.add(new TextWidget(col2(0), y, COL2_W - TEXT_PADDING_RIGHT, text)); } @@ -275,7 +279,7 @@ public class BetterControlsScreen extends OptionsSubScreen { @Override public boolean mouseClicked(final double mouseX, final double mouseY, final int button) { if (editingKeyBinding != null) { - editingKeyBinding.bindAndStopEditing(Key.inputFromMouse(button)); + editingKeyBinding.bindAndStopEditing(InputConstants.Type.MOUSE.getOrCreate(button)); onKeyBindingEditingFinished(); return true; } @@ -288,10 +292,10 @@ public class BetterControlsScreen extends OptionsSubScreen { public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) { if (editingKeyBinding != null) { if (keyCode == GLFW.GLFW_KEY_ESCAPE) { - editingKeyBinding.bindAndStopEditing(Key.INVALID); + editingKeyBinding.bindAndStopEditing(InputConstants.UNKNOWN); } else { - editingKeyBinding.bindAndStopEditing(Key.inputFromKeyboard(keyCode, scanCode)); + editingKeyBinding.bindAndStopEditing(InputConstants.getKey(keyCode, scanCode)); } onKeyBindingEditingFinished(); diff --git a/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java b/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java index 848b45b..287016b 100644 --- a/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java +++ b/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java @@ -1,6 +1,4 @@ package chylex.bettercontrols.gui.elements; -import chylex.bettercontrols.util.Key; -import chylex.bettercontrols.util.LiteralText; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.ChatFormatting; import net.minecraft.client.KeyMapping; @@ -24,7 +22,7 @@ public final class KeyBindingWidget extends Button { private final Consumer<KeyBindingWidget> onEditingStarted; private boolean isEditing; - public KeyBindingWidget(final int x, final int y, final int width, final int height, final LiteralText bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) { + public KeyBindingWidget(final int x, final int y, final int width, final int height, final Component bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) { super(x, y, width, height, TextComponent.EMPTY, btn -> {}); this.binding = binding; this.bindingName = bindingName; @@ -32,18 +30,18 @@ public final class KeyBindingWidget extends Button { updateKeyBindingText(); } - public KeyBindingWidget(final int x, final int y, final int width, final LiteralText bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) { + public KeyBindingWidget(final int x, final int y, final int width, final Component bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) { this(x, y, width, 20, bindingName, binding, onEditingStarted); } public void linkButtonToBoundState(final AbstractButton button) { linkedButtons.add(button); - button.active = !Key.isUnbound(binding); + button.active = !binding.isUnbound(); } @Override protected MutableComponent createNarrationMessage() { - return Key.isUnbound(binding) ? new TranslatableComponent("narrator.controls.unbound", bindingName) : new TranslatableComponent("narrator.controls.bound", bindingName, super.createNarrationMessage()); + return binding.isUnbound() ? new TranslatableComponent("narrator.controls.unbound", bindingName) : new TranslatableComponent("narrator.controls.bound", bindingName, super.createNarrationMessage()); } @Override @@ -54,11 +52,11 @@ public final class KeyBindingWidget extends Button { } public void bindAndStopEditing(final InputConstants.Key key) { - Key.bind(binding, key); + binding.setKey(key); stopEditing(); for (final AbstractButton button : linkedButtons) { - button.active = !Key.isUnbound(binding); + button.active = !binding.isUnbound(); } } @@ -70,7 +68,7 @@ public final class KeyBindingWidget extends Button { public void updateKeyBindingText() { boolean hasConflict = false; - if (!Key.isUnbound(binding)) { + if (!binding.isUnbound()) { for (final KeyMapping other : OPTIONS.keyMappings) { if (binding != other && binding.equals(other)) { hasConflict = true; @@ -80,13 +78,13 @@ public final class KeyBindingWidget extends Button { } if (isEditing) { - setMessage((new TextComponent("> ")).append(Key.getBoundKeyText(binding).copy().withStyle(ChatFormatting.YELLOW)).append(" <").withStyle(ChatFormatting.YELLOW)); + setMessage((new TextComponent("> ")).append(binding.getTranslatedKeyMessage().copy().withStyle(ChatFormatting.YELLOW)).append(" <").withStyle(ChatFormatting.YELLOW)); } else if (hasConflict) { - setMessage(Key.getBoundKeyText(binding).copy().withStyle(ChatFormatting.RED)); + setMessage(binding.getTranslatedKeyMessage().copy().withStyle(ChatFormatting.RED)); } else { - setMessage(Key.isUnbound(binding) ? new TextComponent("(No Binding)") : Key.getBoundKeyText(binding)); + setMessage(binding.isUnbound() ? new TextComponent("(No Binding)") : binding.getTranslatedKeyMessage()); } } } diff --git a/src/main/java/chylex/bettercontrols/gui/elements/Option.java b/src/main/java/chylex/bettercontrols/gui/elements/Option.java index 9702ea9..0052648 100644 --- a/src/main/java/chylex/bettercontrols/gui/elements/Option.java +++ b/src/main/java/chylex/bettercontrols/gui/elements/Option.java @@ -1,13 +1,13 @@ package chylex.bettercontrols.gui.elements; -import chylex.bettercontrols.util.LiteralText; +import net.minecraft.network.chat.Component; import java.util.List; import java.util.Objects; public final class Option<T> { private final T value; - private final LiteralText text; + private final Component text; - public Option(final T value, final LiteralText text) { + public Option(final T value, final Component text) { this.value = value; this.text = text; } @@ -16,7 +16,7 @@ public final class Option<T> { return value; } - public LiteralText getText() { + public Component getText() { return text; } diff --git a/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java b/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java index 02329e4..58e3ecd 100644 --- a/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java +++ b/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java @@ -1,9 +1,9 @@ package chylex.bettercontrols.gui.elements; import chylex.bettercontrols.gui.OptionListWidget.OptionWidget; -import chylex.bettercontrols.util.LiteralText; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiComponent; +import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; import java.util.List; import static chylex.bettercontrols.util.Statics.MINECRAFT; @@ -12,14 +12,14 @@ public final class TextWidget extends GuiComponent implements OptionWidget { public static final int LEFT = 0; public static final int CENTER = 1; - private final LiteralText text; + private final Component 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 LiteralText text, final int align) { + public TextWidget(final int x, final int y, final int width, final int height, final Component text, final int align) { this.x = x; this.y = y; this.width = width; @@ -28,11 +28,11 @@ public final class TextWidget extends GuiComponent implements OptionWidget { this.align = align; } - public TextWidget(final int x, final int y, final int width, final LiteralText text, final int align) { + public TextWidget(final int x, final int y, final int width, final Component text, final int align) { this(x, y, width, 20, text, align); } - public TextWidget(final int x, final int y, final int width, final LiteralText text) { + public TextWidget(final int x, final int y, final int width, final Component text) { this(x, y, width, 20, text, LEFT); } diff --git a/src/main/java/chylex/bettercontrols/input/ModifierKey.java b/src/main/java/chylex/bettercontrols/input/ModifierKey.java index 882025e..41c6f06 100644 --- a/src/main/java/chylex/bettercontrols/input/ModifierKey.java +++ b/src/main/java/chylex/bettercontrols/input/ModifierKey.java @@ -32,11 +32,11 @@ public enum ModifierKey { public abstract boolean isPressed(); public static ModifierKey getById(final int id) { - switch (id) { - case 0: return CONTROL; - case 1: return SHIFT; - case 2: return ALT; - default: return null; - } + return switch (id) { + case 0 -> CONTROL; + case 1 -> SHIFT; + case 2 -> ALT; + default -> null; + }; } } diff --git a/src/main/java/chylex/bettercontrols/input/ToggleTracker.java b/src/main/java/chylex/bettercontrols/input/ToggleTracker.java index 6e39711..f497a76 100644 --- a/src/main/java/chylex/bettercontrols/input/ToggleTracker.java +++ b/src/main/java/chylex/bettercontrols/input/ToggleTracker.java @@ -1,5 +1,4 @@ package chylex.bettercontrols.input; -import chylex.bettercontrols.util.Key; import net.minecraft.client.KeyMapping; public class ToggleTracker { @@ -44,7 +43,7 @@ public class ToggleTracker { public boolean tick() { final boolean isHoldingReset = isResetKeyPressed(); - if (Key.isPressed(bindingToggle)) { + if (bindingToggle.isDown()) { if (!waitForRelease) { if (skipNextToggle) { skipNextToggle = false; @@ -79,7 +78,7 @@ public class ToggleTracker { } protected boolean isResetKeyPressed() { - return Key.isPressed(bindingReset); + return bindingReset.isDown(); } public void reset() { diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java index cf1d494..ff3b226 100644 --- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java +++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java @@ -9,7 +9,6 @@ import chylex.bettercontrols.mixin.AccessCameraFields; import chylex.bettercontrols.mixin.AccessClientPlayerFields; import chylex.bettercontrols.mixin.AccessPlayerFields; import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter; -import chylex.bettercontrols.util.Key; import net.minecraft.client.Camera; import net.minecraft.client.player.Input; import net.minecraft.client.player.LocalPlayer; @@ -97,7 +96,7 @@ public final class PlayerTicker { final int nextTemporarySprintTimer = temporarySprintTimer - 1; temporarySprintTimer = 0; - if (!Key.isPressed(KEY_SPRINT) && Key.isPressed(KEY_FORWARD)) { + if (!KEY_SPRINT.isDown() && KEY_FORWARD.isDown()) { temporarySprintTimer = nextTemporarySprintTimer; } else if (sprintMode == SprintMode.TAP_TO_TOGGLE) { @@ -114,7 +113,7 @@ public final class PlayerTicker { waitingForSprintKeyRelease = true; } else if (sprintMode == SprintMode.TAP_TO_TOGGLE) { - if (Key.isPressed(KEY_SPRINT)) { + if (KEY_SPRINT.isDown()) { if (!waitingForSprintKeyRelease) { waitingForSprintKeyRelease = true; stopSprintingAfterReleasingSprintKey = player.isSprinting(); @@ -129,12 +128,12 @@ public final class PlayerTicker { } } else if (sprintMode == SprintMode.HOLD) { - if (Key.isPressed(KEY_SPRINT)) { + if (KEY_SPRINT.isDown()) { stopSprintingAfterReleasingSprintKey = true; } } - if (stopSprintingAfterReleasingSprintKey && !Key.isPressed(KEY_SPRINT)) { + if (stopSprintingAfterReleasingSprintKey && !KEY_SPRINT.isDown()) { stopSprintingAfterReleasingSprintKey = false; waitingForSprintKeyRelease = false; player.setSprinting(false); @@ -157,7 +156,7 @@ public final class PlayerTicker { } if (FlightHelper.isFlyingCreativeOrSpectator(player)) { - final boolean boost = Key.isPressed(KEY_SPRINT); + final boolean boost = KEY_SPRINT.isDown(); final float flightSpeed = FlightHelper.getFlightSpeed(player, boost); final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player, boost); @@ -185,7 +184,7 @@ public final class PlayerTicker { if (cfg().resumeSprintingAfterHittingObstacle) { if (wasHittingObstacle != player.horizontalCollision) { if (!wasHittingObstacle) { - wasSprintingBeforeHittingObstacle = player.isSprinting() || Key.isPressed(KEY_SPRINT); + wasSprintingBeforeHittingObstacle = player.isSprinting() || KEY_SPRINT.isDown(); } else if (wasSprintingBeforeHittingObstacle) { wasSprintingBeforeHittingObstacle = false; @@ -254,7 +253,7 @@ public final class PlayerTicker { } if (player.isCreative()) { - if (Key.wasPressed(cfg().keyToggleFlight)) { + if (cfg().keyToggleFlight.consumeClick()) { final boolean isFlying = !player.getAbilities().flying; player.getAbilities().flying = isFlying; @@ -287,14 +286,14 @@ public final class PlayerTicker { } } - if (Key.wasPressed(cfg().keyResetAllToggles)) { + if (cfg().keyResetAllToggles.consumeClick()) { toggleSprint.reset(); toggleSneak.reset(); toggleWalkForward.reset(); toggleJump.reset(); } - if (Key.isPressed(cfg().keyOpenMenu)) { + if (cfg().keyOpenMenu.isDown()) { MINECRAFT.setScreen(new BetterControlsScreen(null)); } } diff --git a/src/main/java/chylex/bettercontrols/util/Key.java b/src/main/java/chylex/bettercontrols/util/Key.java deleted file mode 100644 index 0240f20..0000000 --- a/src/main/java/chylex/bettercontrols/util/Key.java +++ /dev/null @@ -1,46 +0,0 @@ -package chylex.bettercontrols.util; -import com.mojang.blaze3d.platform.InputConstants; -import net.minecraft.client.KeyMapping; -import net.minecraft.network.chat.Component; - -public final class Key { - private Key() {} - - public static final InputConstants.Key INVALID = InputConstants.UNKNOWN; - - public static boolean isUnbound(final KeyMapping binding) { - return binding.isUnbound(); - } - - public static boolean isPressed(final KeyMapping binding) { - return binding.isDown(); - } - - public static boolean wasPressed(final KeyMapping binding) { - return binding.consumeClick(); - } - - public static Component getBoundKeyText(final KeyMapping binding) { - return binding.getTranslatedKeyMessage(); - } - - public static void bind(final KeyMapping binding, final InputConstants.Key input) { - binding.setKey(input); - } - - public static String writeBinding(final KeyMapping binding) { - return binding.saveString(); - } - - public static void readBinding(final KeyMapping binding, final String serialized) { - bind(binding, InputConstants.getKey(serialized)); - } - - public static InputConstants.Key inputFromMouse(final int button) { - return InputConstants.Type.MOUSE.getOrCreate(button); - } - - public static InputConstants.Key inputFromKeyboard(final int keyCode, final int scanCode) { - return InputConstants.getKey(keyCode, scanCode); - } -} diff --git a/src/main/java/chylex/bettercontrols/util/LiteralText.java b/src/main/java/chylex/bettercontrols/util/LiteralText.java deleted file mode 100644 index 10f70c1..0000000 --- a/src/main/java/chylex/bettercontrols/util/LiteralText.java +++ /dev/null @@ -1,12 +0,0 @@ -package chylex.bettercontrols.util; -import net.minecraft.network.chat.TextComponent; - -public final class LiteralText extends TextComponent { - public static LiteralText text(final String text) { - return new LiteralText(text); - } - - public LiteralText(final String msg) { - super(msg); - } -} diff --git a/src/main/resources/bettercontrols.mixins.json b/src/main/resources/bettercontrols.mixins.json index 041af30..466efa4 100644 --- a/src/main/resources/bettercontrols.mixins.json +++ b/src/main/resources/bettercontrols.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "chylex.bettercontrols.mixin", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_16", "client": [ "AccessCameraFields", "AccessClientPlayerFields",