diff --git a/NeoForge/src/main/java/chylex/bettercontrols/BetterControlsMod.java b/NeoForge/src/main/java/chylex/bettercontrols/BetterControlsMod.java
index d8a1114..61b41eb 100644
--- a/NeoForge/src/main/java/chylex/bettercontrols/BetterControlsMod.java
+++ b/NeoForge/src/main/java/chylex/bettercontrols/BetterControlsMod.java
@@ -21,7 +21,7 @@ public final class BetterControlsMod {
 		}
 	}
 	
-	private static BetterControlsScreen createOptionsScreen(final ModContainer modContainer, @Nullable final Screen parentScreen) {
+	private static BetterControlsScreen createOptionsScreen(ModContainer modContainer, @Nullable Screen parentScreen) {
 		return new BetterControlsScreen(parentScreen);
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/BetterControlsCommon.java b/src/main/java/chylex/bettercontrols/BetterControlsCommon.java
index 5693dca..7f2e4a0 100644
--- a/src/main/java/chylex/bettercontrols/BetterControlsCommon.java
+++ b/src/main/java/chylex/bettercontrols/BetterControlsCommon.java
@@ -9,7 +9,7 @@ public final class BetterControlsCommon {
 		return config;
 	}
 	
-	static void setConfig(final BetterControlsConfig config) {
+	static void setConfig(BetterControlsConfig config) {
 		BetterControlsCommon.config = config;
 	}
 	
diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
index c9f3a8a..ffd8a65 100644
--- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
+++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
@@ -5,8 +5,8 @@ import chylex.bettercontrols.input.SprintMode;
 import java.nio.file.Path;
 
 public final class BetterControlsConfig {
-	public static BetterControlsConfig load(final Path path) {
-		final BetterControlsConfig cfg = ConfigSerializer.read(path);
+	public static BetterControlsConfig load(Path path) {
+		BetterControlsConfig cfg = ConfigSerializer.read(path);
 		cfg.path = path;
 		
 		if (cfg.wasMigrated) {
diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
index c07eb11..033eb5e 100644
--- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
+++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
@@ -30,8 +30,8 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 	private ConfigSerializer() {}
 	
 	@Override
-	public JsonElement serialize(final BetterControlsConfig cfg, final Type typeOfSrc, final JsonSerializationContext context) {
-		final JsonObject obj = new JsonObject();
+	public JsonElement serialize(BetterControlsConfig cfg, Type typeOfSrc, JsonSerializationContext context) {
+		JsonObject obj = new JsonObject();
 		
 		Json.writeKeyBinding(obj, "Sprint.KeyToggle", cfg.keyToggleSprint);
 		Json.setEnum(obj, "Sprint.Mode", cfg.sprintMode);
@@ -64,9 +64,9 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 	}
 	
 	@Override
-	public BetterControlsConfig deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
-		final BetterControlsConfig cfg = new BetterControlsConfig();
-		final JsonObject obj = json.getAsJsonObject();
+	public BetterControlsConfig deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+		BetterControlsConfig cfg = new BetterControlsConfig();
+		JsonObject obj = json.getAsJsonObject();
 		
 		if (obj.has("Sprint.TapToStop") && obj.get("Sprint.TapToStop").getAsBoolean()) {
 			cfg.sprintMode = SprintMode.TAP_TO_TOGGLE;
@@ -102,18 +102,18 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 		return cfg;
 	}
 	
-	private static float readHorizontalSpeedMultiplier(final JsonObject obj, final String key, final float defaultValue) {
+	private static float readHorizontalSpeedMultiplier(JsonObject obj, String key, float defaultValue) {
 		return Json.getFloat(obj, key, defaultValue, 0.25F, 8F);
 	}
 	
-	private static float readVerticalSpeedMultiplier(final JsonObject obj, final BetterControlsConfig cfg, final String newKey, final String legacyBoostKey, final float defaultValue) {
+	private static float readVerticalSpeedMultiplier(JsonObject obj, BetterControlsConfig cfg, String newKey, String legacyBoostKey, float defaultValue) {
 		if (obj.has(newKey)) {
 			return Json.getFloat(obj, newKey, defaultValue, 0.25F, 8F);
 		}
 		else if (obj.has(legacyBoostKey)) {
 			cfg.wasMigrated = true;
 			
-			final float value = 1F + Json.getFloat(obj, legacyBoostKey, 0F, 0F, 3F);
+			float value = 1F + Json.getFloat(obj, legacyBoostKey, 0F, 0F, 3F);
 			// 1.25x, 1.75x, 2.5x, and 3.5x are not supported
 			if (Mth.equal(value, 1.25F) || Mth.equal(value, 1.75F)) {
 				return 1.5F;
@@ -133,19 +133,19 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 		}
 	}
 	
-	static void write(final Path path, final BetterControlsConfig config) {
-		try (final JsonWriter writer = gson.newJsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))) {
+	static void write(Path path, BetterControlsConfig config) {
+		try (JsonWriter writer = gson.newJsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))) {
 			gson.getAdapter(BetterControlsConfig.class).write(writer, config);
-		} catch (final IOException e) {
+		} catch (IOException e) {
 			logger.error("Error saving BetterControls configuration file!", e);
 		}
 	}
 	
-	static BetterControlsConfig read(final Path path) {
-		try (final JsonReader jsonReader = new JsonReader(Files.newBufferedReader(path, StandardCharsets.UTF_8))) {
+	static BetterControlsConfig read(Path path) {
+		try (JsonReader jsonReader = new JsonReader(Files.newBufferedReader(path, StandardCharsets.UTF_8))) {
 			return gson.getAdapter(BetterControlsConfig.class).read(jsonReader);
-		} catch (final FileNotFoundException | NoSuchFileException ignored) {
-		} catch (final IOException e) {
+		} catch (FileNotFoundException | NoSuchFileException ignored) {
+		} catch (IOException e) {
 			logger.error("Error reading BetterControls configuration file!", e);
 		}
 		
diff --git a/src/main/java/chylex/bettercontrols/config/Json.java b/src/main/java/chylex/bettercontrols/config/Json.java
index 6f65b40..dd58697 100644
--- a/src/main/java/chylex/bettercontrols/config/Json.java
+++ b/src/main/java/chylex/bettercontrols/config/Json.java
@@ -8,40 +8,40 @@ import com.mojang.blaze3d.platform.InputConstants;
 final class Json {
 	private Json() {}
 	
-	static void setFloat(final JsonObject obj, final String key, final float value) {
+	static void setFloat(JsonObject obj, String key, float value) {
 		obj.addProperty(key, Float.valueOf(value));
 	}
 	
-	static float getFloat(final JsonObject obj, final String key, final float defaultValue, final float minValue, final float maxValue) {
-		final float value = obj.has(key) ? obj.get(key).getAsFloat() : defaultValue;
+	static float getFloat(JsonObject obj, String key, float defaultValue, float minValue, float maxValue) {
+		float value = obj.has(key) ? obj.get(key).getAsFloat() : defaultValue;
 		return Math.max(minValue, Math.min(maxValue, value));
 	}
 	
-	static void setBool(final JsonObject obj, final String key, final boolean value) {
+	static void setBool(JsonObject obj, String key, boolean value) {
 		obj.addProperty(key, Boolean.valueOf(value));
 	}
 	
-	static boolean getBool(final JsonObject obj, final String key, final boolean defaultValue) {
+	static boolean getBool(JsonObject obj, String key, boolean defaultValue) {
 		return obj.has(key) ? obj.get(key).getAsBoolean() : defaultValue;
 	}
 	
 	@SuppressWarnings("SameParameterValue")
-	static <T extends Enum<T>> void setEnum(final JsonObject obj, final String key, final T value) {
+	static <T extends Enum<T>> void setEnum(JsonObject obj, String key, T value) {
 		obj.addProperty(key, value.name());
 	}
 	
 	@SuppressWarnings("SameParameterValue")
-	static <T extends Enum<T>> T getEnum(final JsonObject obj, final String key, final T defaultValue, final Class<T> enumClass) {
+	static <T extends Enum<T>> T getEnum(JsonObject obj, String key, T defaultValue, Class<T> enumClass) {
 		if (!obj.has(key)) {
 			return defaultValue;
 		}
 		
-		final T[] constants = enumClass.getEnumConstants();
+		T[] constants = enumClass.getEnumConstants();
 		
 		if (constants != null) {
-			final String value = obj.get(key).getAsString();
+			String value = obj.get(key).getAsString();
 			
-			for (final T constant : constants) {
+			for (T constant : constants) {
 				if (constant.name().equalsIgnoreCase(value)) {
 					return constant;
 				}
@@ -54,7 +54,7 @@ final class Json {
 	private static final String KEY_SUFFIX = ".Key";
 	private static final String MOD_SUFFIX = ".Mod";
 	
-	static void writeKeyBinding(final JsonObject obj, final String key, final KeyBindingWithModifier keyBinding) {
+	static void writeKeyBinding(JsonObject obj, String key, KeyBindingWithModifier keyBinding) {
 		obj.addProperty(key + KEY_SUFFIX, keyBinding.saveString());
 		
 		if (keyBinding.getModifier() != null) {
@@ -62,11 +62,11 @@ final class Json {
 		}
 	}
 	
-	static void readKeyBinding(final JsonObject obj, final String key, final KeyBindingWithModifier keyBinding) {
+	static void readKeyBinding(JsonObject obj, String key, KeyBindingWithModifier keyBinding) {
 		if (obj.has(key + KEY_SUFFIX)) {
 			try {
 				keyBinding.setKey(InputConstants.getKey(obj.get(key + KEY_SUFFIX).getAsString()));
-			} catch (final IllegalArgumentException e) {
+			} catch (IllegalArgumentException e) {
 				e.printStackTrace(); // let's not crash if the config file has garbage, okay?
 			}
 		}
diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
index 7ff6b97..0012502 100644
--- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
+++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
@@ -34,7 +34,7 @@ import static chylex.bettercontrols.gui.elements.TextWidget.CENTER;
 import static net.minecraft.network.chat.Component.literal;
 
 public class BetterControlsScreen extends OptionsSubScreen {
-	private static Component text(final String text) {
+	private static Component text(String text) {
 		return literal(text);
 	}
 	
@@ -53,8 +53,8 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	
 	// Options
 	
-	private int generateSprintingOptions(int y, final List<GuiEventListener> elements) {
-		final BetterControlsConfig cfg = BetterControlsCommon.getConfig();
+	private int generateSprintingOptions(int y, List<GuiEventListener> elements) {
+		BetterControlsConfig cfg = BetterControlsCommon.getConfig();
 		
 		generateKeyBindingWithModifierRow(y, elements, text("Toggle Sprint"), cfg.keyToggleSprint);
 		y += ROW_HEIGHT;
@@ -71,8 +71,8 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		return y;
 	}
 	
-	private int generateSneakingOptions(int y, final List<GuiEventListener> elements) {
-		final BetterControlsConfig cfg = BetterControlsCommon.getConfig();
+	private int generateSneakingOptions(int y, List<GuiEventListener> elements) {
+		BetterControlsConfig cfg = BetterControlsCommon.getConfig();
 		
 		generateKeyBindingWithModifierRow(y, elements, text("Toggle Sneak"), cfg.keyToggleSneak);
 		y += ROW_HEIGHT;
@@ -83,10 +83,10 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		return y;
 	}
 	
-	private int generateFlightOptions(int y, final List<GuiEventListener> elements) {
-		final BetterControlsConfig cfg = BetterControlsCommon.getConfig();
+	private int generateFlightOptions(int y, List<GuiEventListener> elements) {
+		BetterControlsConfig cfg = BetterControlsCommon.getConfig();
 		
-		final ImmutableList<Option<Float>> flightSpeedOptions = ImmutableList.of(
+		ImmutableList<Option<Float>> flightSpeedOptions = ImmutableList.of(
 			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")),
@@ -144,8 +144,8 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		return y;
 	}
 	
-	private int generateMiscellaneousOptions(int y, final List<GuiEventListener> elements) {
-		final BetterControlsConfig cfg = BetterControlsCommon.getConfig();
+	private int generateMiscellaneousOptions(int y, List<GuiEventListener> elements) {
+		BetterControlsConfig cfg = BetterControlsCommon.getConfig();
 		
 		generateKeyBindingWithModifierRow(y, elements, text("Toggle Walk Forwards"), cfg.keyToggleWalkForward);
 		y += ROW_HEIGHT;
@@ -171,9 +171,9 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		new Option<>(ModifierKey.ALT, text("Alt"))
 	);
 	
-	private void generateKeyBindingWithModifierRow(final int y, final List<GuiEventListener> elements, final Component text, final KeyBindingWithModifier binding) {
-		final var modifierButton = Option.button(col4(2), y, COL4_W, text.plainCopy().append(" Modifier"), MODIFIER_OPTIONS, binding.getModifier(), binding::setModifier);
-		final var bindingButton = new KeyBindingWidget(col4(3), y, COL4_W, text, binding, this::startEditingKeyBinding);
+	private void generateKeyBindingWithModifierRow(int y, List<GuiEventListener> elements, Component text, KeyBindingWithModifier binding) {
+		var modifierButton = Option.button(col4(2), y, COL4_W, text.plainCopy().append(" Modifier"), MODIFIER_OPTIONS, binding.getModifier(), binding::setModifier);
+		var bindingButton = new KeyBindingWidget(col4(3), y, COL4_W, text, binding, this::startEditingKeyBinding);
 		bindingButton.linkButtonToBoundState(modifierButton);
 		
 		generateLeftSideText(y, elements, text);
@@ -182,12 +182,12 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		allKeyBindings.add(bindingButton);
 	}
 	
-	private static <T> void generateCycleOptionRow(final int y, final List<GuiEventListener> elements, final Component text, final List<Option<T>> options, final T initialValue, final Consumer<T> onValueChanged) {
+	private static <T> void generateCycleOptionRow(int y, List<GuiEventListener> elements, Component text, List<Option<T>> options, T initialValue, Consumer<T> onValueChanged) {
 		generateLeftSideText(y, elements, text);
 		elements.add(Option.button(col2(1), y, COL2_W, text, options, initialValue, onValueChanged));
 	}
 	
-	private static void generateBooleanOptionRow(final int y, final List<GuiEventListener> elements, final Component text, final boolean initialValue, final BooleanConsumer onValueChanged) {
+	private static void generateBooleanOptionRow(int y, List<GuiEventListener> elements, Component text, boolean initialValue, BooleanConsumer onValueChanged) {
 		generateLeftSideText(y, elements, text);
 		elements.add(CycleButton.onOffBuilder()
 			.displayOnlyValue()
@@ -195,7 +195,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 			.create(col2(1), y, COL2_W, 20, text, (btn, newValue) -> onValueChanged.accept(newValue.booleanValue())));
 	}
 	
-	private static void generateLeftSideText(final int y, final List<GuiEventListener> elements, final Component text) {
+	private static void generateLeftSideText(int y, List<GuiEventListener> elements, Component text) {
 		elements.add(new TextWidget(col2(0), y, COL2_W - TEXT_PADDING_RIGHT, text));
 	}
 	
@@ -206,7 +206,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	private final List<KeyBindingWidget> allKeyBindings = new ArrayList<>();
 	
 	@SuppressWarnings("DataFlowIssue")
-	public BetterControlsScreen(@Nullable final Screen parentScreen) {
+	public BetterControlsScreen(@Nullable Screen parentScreen) {
 		super(parentScreen, Minecraft.getInstance().options, TITLE);
 	}
 	
@@ -214,7 +214,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	protected void addContents() {
 		allKeyBindings.clear();
 		
-		final List<GuiEventListener> elements = new ArrayList<>();
+		List<GuiEventListener> elements = new ArrayList<>();
 		int y = 0;
 		
 		elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("Sprinting"), CENTER));
@@ -249,7 +249,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		BetterControlsCommon.getConfig().save();
 	}
 	
-	private void startEditingKeyBinding(final KeyBindingWidget widget) {
+	private void startEditingKeyBinding(KeyBindingWidget widget) {
 		if (editingKeyBinding != null) {
 			editingKeyBinding.stopEditing();
 		}
@@ -258,7 +258,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	}
 	
 	@Override
-	public boolean mouseClicked(final double mouseX, final double mouseY, final int button) {
+	public boolean mouseClicked(double mouseX, double mouseY, int button) {
 		if (editingKeyBinding != null) {
 			editingKeyBinding.bindAndStopEditing(InputConstants.Type.MOUSE.getOrCreate(button));
 			onKeyBindingEditingFinished();
@@ -270,7 +270,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	}
 	
 	@Override
-	public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) {
+	public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
 		if (editingKeyBinding != null) {
 			if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
 				editingKeyBinding.bindAndStopEditing(InputConstants.UNKNOWN);
@@ -291,7 +291,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		editingKeyBinding = null;
 		KeyMapping.resetMapping();
 		
-		for (final KeyBindingWidget widget : allKeyBindings) {
+		for (KeyBindingWidget widget : allKeyBindings) {
 			widget.updateKeyBindingText();
 		}
 	}
diff --git a/src/main/java/chylex/bettercontrols/gui/OptionListWidget.java b/src/main/java/chylex/bettercontrols/gui/OptionListWidget.java
index 7d605c0..d9fd160 100644
--- a/src/main/java/chylex/bettercontrols/gui/OptionListWidget.java
+++ b/src/main/java/chylex/bettercontrols/gui/OptionListWidget.java
@@ -25,19 +25,19 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
 	public static final int COL2_W = (ROW_WIDTH / 2) - ROW_HORIZONTAL_PADDING;
 	public static final int COL4_W = (ROW_WIDTH / 4) - ROW_HORIZONTAL_PADDING;
 	
-	public static int col2(final int column) {
+	public static int col2(int column) {
 		return (column * ROW_WIDTH) / 2;
 	}
 	
-	public static int col4(final int column) {
+	public static int col4(int column) {
 		return (column * ROW_WIDTH) / 4;
 	}
 	
-	private static Offset getElementOffset(final GuiEventListener element) {
-		if (element instanceof final OptionWidget widget) {
+	private static Offset getElementOffset(GuiEventListener element) {
+		if (element instanceof OptionWidget widget) {
 			return new Offset(widget.getX(), widget.getY());
 		}
-		else if (element instanceof final AbstractWidget widget) {
+		else if (element instanceof AbstractWidget widget) {
 			return new Offset(widget.getX(), widget.getY());
 		}
 		else {
@@ -54,7 +54,7 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
 	
 	private record Offset(int x, int y) {}
 	
-	public OptionListWidget(final int width, final int height, final int top, final int innerHeight, final List<GuiEventListener> widgets) {
+	public OptionListWidget(int width, int height, int top, int innerHeight, List<GuiEventListener> widgets) {
 		super(Minecraft.getInstance(), width, height, top, innerHeight);
 		addEntry(new Entry(widgets));
 	}
@@ -75,7 +75,7 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
 	}
 	
 	@Override
-	public boolean mouseScrolled(final double x, final double y, final double xAmount, final double yAmount) {
+	public boolean mouseScrolled(double x, double y, double xAmount, double yAmount) {
 		setScrollAmount(scrollAmount() - yAmount * SCROLL_MULTIPLIER);
 		return true;
 	}
@@ -85,7 +85,7 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
 		private final List<NarratableEntry> narratables;
 		private final Map<GuiEventListener, Offset> offsets;
 		
-		public Entry(final List<GuiEventListener> elements) {
+		public Entry(List<GuiEventListener> elements) {
 			this.elements = new ArrayList<>(elements);
 			this.narratables = elements.stream().filter(e -> e instanceof NarratableEntry).map(e -> (NarratableEntry)e).collect(Collectors.toList());
 			this.offsets = elements.stream().collect(Collectors.toMap(Function.identity(), OptionListWidget::getElementOffset));
@@ -104,20 +104,20 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
 		}
 		
 		@Override
-		public void render(final @NotNull GuiGraphics graphics, final int index, final int y, final int x, final int entryWidth, final int entryHeight, final int mouseX, final int mouseY, final boolean hovered, final float tickDelta) {
-			for (final GuiEventListener element : elements) {
-				final Offset offset = offsets.get(element);
+		public void render(@NotNull GuiGraphics graphics, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
+			for (GuiEventListener element : elements) {
+				Offset offset = offsets.get(element);
 				
-				if (element instanceof final AbstractWidget widget) {
+				if (element instanceof AbstractWidget widget) {
 					widget.setX(x + offset.x);
 					widget.setY(y + offset.y);
 				}
-				else if (element instanceof final OptionWidget widget) {
+				else if (element instanceof OptionWidget widget) {
 					widget.setX(x + offset.x);
 					widget.setY(y + offset.y);
 				}
 				
-				if (element instanceof final Renderable renderable) {
+				if (element instanceof Renderable renderable) {
 					renderable.render(graphics, mouseX, mouseY, tickDelta);
 				}
 			}
diff --git a/src/main/java/chylex/bettercontrols/gui/elements/DiscreteValueSliderWidget.java b/src/main/java/chylex/bettercontrols/gui/elements/DiscreteValueSliderWidget.java
index 5a1eee9..fca8b53 100644
--- a/src/main/java/chylex/bettercontrols/gui/elements/DiscreteValueSliderWidget.java
+++ b/src/main/java/chylex/bettercontrols/gui/elements/DiscreteValueSliderWidget.java
@@ -14,7 +14,7 @@ public final class DiscreteValueSliderWidget<T> extends AbstractSliderButton {
 	private final Consumer<T> onChanged;
 	private T selectedValue;
 	
-	public DiscreteValueSliderWidget(final int x, final int y, final int width, final int height, final Component narration, final ImmutableList<Option<T>> options, final T selectedValue, final Consumer<T> onChanged) {
+	public DiscreteValueSliderWidget(int x, int y, int width, int height, Component narration, ImmutableList<Option<T>> options, T selectedValue, Consumer<T> onChanged) {
 		super(x, y, width, height, Option.find(options, selectedValue).text(), options.indexOf(Option.find(options, selectedValue)) / (options.size() - 1.0));
 		this.narration = narration;
 		this.options = options;
@@ -22,7 +22,7 @@ public final class DiscreteValueSliderWidget<T> extends AbstractSliderButton {
 		this.onChanged = onChanged;
 	}
 	
-	public DiscreteValueSliderWidget(final int x, final int y, final int width, final Component narration, final ImmutableList<Option<T>> options, final T selectedValue, final Consumer<T> onChanged) {
+	public DiscreteValueSliderWidget(int x, int y, int width, Component narration, ImmutableList<Option<T>> options, T selectedValue, Consumer<T> onChanged) {
 		this(x, y, width, 20, narration, options, selectedValue, onChanged);
 	}
 	
@@ -37,7 +37,7 @@ public final class DiscreteValueSliderWidget<T> extends AbstractSliderButton {
 	
 	@Override
 	protected void applyValue() {
-		final T newSelectedValue = getSelectedOption().value();
+		T newSelectedValue = getSelectedOption().value();
 		
 		if (selectedValue != newSelectedValue) {
 			selectedValue = newSelectedValue;
diff --git a/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java b/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java
index 94726bf..2c38060 100644
--- a/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java
+++ b/src/main/java/chylex/bettercontrols/gui/elements/KeyBindingWidget.java
@@ -22,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 Component bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) {
+	public KeyBindingWidget(int x, int y, int width, int height, Component bindingName, KeyMapping binding, Consumer<KeyBindingWidget> onEditingStarted) {
 		super(x, y, width, height, Component.empty(), btn -> {}, DEFAULT_NARRATION);
 		this.binding = binding;
 		this.bindingName = bindingName;
@@ -30,11 +30,11 @@ public final class KeyBindingWidget extends Button {
 		updateKeyBindingText();
 	}
 	
-	public KeyBindingWidget(final int x, final int y, final int width, final Component bindingName, final KeyMapping binding, final Consumer<KeyBindingWidget> onEditingStarted) {
+	public KeyBindingWidget(int x, int y, int width, Component bindingName, KeyMapping binding, Consumer<KeyBindingWidget> onEditingStarted) {
 		this(x, y, width, 20, bindingName, binding, onEditingStarted);
 	}
 	
-	public void linkButtonToBoundState(final AbstractButton button) {
+	public void linkButtonToBoundState(AbstractButton button) {
 		linkedButtons.add(button);
 		button.active = !binding.isUnbound();
 	}
@@ -52,11 +52,11 @@ public final class KeyBindingWidget extends Button {
 		updateKeyBindingText();
 	}
 	
-	public void bindAndStopEditing(final InputConstants.Key key) {
+	public void bindAndStopEditing(InputConstants.Key key) {
 		binding.setKey(key);
 		stopEditing();
 		
-		for (final AbstractButton button : linkedButtons) {
+		for (AbstractButton button : linkedButtons) {
 			button.active = !binding.isUnbound();
 		}
 	}
@@ -70,7 +70,7 @@ public final class KeyBindingWidget extends Button {
 		boolean hasConflict = false;
 		
 		if (!binding.isUnbound()) {
-			for (final KeyMapping other : Minecraft.getInstance().options.keyMappings) {
+			for (KeyMapping other : Minecraft.getInstance().options.keyMappings) {
 				if (binding != other && binding.same(other)) {
 					hasConflict = true;
 					break;
diff --git a/src/main/java/chylex/bettercontrols/gui/elements/Option.java b/src/main/java/chylex/bettercontrols/gui/elements/Option.java
index 5363c3e..2ef9125 100644
--- a/src/main/java/chylex/bettercontrols/gui/elements/Option.java
+++ b/src/main/java/chylex/bettercontrols/gui/elements/Option.java
@@ -7,11 +7,11 @@ import java.util.Objects;
 import java.util.function.Consumer;
 
 public record Option<T>(T value, Component text) {
-	public static <T> Option<T> find(final List<Option<T>> options, final T value) {
+	public static <T> Option<T> find(List<Option<T>> options, T value) {
 		return options.stream().filter(it -> Objects.equals(it.value, value)).findFirst().orElseGet(() -> options.get(0));
 	}
 	
-	public static <T> CycleButton<Option<T>> button(final int x, final int y, final int width, final Component text, final List<Option<T>> options, final T initialValue, final Consumer<T> onValueChanged) {
+	public static <T> CycleButton<Option<T>> button(int x, int y, int width, Component text, List<Option<T>> options, T initialValue, Consumer<T> onValueChanged) {
 		return CycleButton.<Option<T>>builder(Option::text)
 			.displayOnlyValue()
 			.withValues(options)
diff --git a/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java b/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java
index 08fa14a..71e2871 100644
--- a/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java
+++ b/src/main/java/chylex/bettercontrols/gui/elements/TextWidget.java
@@ -22,7 +22,7 @@ public final class TextWidget implements OptionWidget {
 	private final int height;
 	private final int align;
 	
-	public TextWidget(final int x, final int y, final int width, final int height, final Component text, final int align) {
+	public TextWidget(int x, int y, int width, int height, Component text, int align) {
 		this.x = x;
 		this.y = y;
 		this.width = width;
@@ -31,11 +31,11 @@ public final class TextWidget implements OptionWidget {
 		this.align = align;
 	}
 	
-	public TextWidget(final int x, final int y, final int width, final Component text, final int align) {
+	public TextWidget(int x, int y, int width, Component text, int align) {
 		this(x, y, width, 20, text, align);
 	}
 	
-	public TextWidget(final int x, final int y, final int width, final Component text) {
+	public TextWidget(int x, int y, int width, Component text) {
 		this(x, y, width, 20, text, LEFT);
 	}
 	
@@ -50,17 +50,17 @@ public final class TextWidget implements OptionWidget {
 	}
 	
 	@Override
-	public void setX(final int x) {
+	public void setX(int x) {
 		this.x = x;
 	}
 	
 	@Override
-	public void setY(final int y) {
+	public void setY(int y) {
 		this.y = y;
 	}
 	
 	@Override
-	public void setFocused(final boolean focused) {}
+	public void setFocused(boolean focused) {}
 	
 	@Override
 	public boolean isFocused() {
@@ -68,13 +68,13 @@ public final class TextWidget implements OptionWidget {
 	}
 	
 	@Override
-	public void render(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, final float delta) {
-		final Font textRenderer = Minecraft.getInstance().font;
-		final List<FormattedCharSequence> lines = textRenderer.split(text, width);
+	public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float delta) {
+		Font textRenderer = Minecraft.getInstance().font;
+		List<FormattedCharSequence> lines = textRenderer.split(text, width);
 		final int lineHeight = textRenderer.lineHeight + 1;
 		
-		final int finalX = align == CENTER ? x + (width / 2) - (lines.stream().mapToInt(textRenderer::width).max().orElse(0) / 2) : x;
-		final int finalY = y + (height / 2) - (lineHeight * lines.size() / 2) + 1;
+		int finalX = align == CENTER ? x + (width / 2) - (lines.stream().mapToInt(textRenderer::width).max().orElse(0) / 2) : x;
+		int finalY = y + (height / 2) - (lineHeight * lines.size() / 2) + 1;
 		
 		for (int i = 0; i < lines.size(); i++) {
 			graphics.drawString(textRenderer, lines.get(i), finalX, finalY + (i * lineHeight), WHITE);
diff --git a/src/main/java/chylex/bettercontrols/input/KeyBindingWithModifier.java b/src/main/java/chylex/bettercontrols/input/KeyBindingWithModifier.java
index 6084cb0..5549038 100644
--- a/src/main/java/chylex/bettercontrols/input/KeyBindingWithModifier.java
+++ b/src/main/java/chylex/bettercontrols/input/KeyBindingWithModifier.java
@@ -10,11 +10,11 @@ public class KeyBindingWithModifier extends KeyMapping {
 	@Nullable
 	private ModifierKey modifier = null;
 	
-	public KeyBindingWithModifier(final String translationKey) {
+	public KeyBindingWithModifier(String translationKey) {
 		super(translationKey, Type.KEYSYM, -1, CATEGORY);
 	}
 	
-	public void setModifier(@Nullable final ModifierKey modifier) {
+	public void setModifier(@Nullable ModifierKey modifier) {
 		this.modifier = modifier;
 	}
 	
diff --git a/src/main/java/chylex/bettercontrols/input/ModifierKey.java b/src/main/java/chylex/bettercontrols/input/ModifierKey.java
index 28df69d..e329253 100644
--- a/src/main/java/chylex/bettercontrols/input/ModifierKey.java
+++ b/src/main/java/chylex/bettercontrols/input/ModifierKey.java
@@ -26,13 +26,13 @@ public enum ModifierKey {
 	
 	public final int id;
 	
-	ModifierKey(final int id) {
+	ModifierKey(int id) {
 		this.id = id;
 	}
 	
 	public abstract boolean isPressed();
 	
-	public static ModifierKey getById(final int id) {
+	public static ModifierKey getById(int id) {
 		return switch (id) {
 			case 0 -> CONTROL;
 			case 1 -> SHIFT;
diff --git a/src/main/java/chylex/bettercontrols/input/ToggleTracker.java b/src/main/java/chylex/bettercontrols/input/ToggleTracker.java
index 81c531b..7a4e389 100644
--- a/src/main/java/chylex/bettercontrols/input/ToggleTracker.java
+++ b/src/main/java/chylex/bettercontrols/input/ToggleTracker.java
@@ -12,7 +12,7 @@ public class ToggleTracker {
 	private boolean hasToggledWhileHoldingReset;
 	private boolean skipNextToggle;
 	
-	public ToggleTracker(final KeyMapping bindingToggle, final KeyMapping bindingReset) {
+	public ToggleTracker(KeyMapping bindingToggle, KeyMapping bindingReset) {
 		this.bindingToggle = bindingToggle;
 		this.bindingReset = bindingReset;
 	}
@@ -42,7 +42,7 @@ public class ToggleTracker {
 	 */
 	
 	public boolean tick() {
-		final boolean isHoldingReset = isResetKeyPressed();
+		boolean isHoldingReset = isResetKeyPressed();
 		
 		if (bindingToggle.isDown()) {
 			if (!waitForRelease) {
diff --git a/src/main/java/chylex/bettercontrols/input/ToggleTrackerForStickyKey.java b/src/main/java/chylex/bettercontrols/input/ToggleTrackerForStickyKey.java
index 0ba5f64..2446fed 100644
--- a/src/main/java/chylex/bettercontrols/input/ToggleTrackerForStickyKey.java
+++ b/src/main/java/chylex/bettercontrols/input/ToggleTrackerForStickyKey.java
@@ -9,13 +9,13 @@ import java.util.Set;
 public final class ToggleTrackerForStickyKey extends ToggleTracker {
 	private static final Set<KeyMapping> enabledOverrides = new HashSet<>();
 	
-	public static boolean isOverrideEnabled(final KeyMapping binding) {
+	public static boolean isOverrideEnabled(KeyMapping binding) {
 		return enabledOverrides.contains(binding);
 	}
 	
 	private final BooleanConsumer setToggleState;
 	
-	public ToggleTrackerForStickyKey(final KeyMapping bindingToggle, final KeyMapping bindingStickyReset, final BooleanConsumer setToggleState) {
+	public ToggleTrackerForStickyKey(KeyMapping bindingToggle, KeyMapping bindingStickyReset, BooleanConsumer setToggleState) {
 		super(bindingToggle, bindingStickyReset);
 		this.setToggleState = setToggleState;
 		this.setToggleState.accept(false);
@@ -24,7 +24,7 @@ public final class ToggleTrackerForStickyKey extends ToggleTracker {
 	
 	@Override
 	public boolean tick() {
-		final boolean isToggled = super.tick();
+		boolean isToggled = super.tick();
 		setToggleState.accept(isToggled);
 		return isToggled;
 	}
diff --git a/src/main/java/chylex/bettercontrols/mixin/AccessStickyKeyBindingStateGetter.java b/src/main/java/chylex/bettercontrols/mixin/AccessStickyKeyBindingStateGetter.java
index 84d0574..8383aaf 100644
--- a/src/main/java/chylex/bettercontrols/mixin/AccessStickyKeyBindingStateGetter.java
+++ b/src/main/java/chylex/bettercontrols/mixin/AccessStickyKeyBindingStateGetter.java
@@ -13,5 +13,5 @@ public interface AccessStickyKeyBindingStateGetter {
 	
 	@Accessor
 	@Mutable
-	void setNeedsToggle(final BooleanSupplier toggleGetter);
+	void setNeedsToggle(BooleanSupplier toggleGetter);
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
index fd81d62..a93d825 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
@@ -13,8 +13,8 @@ public abstract class HookClientPlayerFOV {
 		method = "getFieldOfViewModifier",
 		at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Abilities;getWalkingSpeed()F")
 	)
-	private float overrideWalkingSpeed(final float walkingSpeed) {
-		final AbstractClientPlayer me = (AbstractClientPlayer)(Object)this;
+	private float overrideWalkingSpeed(float walkingSpeed) {
+		AbstractClientPlayer me = (AbstractClientPlayer)(Object)this;
 		
 		if (me instanceof LocalPlayer localPlayer && PlayerTicker.get(localPlayer).shouldResetFOV(localPlayer)) {
 			return 0F;
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerInputTick.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerInputTick.java
index 67621a7..bdbf1de 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerInputTick.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerInputTick.java
@@ -11,14 +11,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 import static org.spongepowered.asm.mixin.injection.At.Shift.AFTER;
 
 @Mixin(KeyboardInput.class)
-@SuppressWarnings("UnreachableCode")
+@SuppressWarnings({ "MethodMayBeStatic", "UnreachableCode" })
 public abstract class HookClientPlayerInputTick {
 	@Inject(
 		method = "tick",
 		at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/KeyboardInput;keyPresses:Lnet/minecraft/world/entity/player/Input;", ordinal = 0, shift = AFTER)
 	)
-	private void afterInputTick(final CallbackInfo info) {
-		final LocalPlayer player = Minecraft.getInstance().player;
+	private void afterInputTick(CallbackInfo info) {
+		LocalPlayer player = Minecraft.getInstance().player;
 		
 		if (player != null) {
 			PlayerTicker.get(player).afterKeyboardInputAssigned(player);
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerTick.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerTick.java
index ae7dba6..d856fd1 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerTick.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerTick.java
@@ -14,28 +14,28 @@ import static org.spongepowered.asm.mixin.injection.At.Shift.AFTER;
 @Mixin(LocalPlayer.class)
 @SuppressWarnings("UnreachableCode")
 public abstract class HookClientPlayerTick extends AbstractClientPlayer {
-	protected HookClientPlayerTick(final ClientLevel world, final GameProfile profile) {
+	protected HookClientPlayerTick(ClientLevel world, GameProfile profile) {
 		super(world, profile);
 	}
 	
 	@Inject(method = "aiStep()V", at = @At("HEAD"))
-	private void atHead(final CallbackInfo info) {
+	private void atHead(CallbackInfo info) {
 		@SuppressWarnings("ConstantConditions")
-		final LocalPlayer player = (LocalPlayer)(Object)this;
+		LocalPlayer player = (LocalPlayer)(Object)this;
 		PlayerTicker.get(player).atHead(player);
 	}
 	
 	@Inject(method = "aiStep()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/ClientInput;tick()V", ordinal = 0, shift = AFTER))
-	private void afterInputTick(final CallbackInfo info) {
+	private void afterInputTick(CallbackInfo info) {
 		@SuppressWarnings("ConstantConditions")
-		final LocalPlayer player = (LocalPlayer)(Object)this;
+		LocalPlayer player = (LocalPlayer)(Object)this;
 		PlayerTicker.get(player).afterInputTick(player);
 	}
 	
 	@Inject(method = "aiStep()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;aiStep()V", ordinal = 0, shift = AFTER))
-	private void afterSuperCall(final CallbackInfo info) {
+	private void afterSuperCall(CallbackInfo info) {
 		@SuppressWarnings("ConstantConditions")
-		final LocalPlayer player = (LocalPlayer)(Object)this;
+		LocalPlayer player = (LocalPlayer)(Object)this;
 		PlayerTicker.get(player).afterSuperCall(player);
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
index 3d5e010..3f32b34 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
@@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.Slice;
 @Mixin(LocalPlayer.class)
 @SuppressWarnings({ "SameReturnValue", "UnreachableCode" })
 public abstract class HookClientPlayerVerticalFlightSpeed extends LivingEntity {
-	protected HookClientPlayerVerticalFlightSpeed(final EntityType<? extends LivingEntity> type, final Level world) {
+	protected HookClientPlayerVerticalFlightSpeed(EntityType<? extends LivingEntity> type, Level world) {
 		super(type, world);
 	}
 	
@@ -25,9 +25,9 @@ public abstract class HookClientPlayerVerticalFlightSpeed extends LivingEntity {
 			to = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V")
 		)
 	)
-	private float modifyVerticalFlightSpeed(final float flyingSpeed) {
+	private float modifyVerticalFlightSpeed(float flyingSpeed) {
 		@SuppressWarnings("ConstantConditions")
-		final LocalPlayer me = (LocalPlayer)(Object)this;
+		LocalPlayer me = (LocalPlayer)(Object)this;
 		return flyingSpeed * FlightHelper.getVerticalSpeedMultiplier(me);
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
index b7d008a..ba79a95 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
@@ -16,12 +16,12 @@ import org.spongepowered.asm.mixin.injection.At;
 @Mixin(KeyBindsList.class)
 @SuppressWarnings("MethodMayBeStatic")
 public abstract class HookControlsListWidget extends ContainerObjectSelectionList<Entry> {
-	public HookControlsListWidget(final Minecraft client, final int width, final int height, final int top, final int itemHeight) {
+	public HookControlsListWidget(Minecraft client, int width, int height, int top, int itemHeight) {
 		super(client, width, height, top, itemHeight);
 	}
 	
 	@WrapOperation(method = "<init>", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Options;keyMappings:[Lnet/minecraft/client/KeyMapping;"))
-	private KeyMapping[] excludeOwnKeyBindings(final Options options, final Operation<KeyMapping[]> operation) {
+	private KeyMapping[] excludeOwnKeyBindings(Options options, Operation<KeyMapping[]> operation) {
 		return ArrayUtils.removeElements(operation.call(options), BetterControlsCommon.getConfig().getAllKeyBindings());
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
index e0a5922..1ad5890 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
@@ -19,22 +19,22 @@ import java.util.List;
 @Mixin(ControlsScreen.class)
 @SuppressWarnings("UnreachableCode")
 public abstract class HookControlsScreen extends OptionsSubScreen {
-	public HookControlsScreen(final Screen parentScreen, final Options options, final Component title) {
+	public HookControlsScreen(Screen parentScreen, Options options, Component title) {
 		super(parentScreen, options, title);
 	}
 	
 	@Inject(method = "addOptions", at = @At("RETURN"))
-	public void afterAddOptions(final CallbackInfo ci) {
+	public void afterAddOptions(CallbackInfo ci) {
 		if (list != null) {
 			@SuppressWarnings("ConstantConditions")
-			final ControlsScreen screen = (ControlsScreen)(Object)this;
-			final MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("...");
+			ControlsScreen screen = (ControlsScreen)(Object)this;
+			MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("...");
 			list.addSmall(List.of(Button.builder(buttonTitle, btn -> showOptionsScreen(screen)).build()));
 		}
 	}
 	
 	@Unique
-	private static void showOptionsScreen(final ControlsScreen screen) {
+	private static void showOptionsScreen(ControlsScreen screen) {
 		Minecraft.getInstance().setScreen(new BetterControlsScreen(screen));
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
index 8a3dce1..13fb5ce 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
@@ -26,12 +26,12 @@ public abstract class HookLoadGameOptions {
 	public KeyMapping[] keyMappings;
 	
 	@Inject(method = "load()V", at = @At("HEAD"))
-	private void load(final CallbackInfo info) {
+	private void load(CallbackInfo info) {
 		if (hasLoaded) {
 			return;
 		}
 		
-		final BetterControlsConfig config = BetterControlsCommon.getConfig();
+		BetterControlsConfig config = BetterControlsCommon.getConfig();
 		if (config == null) {
 			return;
 		}
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java b/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
index 73d2643..0a882f6 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
@@ -15,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.Slice;
 @Mixin(Player.class)
 @SuppressWarnings({ "SameReturnValue", "UnreachableCode" })
 public abstract class HookPlayerHorizontalFlightSpeed extends LivingEntity {
-	protected HookPlayerHorizontalFlightSpeed(final EntityType<? extends LivingEntity> type, final Level world) {
+	protected HookPlayerHorizontalFlightSpeed(EntityType<? extends LivingEntity> type, Level world) {
 		super(type, world);
 	}
 	
@@ -28,9 +28,9 @@ public abstract class HookPlayerHorizontalFlightSpeed extends LivingEntity {
 			to = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Abilities;getFlyingSpeed()F")
 		)
 	)
-	private boolean disableVanillaSprintBoost(final boolean isSprinting) {
+	private boolean disableVanillaSprintBoost(boolean isSprinting) {
 		@SuppressWarnings("ConstantConditions")
-		final Player me = (Player)(Object)this;
+		Player me = (Player)(Object)this;
 		
 		if (me instanceof LocalPlayer) {
 			return false;
@@ -41,11 +41,11 @@ public abstract class HookPlayerHorizontalFlightSpeed extends LivingEntity {
 	}
 	
 	@ModifyReturnValue(method = "getFlyingSpeed", at = @At("RETURN"))
-	private float modifyHorizontalFlyingSpeed(final float flyingSpeed) {
+	private float modifyHorizontalFlyingSpeed(float flyingSpeed) {
 		@SuppressWarnings("ConstantConditions")
-		final Player me = (Player)(Object)this;
+		Player me = (Player)(Object)this;
 		
-		if (me instanceof final LocalPlayer localPlayer && localPlayer.getAbilities().flying) {
+		if (me instanceof LocalPlayer localPlayer && localPlayer.getAbilities().flying) {
 			return flyingSpeed * FlightHelper.getHorizontalSpeedMultiplier(localPlayer);
 		}
 		else {
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookStickyKeyBindingState.java b/src/main/java/chylex/bettercontrols/mixin/HookStickyKeyBindingState.java
index c840f15..7974ef5 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookStickyKeyBindingState.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookStickyKeyBindingState.java
@@ -17,12 +17,12 @@ public abstract class HookStickyKeyBindingState extends KeyMapping {
 	@Final
 	private BooleanSupplier needsToggle;
 	
-	public HookStickyKeyBindingState(final String translationKey, final int code, final String category) {
+	public HookStickyKeyBindingState(String translationKey, int code, String category) {
 		super(translationKey, code, category);
 	}
 	
 	@Inject(method = "setDown", at = @At("HEAD"), cancellable = true)
-	public void setPressed(final boolean pressed, final CallbackInfo info) {
+	public void setPressed(boolean pressed, CallbackInfo info) {
 		if (ToggleTrackerForStickyKey.isOverrideEnabled(this)) {
 			((AccessKeyBindingFields)this).setPressedField(pressed);
 			info.cancel();
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookToggleOptionButtons.java b/src/main/java/chylex/bettercontrols/mixin/HookToggleOptionButtons.java
index 8be5122..ea07bd5 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookToggleOptionButtons.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookToggleOptionButtons.java
@@ -13,9 +13,9 @@ import java.util.function.Consumer;
 @SuppressWarnings("UnreachableCode")
 public abstract class HookToggleOptionButtons {
 	@Inject(method = "createButton(Lnet/minecraft/client/Options;IIILjava/util/function/Consumer;)Lnet/minecraft/client/gui/components/AbstractWidget;", at = @At("RETURN"))
-	private <T> void disableToggleOptions(final Options options, final int x, final int y, final int width, final Consumer<T> callback, final CallbackInfoReturnable<AbstractWidget> cir) {
+	private <T> void disableToggleOptions(Options options, int x, int y, int width, Consumer<T> callback, CallbackInfoReturnable<AbstractWidget> cir) {
 		@SuppressWarnings("ConstantConditions")
-		final OptionInstance<?> me = (OptionInstance<?>)(Object)this;
+		OptionInstance<?> me = (OptionInstance<?>)(Object)this;
 		
 		if (me == options.toggleCrouch() || me == options.toggleSprint()) {
 			cir.getReturnValue().active = false;
diff --git a/src/main/java/chylex/bettercontrols/player/FlightHelper.java b/src/main/java/chylex/bettercontrols/player/FlightHelper.java
index 6905b03..9b2b3df 100644
--- a/src/main/java/chylex/bettercontrols/player/FlightHelper.java
+++ b/src/main/java/chylex/bettercontrols/player/FlightHelper.java
@@ -19,15 +19,15 @@ public final class FlightHelper {
 		return BetterControlsCommon.getConfig();
 	}
 	
-	static boolean isFlyingCreativeOrSpectator(final LocalPlayer player) {
+	static boolean isFlyingCreativeOrSpectator(LocalPlayer player) {
 		return player.getAbilities().flying && (player.isCreative() || player.isSpectator());
 	}
 	
-	static boolean shouldFlyOnGround(final LocalPlayer player) {
+	static boolean shouldFlyOnGround(LocalPlayer player) {
 		return cfg().flyOnGroundInCreative && player.isCreative() && player.getAbilities().flying;
 	}
 	
-	public static float getHorizontalSpeedMultiplier(final LocalPlayer player) {
+	public static float getHorizontalSpeedMultiplier(LocalPlayer player) {
 		if (player.isCreative()) {
 			return isSprinting() ? cfg().flightHorizontalSpeedMpCreativeSprinting : cfg().flightHorizontalSpeedMpCreativeDefault;
 		}
@@ -39,7 +39,7 @@ public final class FlightHelper {
 		}
 	}
 	
-	public static float getVerticalSpeedMultiplier(final LocalPlayer player) {
+	public static float getVerticalSpeedMultiplier(LocalPlayer player) {
 		if (player.isCreative()) {
 			return isSprinting() ? cfg().flightVerticalSpeedMpCreativeSprinting : cfg().flightVerticalSpeedMpCreativeDefault;
 		}
diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
index b82999c..40838c2 100644
--- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
+++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
@@ -31,7 +31,7 @@ public final class PlayerTicker {
 	
 	private static PlayerTicker ticker = new PlayerTicker(null);
 	
-	public static PlayerTicker get(final LocalPlayer player) {
+	public static PlayerTicker get(LocalPlayer player) {
 		if (ticker.ref.get() != player) {
 			ticker = new PlayerTicker(player);
 		}
@@ -45,7 +45,7 @@ public final class PlayerTicker {
 	
 	private final WeakReference<LocalPlayer> ref;
 	
-	private PlayerTicker(final LocalPlayer player) {
+	private PlayerTicker(LocalPlayer player) {
 		this.ref = new WeakReference<>(player);
 		setup();
 	}
@@ -69,17 +69,17 @@ public final class PlayerTicker {
 	private int temporaryFlyOnGroundTimer = 0;
 	
 	private void setup() {
-		final AccessStickyKeyBindingStateGetter sprint = (AccessStickyKeyBindingStateGetter)KEY_SPRINT;
+		AccessStickyKeyBindingStateGetter sprint = (AccessStickyKeyBindingStateGetter)KEY_SPRINT;
 		BooleanSupplier getter = sprint.getNeedsToggle();
 		
-		if (getter instanceof final SprintPressGetter g) {
+		if (getter instanceof SprintPressGetter g) {
 			getter = g.wrapped();
 		}
 		
 		sprint.setNeedsToggle(new SprintPressGetter(getter, () -> temporarySprintTimer > 0));
 	}
 	
-	public void atHead(final LocalPlayer player) {
+	public void atHead(LocalPlayer player) {
 		if (FlightHelper.shouldFlyOnGround(player)) {
 			player.setOnGround(false);
 		}
@@ -92,15 +92,15 @@ public final class PlayerTicker {
 			((AccessPlayerFields)player).setJumpTriggerTime(0);
 		}
 		
-		final SprintMode sprintMode = cfg().sprintMode;
-		final boolean wasSprintToggled = Boolean.TRUE.equals(OPTIONS.toggleSprint().get());
-		final boolean isSprintToggled = toggleSprint.tick();
+		SprintMode sprintMode = cfg().sprintMode;
+		boolean wasSprintToggled = Boolean.TRUE.equals(OPTIONS.toggleSprint().get());
+		boolean isSprintToggled = toggleSprint.tick();
 		
 		if (temporarySprintTimer > 0) {
 			stopSprintingAfterReleasingSprintKey = false;
 			waitingForSprintKeyRelease = false;
 			
-			final int nextTemporarySprintTimer = temporarySprintTimer - 1;
+			int nextTemporarySprintTimer = temporarySprintTimer - 1;
 			temporarySprintTimer = 0;
 			
 			if (!KEY_SPRINT.isDown() && KEY_FORWARD.isDown()) {
@@ -149,9 +149,9 @@ public final class PlayerTicker {
 		toggleSneak.tick();
 	}
 	
-	public void afterKeyboardInputAssigned(final LocalPlayer player) {
+	public void afterKeyboardInputAssigned(LocalPlayer player) {
 		if (MINECRAFT.screen == null && toggleWalkForward.tick()) {
-			final ClientInput input = player.input;
+			ClientInput input = player.input;
 			
 			input.keyPresses = new Input(
 				true,
@@ -165,7 +165,7 @@ public final class PlayerTicker {
 		}
 	}
 	
-	public void afterInputTick(final LocalPlayer player) {
+	public void afterInputTick(LocalPlayer player) {
 		if (MINECRAFT.screen == null && !player.getAbilities().flying && toggleJump.tick()) {
 			player.input.makeJump();
 		}
@@ -190,10 +190,10 @@ public final class PlayerTicker {
 		}
 	}
 	
-	public void afterSuperCall(final LocalPlayer player) {
+	public void afterSuperCall(LocalPlayer player) {
 		if (FlightHelper.shouldFlyOnGround(player)) {
-			final boolean isSneaking = player.isShiftKeyDown();
-			final boolean isOnGround = player.onGround();
+			boolean isSneaking = player.isShiftKeyDown();
+			boolean isOnGround = player.onGround();
 			
 			if (!isSneaking) {
 				wasSneakingBeforeTouchingGround = false;
@@ -230,7 +230,7 @@ public final class PlayerTicker {
 		}
 		
 		if (FlightHelper.isFlyingCreativeOrSpectator(player) && cfg().disableFlightInertia) {
-			final ClientInput input = player.input;
+			ClientInput input = player.input;
 			
 			if (input.forwardImpulse == 0F && input.leftImpulse == 0F) {
 				player.setDeltaMovement(player.getDeltaMovement().multiply(0.0, 1.0, 0.0));
@@ -243,7 +243,7 @@ public final class PlayerTicker {
 		
 		if (player.isCreative()) {
 			if (cfg().keyToggleFlight.consumeClick()) {
-				final boolean isFlying = !player.getAbilities().flying;
+				boolean isFlying = !player.getAbilities().flying;
 				
 				player.getAbilities().flying = isFlying;
 				player.onUpdateAbilities();
@@ -268,7 +268,7 @@ public final class PlayerTicker {
 		}
 		
 		if (!cfg().sneakingMovesCameraSmoothly) {
-			final Camera camera = MINECRAFT.gameRenderer.getMainCamera();
+			Camera camera = MINECRAFT.gameRenderer.getMainCamera();
 			
 			if (camera.getEntity() == player) {
 				((AccessCameraFields)camera).setEyeHeight(player.getEyeHeight());
@@ -287,7 +287,7 @@ public final class PlayerTicker {
 		}
 	}
 	
-	public boolean shouldResetFOV(final LocalPlayer player) {
+	public boolean shouldResetFOV(LocalPlayer player) {
 		return cfg().disableChangingFovWhileFlying && FlightHelper.isFlyingCreativeOrSpectator(player);
 	}
 }