mirror of
https://github.com/chylex/Better-Controls.git
synced 2025-05-05 19:34:05 +02:00
Hide custom keybindings in the Controls screen
This commit is contained in:
parent
15f1635604
commit
71e7bed96f
src/main
java/chylex/bettercontrols
input
mixin
resources
@ -1,11 +1,17 @@
|
||||
package chylex.bettercontrols.input;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil.Type;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class KeyBindingWithModifier extends KeyBinding{
|
||||
public static final String CATEGORY = "key.categories.bettercontrols";
|
||||
|
||||
public static boolean checkCategoryMatches(final Text text){
|
||||
return text instanceof TranslatableText && CATEGORY.equals(((TranslatableText)text).getKey());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private ModifierKey modifier = null;
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
package chylex.bettercontrols.mixin;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget.CategoryEntry;
|
||||
import net.minecraft.text.Text;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(CategoryEntry.class)
|
||||
public interface AccessControlsListCategory{
|
||||
@Accessor
|
||||
Text getText();
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package chylex.bettercontrols.mixin;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget.KeyBindingEntry;
|
||||
import net.minecraft.client.options.KeyBinding;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(KeyBindingEntry.class)
|
||||
public interface AccessControlsListKeyBinding{
|
||||
@Accessor
|
||||
KeyBinding getBinding();
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package chylex.bettercontrols.mixin;
|
||||
import chylex.bettercontrols.BetterControlsMod;
|
||||
import chylex.bettercontrols.input.KeyBindingWithModifier;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget.CategoryEntry;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget.Entry;
|
||||
import net.minecraft.client.gui.screen.options.ControlsListWidget.KeyBindingEntry;
|
||||
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen;
|
||||
import net.minecraft.client.gui.widget.ElementListWidget;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ControlsListWidget.class)
|
||||
public abstract class HookControlsListWidget extends ElementListWidget<Entry>{
|
||||
public HookControlsListWidget(final MinecraftClient client, final int width, final int height, final int top, final int bottom, final int itemHeight){
|
||||
super(client, width, height, top, bottom, itemHeight);
|
||||
}
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
public void init(final ControlsOptionsScreen parent, final MinecraftClient client, final CallbackInfo ci){
|
||||
children().removeIf(it -> {
|
||||
if (it instanceof CategoryEntry && KeyBindingWithModifier.checkCategoryMatches(((AccessControlsListCategory)it).getText())){
|
||||
return true;
|
||||
}
|
||||
|
||||
if (it instanceof KeyBindingEntry && ArrayUtils.contains(BetterControlsMod.config.getAllKeyBindings(), ((AccessControlsListKeyBinding)it).getBinding())){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
@ -6,10 +6,13 @@
|
||||
"mixins": [
|
||||
"AccessCameraFields",
|
||||
"AccessClientPlayerFields",
|
||||
"AccessControlsListCategory",
|
||||
"AccessControlsListKeyBinding",
|
||||
"AccessKeyBindingFields",
|
||||
"AccessScreenButtons",
|
||||
"HookClientPlayerInputTick",
|
||||
"HookClientPlayerTick",
|
||||
"HookControlsListWidget",
|
||||
"HookLoadGameOptions",
|
||||
"HookOpenScreen",
|
||||
"HookStickyKeyBindingState"
|
||||
|
Loading…
Reference in New Issue
Block a user