1
0
mirror of https://github.com/chylex/Better-Controls.git synced 2025-05-04 07:34:06 +02:00

Release v1.2.0 for Minecraft 1.17+

This commit is contained in:
chylex 2021-06-14 17:43:06 +02:00
parent 239a2a7494
commit de07ba881b
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
51 changed files with 458 additions and 422 deletions

1
.gitignore vendored
View File

@ -27,3 +27,4 @@ bin/
# fabric # fabric
run/ run/
logs/

View File

@ -1,13 +1,13 @@
plugins { plugins {
id 'fabric-loom' version '0.5-SNAPSHOT' id 'fabric-loom' version '0.8-SNAPSHOT'
id 'maven-publish' id 'maven-publish'
} }
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_16
archivesBaseName = project.archives_base_name archivesBaseName = project.archives_base_name
version = project.mod_version version = 'v' + project.mod_version
group = project.maven_group group = project.maven_group
dependencies { dependencies {
@ -17,24 +17,18 @@ dependencies {
} }
processResources { processResources {
inputs.property "version", project.version inputs.property "version", project.mod_version
from(sourceSets.main.resources.srcDirs) { filesMatching("fabric.mod.json") {
include "fabric.mod.json" expand "version": project.mod_version
expand "version": project.version
}
from(sourceSets.main.resources.srcDirs) {
exclude "fabric.mod.json"
} }
} }
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.encoding = "UTF-8" options.encoding = "UTF-8"
options.release = 16
} }
version = 'v' + version
jar { jar {
from "LICENSE" from "LICENSE"
exclude "io/github/prospector/" exclude "io/github/prospector/"

View File

@ -2,13 +2,13 @@
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
minecraft_version=1.16.4 minecraft_version=1.17
yarn_mappings=1.16.4+build.1 yarn_mappings=1.17+build.1
loader_version=0.10.6+build.214 loader_version=0.11.3
# Mod Properties # Mod Properties
mod_version=1.2.0 mod_version=1.2.0
maven_group=chylex.bettercontrols maven_group=chylex.bettercontrols
archives_base_name=BetterControls-1.16.2+ archives_base_name=BetterControls-1.17+
# https://modmuss50.me/fabric.html # https://modmuss50.me/fabric.html

View File

@ -1,6 +1,5 @@
pluginManagement { pluginManagement {
repositories { repositories {
jcenter()
maven { maven {
name = 'Fabric' name = 'Fabric'
url = 'https://maven.fabricmc.net/' url = 'https://maven.fabricmc.net/'

View File

@ -15,9 +15,9 @@ import chylex.bettercontrols.util.LiteralText;
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;
import net.minecraft.client.gui.screen.ScreenTexts; import net.minecraft.client.gui.screen.ScreenTexts;
import net.minecraft.client.gui.screen.options.GameOptionsScreen; import net.minecraft.client.gui.screen.option.GameOptionsScreen;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import java.util.ArrayList; import java.util.ArrayList;
@ -246,8 +246,8 @@ public class BetterControlsScreen extends GameOptionsScreen{
elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("Miscellaneous"), CENTER)); elements.add(new TextWidget(0, y, ROW_WIDTH, ROW_HEIGHT, text("Miscellaneous"), CENTER));
y = generateMiscellaneousOptions(y + ROW_HEIGHT, elements) + TITLE_MARGIN_TOP; 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))); addDrawableChild(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)); addSelectableChild(optionsWidget = new OptionListWidget(21, height - 32, width, height, elements, y - TITLE_MARGIN_TOP + BOTTOM_PADDING));
} }
@Override @Override

View File

@ -2,7 +2,8 @@ package chylex.bettercontrols.gui;
import chylex.bettercontrols.gui.OptionListWidget.Entry; import chylex.bettercontrols.gui.OptionListWidget.Entry;
import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.gui.widget.ElementListWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,8 +33,8 @@ public final class OptionListWidget extends ElementListWidget<Entry>{
if (element instanceof Widget) { if (element instanceof Widget) {
return new Offset(((Widget)element).getX(), ((Widget)element).getY()); return new Offset(((Widget)element).getX(), ((Widget)element).getY());
} }
else if (element instanceof AbstractButtonWidget){ else if (element instanceof ClickableWidget) {
return new Offset(((AbstractButtonWidget)element).x, ((AbstractButtonWidget)element).y); return new Offset(((ClickableWidget)element).x, ((ClickableWidget)element).y);
} }
else { else {
return new Offset(0, 0); return new Offset(0, 0);
@ -79,10 +80,12 @@ public final class OptionListWidget extends ElementListWidget<Entry>{
protected static final class Entry extends ElementListWidget.Entry<Entry> { protected static final class Entry extends ElementListWidget.Entry<Entry> {
private final List<Element> elements; private final List<Element> elements;
private final List<Selectable> selectables;
private final Map<Element, Offset> offsets; private final Map<Element, Offset> offsets;
public Entry(final List<Element> elements) { public Entry(final List<Element> elements) {
this.elements = new ArrayList<>(elements); this.elements = new ArrayList<>(elements);
this.selectables = elements.stream().filter(e -> e instanceof Selectable).map(e -> (Selectable)e).toList();
this.offsets = elements.stream().collect(Collectors.toMap(Function.identity(), OptionListWidget::getElementOffset)); this.offsets = elements.stream().collect(Collectors.toMap(Function.identity(), OptionListWidget::getElementOffset));
} }
@ -91,24 +94,27 @@ public final class OptionListWidget extends ElementListWidget<Entry>{
return Collections.unmodifiableList(elements); return Collections.unmodifiableList(elements);
} }
@Override
public List<? extends Selectable> method_37025() {
return Collections.unmodifiableList(selectables);
}
@Override @Override
public void render(final MatrixStack matrices, 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) { public void render(final MatrixStack matrices, 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 Element element : elements) { for (final Element element : elements) {
final Offset offset = offsets.get(element); final Offset offset = offsets.get(element);
if (element instanceof AbstractButtonWidget){ if (element instanceof final ClickableWidget button) {
final AbstractButtonWidget button = (AbstractButtonWidget)element;
button.x = x + offset.x; button.x = x + offset.x;
button.y = y + offset.y; button.y = y + offset.y;
} }
else if (element instanceof Widget){ else if (element instanceof final Widget widget) {
final Widget widget = (Widget)element;
widget.setX(x + offset.x); widget.setX(x + offset.x);
widget.setY(y + offset.y); widget.setY(y + offset.y);
} }
if (element instanceof Drawable){ if (element instanceof final Drawable drawable) {
((Drawable)element).render(matrices, mouseX, mouseY, tickDelta); drawable.render(matrices, mouseX, mouseY, tickDelta);
} }
} }
} }

View File

@ -1,14 +1,17 @@
package chylex.bettercontrols.gui; package chylex.bettercontrols.gui;
import chylex.bettercontrols.mixin.AccessCyclingButtonWidgetFields;
import chylex.bettercontrols.mixin.AccessOptionFields;
import chylex.bettercontrols.mixin.AccessScreenButtons; import chylex.bettercontrols.mixin.AccessScreenButtons;
import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.ParentElement; import net.minecraft.client.gui.ParentElement;
import net.minecraft.client.gui.screen.options.AccessibilityOptionsScreen; import net.minecraft.client.gui.screen.option.AccessibilityOptionsScreen;
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.OptionButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.options.Option; import net.minecraft.client.gui.widget.CyclingButtonWidget;
import net.minecraft.client.option.Option;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import static chylex.bettercontrols.util.Statics.MINECRAFT; import static chylex.bettercontrols.util.Statics.MINECRAFT;
@ -17,36 +20,26 @@ public final class ScreenPatcher{
public static void onControlsScreenOpened(final ControlsOptionsScreen screen) { public static void onControlsScreenOpened(final ControlsOptionsScreen screen) {
final AccessScreenButtons accessor = (AccessScreenButtons)screen; final AccessScreenButtons accessor = (AccessScreenButtons)screen;
final List<? extends Element> children = screen.children(); final List<? extends Element> children = screen.children();
final List<AbstractButtonWidget> buttons = accessor.getButtons();
final AbstractButtonWidget autoJump = buttons final ClickableWidget autoJump = children.stream().flatMap(it -> getOptionButton(it, Option.AUTO_JUMP).stream()).findAny().orElse(null);
.stream()
.filter(it -> it instanceof OptionButtonWidget && ((OptionButtonWidget)it).getOption() == Option.AUTO_JUMP)
.findAny()
.orElse(null);
if (autoJump != null) { if (autoJump != null) {
children.remove(autoJump); final ButtonWidget widget = new ButtonWidget(autoJump.x, autoJump.y, autoJump.getWidth(), autoJump.getHeight(), BetterControlsScreen.TITLE.copy().append("..."), btn -> {
buttons.remove(autoJump);
accessor.callAddButton(new ButtonWidget(autoJump.x, autoJump.y, autoJump.getWidth(), autoJump.getHeight(), BetterControlsScreen.TITLE.copy().append("..."), btn -> {
MINECRAFT.openScreen(new BetterControlsScreen(screen)); MINECRAFT.openScreen(new BetterControlsScreen(screen));
})); });
accessor.callRemove(autoJump);
accessor.getChildren().add(widget);
accessor.getSelectables().add(widget);
accessor.getDrawables().add(widget);
} }
} }
public static void onAccessibilityScreenOpened(final AccessibilityOptionsScreen screen) { public static void onAccessibilityScreenOpened(final AccessibilityOptionsScreen screen) {
walkChildren(screen.children(), it -> { walkChildren(screen.children(), it -> {
if (it instanceof OptionButtonWidget){ getOptionButton(it, Option.SPRINT_TOGGLED).ifPresent(button -> button.active = false);
final OptionButtonWidget button = (OptionButtonWidget)it; getOptionButton(it, Option.SNEAK_TOGGLED).ifPresent(button -> button.active = false);
final Option option = button.getOption();
if (option == Option.SPRINT_TOGGLED || option == Option.SNEAK_TOGGLED){
button.active = false;
}
}
}); });
} }
@ -59,4 +52,13 @@ public final class ScreenPatcher{
} }
} }
} }
private static Optional<CyclingButtonWidget<?>> getOptionButton(final Element element, final Option option) {
if (element instanceof CyclingButtonWidget<?> && ((AccessOptionFields)option).getKey().equals(((AccessCyclingButtonWidgetFields)element).getOptionText())) {
return Optional.of((CyclingButtonWidget<?>)element);
}
else {
return Optional.empty();
}
}
} }

