mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-10-18 12:39:39 +02:00
Compare commits
4 Commits
dfefab3482
...
main
Author | SHA1 | Date | |
---|---|---|---|
cbf5adb4a7
|
|||
5a67786d0b
|
|||
2e19fffe44
|
|||
32f6a6e7fe
|
@@ -15,7 +15,7 @@ import javax.annotation.Nullable;
|
||||
@Mod("bettercontrols")
|
||||
public final class BetterControlsMod {
|
||||
public BetterControlsMod() {
|
||||
if (FMLEnvironment.dist == Dist.CLIENT) {
|
||||
if (FMLEnvironment.getDist() == Dist.CLIENT) {
|
||||
BetterControlsCommon.setConfig(BetterControlsConfig.load(FMLPaths.CONFIGDIR.get().resolve("BetterControls.json")));
|
||||
ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, () -> BetterControlsMod::createOptionsScreen);
|
||||
}
|
||||
|
@@ -3,18 +3,18 @@ modId=bettercontrols
|
||||
modName=Better Controls
|
||||
modDescription=Adds many powerful key bindings and options to control your movement.\\n\\nThe features complement vanilla mechanics without giving unfair advantages, so server use should be fine.
|
||||
modAuthor=chylex
|
||||
modVersion=1.6.0
|
||||
modVersion=1.6.2
|
||||
modLicense=MPL-2.0
|
||||
modSourcesURL=https://github.com/chylex/Better-Controls
|
||||
modIssuesURL=https://github.com/chylex/Better-Controls/issues
|
||||
modSides=client
|
||||
|
||||
# Dependencies
|
||||
minecraftVersion=1.21.5
|
||||
neoForgeVersion=21.5.0-beta
|
||||
neoModDevVersion=2.0.88
|
||||
fabricVersion=0.16.14
|
||||
loomVersion=1.9
|
||||
minecraftVersion=1.21.9
|
||||
neoForgeVersion=21.9.2-beta
|
||||
neoModDevVersion=2.0.110
|
||||
fabricVersion=0.17.2
|
||||
loomVersion=1.10
|
||||
mixinVersion=0.12.5+mixin.0.8.5
|
||||
mixinExtrasVersion=0.4.1
|
||||
|
||||
@@ -24,8 +24,8 @@ mixinExtrasVersion=0.4.1
|
||||
# https://github.com/FabricMC/fabric-loom/releases
|
||||
|
||||
# Constraints
|
||||
minimumMinecraftVersion=1.21.5
|
||||
minimumNeoForgeVersion=21.5.0-beta
|
||||
minimumMinecraftVersion=1.21.9
|
||||
minimumNeoForgeVersion=21.9.0-beta
|
||||
minimumFabricVersion=0.15.0
|
||||
|
||||
# Gradle
|
||||
|
@@ -18,7 +18,10 @@ import net.minecraft.client.gui.components.CycleButton;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.gui.screens.options.OptionsSubScreen;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import java.util.ArrayList;
|
||||
@@ -282,32 +285,32 @@ public class BetterControlsScreen extends OptionsSubScreen {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int button) {
|
||||
public boolean mouseClicked(@NotNull MouseButtonEvent event, boolean isDoubleClick) {
|
||||
if (editingKeyBinding != null) {
|
||||
editingKeyBinding.bindAndStopEditing(InputConstants.Type.MOUSE.getOrCreate(button));
|
||||
editingKeyBinding.bindAndStopEditing(InputConstants.Type.MOUSE.getOrCreate(event.button()));
|
||||
onKeyBindingEditingFinished();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return super.mouseClicked(mouseX, mouseY, button);
|
||||
return super.mouseClicked(event, isDoubleClick);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||
public boolean keyPressed(@NotNull KeyEvent event) {
|
||||
if (editingKeyBinding != null) {
|
||||
if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
|
||||
if (event.key() == GLFW.GLFW_KEY_ESCAPE) {
|
||||
editingKeyBinding.bindAndStopEditing(InputConstants.UNKNOWN);
|
||||
}
|
||||
else {
|
||||
editingKeyBinding.bindAndStopEditing(InputConstants.getKey(keyCode, scanCode));
|
||||
editingKeyBinding.bindAndStopEditing(InputConstants.getKey(event));
|
||||
}
|
||||
|
||||
onKeyBindingEditingFinished();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
return super.keyPressed(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -84,7 +84,7 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void ensureVisible(@NotNull Entry entry) {
|
||||
protected void scrollToEntry(@NotNull Entry entry) {
|
||||
// Scrolling to focused item is implemented in Entry.
|
||||
}
|
||||
|
||||
@@ -126,17 +126,17 @@ public final class OptionListWidget extends ContainerObjectSelectionList<Entry>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(@NotNull GuiGraphics graphics, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
||||
public void renderContent(@NotNull GuiGraphics graphics, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
||||
for (GuiEventListener element : elements) {
|
||||
Offset offset = offsets.get(element);
|
||||
|
||||
if (element instanceof AbstractWidget widget) {
|
||||
widget.setX(x + offset.x);
|
||||
widget.setY(y + offset.y);
|
||||
widget.setX(getX() + offset.x);
|
||||
widget.setY(getY() + offset.y);
|
||||
}
|
||||
else if (element instanceof OptionWidget widget) {
|
||||
widget.setX(x + offset.x);
|
||||
widget.setY(y + offset.y);
|
||||
widget.setX(getX() + offset.x);
|
||||
widget.setY(getY() + offset.y);
|
||||
}
|
||||
|
||||
if (element instanceof Renderable renderable) {
|
||||
|
@@ -2,12 +2,11 @@ package chylex.bettercontrols.gui.elements;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.client.gui.components.AbstractSliderButton;
|
||||
import net.minecraft.client.gui.navigation.CommonInputs;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import net.minecraft.util.Mth;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public final class DiscreteValueSliderWidget<T> extends AbstractSliderButton {
|
||||
@@ -42,13 +41,13 @@ public final class DiscreteValueSliderWidget<T> extends AbstractSliderButton {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||
if (CommonInputs.selected(keyCode)) {
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
public boolean keyPressed(KeyEvent keyEvent) {
|
||||
if (keyEvent.isSelection()) {
|
||||
return super.keyPressed(keyEvent);
|
||||
}
|
||||
|
||||
if (keyCode == GLFW.GLFW_KEY_LEFT || keyCode == GLFW.GLFW_KEY_RIGHT) {
|
||||
int newOptionIndex = keyCode == GLFW.GLFW_KEY_LEFT
|
||||
if (keyEvent.isLeft() || keyEvent.isRight()) {
|
||||
int newOptionIndex = keyEvent.isLeft()
|
||||
? getSelectedOptionIndex() - 1
|
||||
: getSelectedOptionIndex() + 1;
|
||||
|
||||
|
@@ -6,6 +6,7 @@ import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.components.AbstractButton;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.input.InputWithModifiers;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -46,7 +47,7 @@ public final class KeyBindingWidget extends Button {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPress() {
|
||||
public void onPress(@NotNull InputWithModifiers input) {
|
||||
isEditing = true;
|
||||
onEditingStarted.accept(this);
|
||||
updateKeyBindingText();
|
||||
|
@@ -13,7 +13,7 @@ public final class TextWidget implements OptionWidget {
|
||||
public static final int LEFT = 0;
|
||||
public static final int CENTER = 1;
|
||||
|
||||
public static final int WHITE = 0xFF_FF_FF;
|
||||
public static final int WHITE = 0xFF_FF_FF_FF;
|
||||
|
||||
private final Component text;
|
||||
private int x;
|
||||
|
@@ -2,13 +2,14 @@ package chylex.bettercontrols.input;
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants.Type;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class KeyBindingWithModifier extends KeyMapping {
|
||||
public static final String CATEGORY = "key.categories.bettercontrols";
|
||||
public static final Category CATEGORY = new Category(ResourceLocation.fromNamespaceAndPath("bettercontrols", "all"));
|
||||
|
||||
@Nullable
|
||||
private ModifierKey modifier = null;
|
||||
private ModifierKey modifier;
|
||||
|
||||
public KeyBindingWithModifier(String translationKey) {
|
||||
super(translationKey, Type.KEYSYM, -1, CATEGORY);
|
||||
|
@@ -1,26 +1,26 @@
|
||||
package chylex.bettercontrols.input;
|
||||
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
public enum ModifierKey {
|
||||
CONTROL(0) {
|
||||
@Override
|
||||
public boolean isPressed() {
|
||||
return Screen.hasControlDown();
|
||||
return Minecraft.getInstance().hasControlDown();
|
||||
}
|
||||
},
|
||||
|
||||
SHIFT(1) {
|
||||
@Override
|
||||
public boolean isPressed() {
|
||||
return Screen.hasShiftDown();
|
||||
return Minecraft.getInstance().hasShiftDown();
|
||||
}
|
||||
},
|
||||
|
||||
ALT(2) {
|
||||
@Override
|
||||
public boolean isPressed() {
|
||||
return Screen.hasAltDown();
|
||||
return Minecraft.getInstance().hasAltDown();
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -3,16 +3,10 @@ package chylex.bettercontrols.mixin;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
import java.util.Map;
|
||||
|
||||
@Mixin(KeyMapping.class)
|
||||
@SuppressWarnings("StaticMethodOnlyUsedInOneClass")
|
||||
public interface AccessKeyMappingFields {
|
||||
@Accessor("CATEGORY_SORT_ORDER")
|
||||
static Map<String, Integer> getCategoryOrderMap() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
@Accessor("isDown")
|
||||
boolean isPressedField();
|
||||
|
||||
|
@@ -2,7 +2,6 @@ package chylex.bettercontrols.mixin;
|
||||
|
||||
import chylex.bettercontrols.BetterControlsCommon;
|
||||
import chylex.bettercontrols.config.BetterControlsConfig;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Options;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
@@ -38,6 +37,5 @@ public abstract class HookLoadGameOptions {
|
||||
|
||||
hasLoaded = true;
|
||||
keyMappings = ArrayUtils.addAll(keyMappings, config.getAllKeyBindings());
|
||||
AccessKeyMappingFields.getCategoryOrderMap().put(KeyBindingWithModifier.CATEGORY, Integer.valueOf(Integer.MAX_VALUE));
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ public abstract class HookStickyKeyBindingState extends KeyMapping {
|
||||
@Final
|
||||
private BooleanSupplier needsToggle;
|
||||
|
||||
public HookStickyKeyBindingState(String translationKey, int code, String category) {
|
||||
public HookStickyKeyBindingState(String translationKey, int code, KeyMapping.Category category) {
|
||||
super(translationKey, code, category);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user