View File

@ -1,8 +1,8 @@
package chylex.bettercontrols.gui.elements; package chylex.bettercontrols.gui.elements;
import chylex.bettercontrols.util.Key; import chylex.bettercontrols.util.Key;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.text.LiteralText; import net.minecraft.text.LiteralText;
import net.minecraft.text.MutableText; import net.minecraft.text.MutableText;
@ -18,7 +18,7 @@ public final class KeyBindingWidget extends ButtonWidget{
private final KeyBinding binding; private final KeyBinding binding;
private final Text bindingName; private final Text bindingName;
private final List<AbstractButtonWidget> linkedButtons = new ArrayList<>(1); private final List<ClickableWidget> linkedButtons = new ArrayList<>(1);
private final Consumer<KeyBindingWidget> onEditingStarted; private final Consumer<KeyBindingWidget> onEditingStarted;
private boolean isEditing; private boolean isEditing;
@ -35,7 +35,7 @@ public final class KeyBindingWidget extends ButtonWidget{
this(x, y, width, 20, binding, onEditingStarted); this(x, y, width, 20, binding, onEditingStarted);
} }
public void linkButtonToBoundState(final AbstractButtonWidget button){ public void linkButtonToBoundState(final ClickableWidget button) {
linkedButtons.add(button); linkedButtons.add(button);
button.active = !Key.isUnbound(binding); button.active = !Key.isUnbound(binding);
} }
@ -56,7 +56,7 @@ public final class KeyBindingWidget extends ButtonWidget{
Key.bind(binding, key); Key.bind(binding, key);
stopEditing(); stopEditing();
for(final AbstractButtonWidget button : linkedButtons){ for (final ClickableWidget button : linkedButtons) {
button.active = !Key.isUnbound(binding); button.active = !Key.isUnbound(binding);
} }
} }

View File

@ -1,5 +1,5 @@
package chylex.bettercontrols.input; package chylex.bettercontrols.input;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil.Type; import net.minecraft.client.util.InputUtil.Type;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;

View File

@ -32,11 +32,11 @@ public enum ModifierKey{
public abstract boolean isPressed(); public abstract boolean isPressed();
public static ModifierKey getById(final int id) { public static ModifierKey getById(final int id) {
switch(id){ return switch (id) {
case 0: return CONTROL; case 0 -> CONTROL;
case 1: return SHIFT; case 1 -> SHIFT;
case 2: return ALT; case 2 -> ALT;
default: return null; default -> null;
} };
} }
} }

View File

@ -1,6 +1,6 @@
package chylex.bettercontrols.input; package chylex.bettercontrols.input;
import chylex.bettercontrols.util.Key; import chylex.bettercontrols.util.Key;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
public class ToggleTracker { public class ToggleTracker {
protected final KeyBinding bindingToggle; protected final KeyBinding bindingToggle;

View File

@ -1,7 +1,7 @@
package chylex.bettercontrols.input; package chylex.bettercontrols.input;
import chylex.bettercontrols.mixin.AccessKeyBindingFields; import chylex.bettercontrols.mixin.AccessKeyBindingFields;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer; import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;

View File

@ -1,5 +1,5 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import net.minecraft.client.gui.screen.options.ControlsListWidget.CategoryEntry; import net.minecraft.client.gui.screen.option.ControlsListWidget.CategoryEntry;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;

View File

@ -1,6 +1,6 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import net.minecraft.client.gui.screen.options.ControlsListWidget.KeyBindingEntry; import net.minecraft.client.gui.screen.option.ControlsListWidget.KeyBindingEntry;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;

View File

@ -0,0 +1,12 @@
package chylex.bettercontrols.mixin;
import net.minecraft.client.gui.widget.CyclingButtonWidget;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(CyclingButtonWidget.class)
public interface AccessCyclingButtonWidgetFields {
@Accessor
Text getOptionText();
}

View File

@ -1,5 +1,5 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Map; import java.util.Map;

View File

@ -0,0 +1,12 @@
package chylex.bettercontrols.mixin;
import net.minecraft.client.option.Option;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Option.class)
public interface AccessOptionFields {
@Accessor
Text getKey();
}

View File

@ -1,6 +1,8 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.asm.mixin.gen.Invoker;
@ -9,8 +11,14 @@ import java.util.List;
@Mixin(Screen.class) @Mixin(Screen.class)
public interface AccessScreenButtons { public interface AccessScreenButtons {
@Accessor @Accessor
List<AbstractButtonWidget> getButtons(); List<Element> getChildren();
@Accessor
List<Selectable> getSelectables();
@Accessor
List<Drawable> getDrawables();
@Invoker @Invoker
<T extends AbstractButtonWidget> T callAddButton(T button); void callRemove(Element child);
} }

View File

@ -1,5 +1,5 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import net.minecraft.client.options.StickyKeyBinding; import net.minecraft.client.option.StickyKeyBinding;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;

View File

@ -2,11 +2,11 @@ package chylex.bettercontrols.mixin;
import chylex.bettercontrols.BetterControlsMod; import chylex.bettercontrols.BetterControlsMod;
import chylex.bettercontrols.input.KeyBindingWithModifier; import chylex.bettercontrols.input.KeyBindingWithModifier;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.options.ControlsListWidget; import net.minecraft.client.gui.screen.option.ControlsListWidget;
import net.minecraft.client.gui.screen.options.ControlsListWidget.CategoryEntry; import net.minecraft.client.gui.screen.option.ControlsListWidget.CategoryEntry;
import net.minecraft.client.gui.screen.options.ControlsListWidget.Entry; import net.minecraft.client.gui.screen.option.ControlsListWidget.Entry;
import net.minecraft.client.gui.screen.options.ControlsListWidget.KeyBindingEntry; import net.minecraft.client.gui.screen.option.ControlsListWidget.KeyBindingEntry;
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.gui.widget.ElementListWidget;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,8 +1,8 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import chylex.bettercontrols.BetterControlsMod; import chylex.bettercontrols.BetterControlsMod;
import chylex.bettercontrols.input.KeyBindingWithModifier; import chylex.bettercontrols.input.KeyBindingWithModifier;
import net.minecraft.client.options.GameOptions; import net.minecraft.client.option.GameOptions;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;

View File

@ -2,8 +2,8 @@ package chylex.bettercontrols.mixin;
import chylex.bettercontrols.gui.ScreenPatcher; import chylex.bettercontrols.gui.ScreenPatcher;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.options.AccessibilityOptionsScreen; import net.minecraft.client.gui.screen.option.AccessibilityOptionsScreen;
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -1,7 +1,7 @@
package chylex.bettercontrols.mixin; package chylex.bettercontrols.mixin;
import chylex.bettercontrols.input.ToggleTrackerForStickyKey; import chylex.bettercontrols.input.ToggleTrackerForStickyKey;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.options.StickyKeyBinding; import net.minecraft.client.option.StickyKeyBinding;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;

View File

@ -14,11 +14,11 @@ final class FlightHelper{
} }
static boolean isFlyingCreativeOrSpectator(final ClientPlayerEntity player) { static boolean isFlyingCreativeOrSpectator(final ClientPlayerEntity player) {
return player.abilities.flying && (player.isCreative() || player.isSpectator()); return player.getAbilities().flying && (player.isCreative() || player.isSpectator());
} }
static boolean shouldFlyOnGround(final ClientPlayerEntity player) { static boolean shouldFlyOnGround(final ClientPlayerEntity player) {
return cfg().flyOnGroundInCreative && player.isCreative() && player.abilities.flying; return cfg().flyOnGroundInCreative && player.isCreative() && player.getAbilities().flying;
} }
static float getFlightSpeed(final ClientPlayerEntity player, final boolean boost) { static float getFlightSpeed(final ClientPlayerEntity player, final boolean boost) {

View File

@ -153,7 +153,7 @@ public final class PlayerTicker{
public void afterInputTick(final ClientPlayerEntity player) { public void afterInputTick(final ClientPlayerEntity player) {
final Input input = player.input; final Input input = player.input;
if (MINECRAFT.currentScreen == null && !player.abilities.flying){ if (MINECRAFT.currentScreen == null && !player.getAbilities().flying) {
input.jumping |= toggleJump.tick(); input.jumping |= toggleJump.tick();
} }
@ -163,7 +163,7 @@ public final class PlayerTicker{
final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player, boost); final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player, boost);
if (flightSpeed > 0F) { if (flightSpeed > 0F) {
player.abilities.setFlySpeed(flightSpeed); player.getAbilities().setFlySpeed(flightSpeed);
} }
if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getCameraEntity()) { if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getCameraEntity()) {
@ -230,7 +230,7 @@ public final class PlayerTicker{
holdingSneakWhileTouchingGround = true; holdingSneakWhileTouchingGround = true;
} }
else if (holdingSneakWhileTouchingGround) { else if (holdingSneakWhileTouchingGround) {
player.abilities.flying = false; player.getAbilities().flying = false;
player.sendAbilitiesUpdate(); player.sendAbilitiesUpdate();
cancelLanding = false; cancelLanding = false;
} }
@ -260,9 +260,9 @@ public final class PlayerTicker{
if (player.isCreative()) { if (player.isCreative()) {
if (Key.wasPressed(cfg().keyToggleFlight)) { if (Key.wasPressed(cfg().keyToggleFlight)) {
final boolean isFlying = !player.abilities.flying; final boolean isFlying = !player.getAbilities().flying;
player.abilities.flying = isFlying; player.getAbilities().flying = isFlying;
player.sendAbilitiesUpdate(); player.sendAbilitiesUpdate();
if (isFlying) { if (isFlying) {

View File

@ -1,5 +1,5 @@
package chylex.bettercontrols.util; package chylex.bettercontrols.util;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text; import net.minecraft.text.Text;

View File

@ -1,7 +1,7 @@
package chylex.bettercontrols.util; package chylex.bettercontrols.util;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.options.GameOptions; import net.minecraft.client.option.GameOptions;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
public final class Statics { public final class Statics {
private Statics() {} private Statics() {}

View File

@ -2,14 +2,16 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "chylex.bettercontrols.mixin", "package": "chylex.bettercontrols.mixin",
"compatibilityLevel": "JAVA_8", "compatibilityLevel": "JAVA_16",
"mixins": [ "mixins": [
"AccessCameraFields", "AccessCameraFields",
"AccessClientPlayerFields", "AccessClientPlayerFields",
"AccessControlsListCategory", "AccessControlsListCategory",
"AccessControlsListKeyBinding", "AccessControlsListKeyBinding",
"AccessCyclingButtonWidgetFields",
"AccessGameRendererFields", "AccessGameRendererFields",
"AccessKeyBindingFields", "AccessKeyBindingFields",
"AccessOptionFields",
"AccessPlayerFields", "AccessPlayerFields",
"AccessScreenButtons", "AccessScreenButtons",
"AccessStickyKeyBindingStateGetter", "AccessStickyKeyBindingStateGetter",

View File

@ -28,6 +28,6 @@
"depends": { "depends": {
"fabricloader": ">=0.7.4", "fabricloader": ">=0.7.4",
"minecraft": ">=1.16.2" "minecraft": ">=1.17"
} }
} }