Git Product home page Git Product logo

controlify's Introduction

Controlify - Controller support for Minecraft Java

Mod Loader - Fabric wakatime

Modrinth download count CurseForge download count

Ko-fi donation page

A mod that adds the best controller support for Minecraft: Java Edition.

Why Controlify?

User friendly

Despite advanced settings available for power users, Controlify is beginner-friendly. It comes by default with button guides that appear across the whole game, helping you learn the controller layout. It also automatically detects your controller's make and model, displaying relevant Minecraft-style button textures for a more intuitive experience. Controlify "just works" out of the box, no need to spend tens of minutes getting your controller feeling like any other game, thanks to the sane defaults I have created.

Feature-rich

Controlify strives to support all the added features that may come with your controller.

  • It supports gyroscopes natively, allowing for precise movements.
  • It comes with vibration/rumble support, making your gameplay more immersive (this is even missing on Bedrock Edition!)
  • Soon, HD haptics support for DualSense controllers, something never seen outside a Playstation game.
  • Support for non-standard joysticks such as flight sticks, given a small amount of setup.

Compatibility focus

I, the developer have actively collaborated with fellow mod creators of performance mods like Sodium and Iris to ensure seamless controller functionality throughout these custom GUIs. This will mean a more friction-free environment that lets you focus on playing the game, instead of battling through the menus.

Q&A

Does it support Steam Deck?

Yes! Controlify has been tested and is fully working on the Steam Deck, and works great. However, due to limitations with SteamOS, only Steam games can currently interface with the gyroscope and the back buttons directly, though this is set to change in the coming months! For now, you can use Steam Input to convert the gyro into a mouse input, and map the back buttons to other, more common buttons.

Does it support my controller?

Controlify supports most controllers out of the box, any generic gamepad-like controller is bound to work fine, at least in a basic state, giving inputs. Though, more strange and uncommon controllers such as handhelds like the ROG Ally may be missing features such as gyroscope.

If you are having trouble getting your controller working correctly, you can join my discord server or consult the wiki for assistance.

Features

Controller vibration

Controlify supports controller vibration, which has not been seen before for PC versions of Minecraft, including Bedrock Windows 10 Edition. Configure the intensity of each vibration source, with complex vibration patterns for lots of aspects of the game (e.g. when you take damage).

picture of vibration config

Radial menu

radial menu showcase

To save up some buttons on your controller, dedicate some less-used actions to the radial menu. It is fully customizable through the settings and intuitive to use. Any modded keybind is compatible with this menu.

Built-in gyro support

Controlify has built-in support for controller gyroscopes, allowing you to make fine movements in-game with your controller. This can be combined with flick stick to be able to use a controller without the compromise.

Container cursor

Just like in bedrock edition, you can move a cursor across your inventory, and interact with it in a controller-friendly way. With dedicated buttons for quick move, dropping etc. Controlify also comes with cursor snapping, so you don't need to be so precise with cursor movements.

container cursor screenshot

Controller identification

Controlify has the ability to identify the make and model of your controller automatically, and displays relevant button textures for your controller. This is also extendable by resource packs, changing up the button textures in a different style and adding some of your own, more niche controller identifiers.

demonstration of data-driven identification

Joystick support

You can connect any joystick to the mod and map it with your own names and textures, with an unlimited amount of inputs per controller.

Button guide

There is a simple overlay in-game that displays the buttons you can press based on your player's state and look direction. This is useful for new players, who have not yet memorised the controls.

image of in-game button guide

Also, some GUIs display controller buttons on elements that have a controller shortcut, to easily navigate with a controller like you should be able to.

image of in-screen button guide

Containerised Controllers

This mod is built around the fact that each controller is completely separate, with it's own configuration, bindings etc. This means it will be trivial to add support for split-screen play in the future.

Built for mod compatibility

GUI operation has been abstracted into a simple API, which allows other mods to easily add support for their own GUIs, without convoluted support throughout the whole mod's codebase, making it difficult for third parties to integrate.

demonstration of dabr compat

Video recorded using do-a-barrel-roll with a Thrustmaster HOTAS flightstick

Automatic controller deadzone calibration

The deadzone values of your controller are automatically calibrated, meaning you don't have to worry about it.

image of calibration screen

What is to come?

A few features in various points in the horizon are:

  • Explicit Steam Deck support, with the ability to interface with its gyroscope and be able to handle its extra buttons on the back of the device.
  • A better way to change controller bindings, possibly a custom graphical GUI to pick what buttons do what actions, not the other way around.
  • Split-screen support of some degree.

Backports?

This mod is only and will only be available for 1.19.4 and above, this is because in 1.19.4, Mojang introduced arrow key navigation which was easily ported to controller, below 1.19.4, this is not possible.

License

This mod is under the GNU Lesser General Public License, v3.0.

controlify's People

Contributors

arnokeesman avatar godgun968 avatar imvietnam avatar isxander avatar madis0 avatar myuui avatar notlin4 avatar nyaomidev avatar pixlxip avatar silentexception avatar thelegendofsaram avatar tyrannus00 avatar weryskok avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

controlify's Issues

Controller operated mouse in GUIs

Some unsupported Screens may need to use the mouse in GUIs. This should be a last resort.

Implementation (subject to change)

The mod could keep track of seen screens, when a user opens up a new screen for the first time, the mod should open a popup after a few seconds asking if the user can operate the screen okay, and enable virtual mouse. This can later be edited in configuration.

Detect and help setup Steam Deck

Is your feature request related to a problem? Please describe.
From what I've heard, Steam Deck has controller simulation but mods are better. So Controllify could detect the OS and help the user set things up with the mod.

Describe the solution you'd like
Detect the OS and help user with the setup.

Describe alternatives you've considered
N/A

Additional context
Idk, maybe you already do it. I don't have Deck so don't ask me to test it though.

Minecraft Crashes When Attempting to Use Controller (Controlify 1.1.0 Beta 3+1.19.4)

Whenever I try to use my PS4 controller with Controlify, Minecraft crashes.

Crash log:
---- Minecraft Crash Report ----
// Shall we play a game?

Time: 2023-04-19 13:58:38
Description: Unexpected error

java.lang.NullPointerException: Cannot invoke "dev.isxander.controlify.controller.Controller.clearState()" because "this.switchableController" is null
at dev.isxander.controlify.Controlify.tick(Controlify.java:207)
at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$0(ClientTickEvents.java:40)
at net.minecraft.class_310.handler$zjc000$fabric-lifecycle-events-v1$onStartTick(class_310.java:6011)
at net.minecraft.class_310.method_1574(class_310.java)
at net.minecraft.class_310.method_1523(class_310.java:1180)
at net.minecraft.class_310.method_1514(class_310.java:801)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:462)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:88)
at org.prismlauncher.EntryPoint.listen(EntryPoint.java:126)
at org.prismlauncher.EntryPoint.main(EntryPoint.java:71)

A detailed walkthrough of the error, its code path and all known details is as follows:

-- Head --
Thread: Render thread
Stacktrace:
at dev.isxander.controlify.Controlify.tick(Controlify.java:207)
at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$0(ClientTickEvents.java:40)
at net.minecraft.class_310.handler$zjc000$fabric-lifecycle-events-v1$onStartTick(class_310.java:6011)

-- Last reload --
Details:
Reload number: 1
Reload reason: initial
Finished: Yes
Packs: vanilla, programmer_art, Fabric Mods, controlify.resource_pack.extra_mappings
Stacktrace:
at net.minecraft.class_6360.method_36565(class_6360.java:49)
at net.minecraft.class_310.method_1587(class_310.java:2413)
at net.minecraft.class_310.method_1514(class_310.java:825)
at net.minecraft.client.main.Main.main(Main.java:237)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:462)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:88)
at org.prismlauncher.EntryPoint.listen(EntryPoint.java:126)
at org.prismlauncher.EntryPoint.main(EntryPoint.java:71)

-- System Details --
Details:
Minecraft Version: 1.19.4
Minecraft Version ID: 1.19.4
Operating System: Windows 10 (amd64) version 10.0
Java Version: 17.0.7, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode, sharing), Oracle Corporation
Memory: 712960672 bytes (679 MiB) / 1270874112 bytes (1212 MiB) up to 8589934592 bytes (8192 MiB)
CPUs: 8
Processor Vendor: GenuineIntel
Processor Name: Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz
Identifier: Intel64 Family 6 Model 158 Stepping 13
Microarchitecture: Coffee Lake
Frequency (GHz): 2.40
Number of physical packages: 1
Number of physical CPUs: 4
Number of logical CPUs: 8
Graphics card #0 name: Intel(R) UHD Graphics 630
Graphics card #0 vendor: Intel Corporation (0x8086)
Graphics card #0 VRAM (MB): 1024.00
Graphics card #0 deviceId: 0x3e9b
Graphics card #0 versionInfo: DriverVersion=31.0.101.2121
Graphics card #1 name: NVIDIA GeForce GTX 1650
Graphics card #1 vendor: NVIDIA (0x10de)
Graphics card #1 VRAM (MB): 4095.00
Graphics card #1 deviceId: 0x1f91
Graphics card #1 versionInfo: DriverVersion=31.0.15.3161
Memory slot #0 capacity (MB): 8192.00
Memory slot #0 clockSpeed (GHz): 2.67
Memory slot #0 type: DDR4
Virtual memory max (MB): 24413.05
Virtual memory used (MB): 10104.00
Swap memory total (MB): 16384.00
Swap memory used (MB): 398.46
JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xms512m -Xmx8192m
Fabric Mods:
architectury: Architectury 8.1.79
cloth-config: Cloth Config v10 10.0.96
cloth-basic-math: cloth-basic-math 0.6.1
controlify: Controlify 1.1.0-beta.3+1.19.4
com_github_llamalad7_mixinextras: MixinExtras 0.2.0-beta.6
dev_isxander_sdl2-jni: sdl2-jni 2.26.4-4
org_hid4java_hid4java: hid4java 0.7.0
org_quiltmc_quilt-json5: quilt-json5 1.0.3
fabric-api: Fabric API 0.78.0+1.19.4
fabric-api-base: Fabric API Base 0.4.23+9ff28bcef4
fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.6.24+49abcf7ef4
fabric-biome-api-v1: Fabric Biome API (v1) 13.0.6+348a9c64f4
fabric-block-api-v1: Fabric Block API (v1) 1.0.5+e022e5d1f4
fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.33+c2e6f674f4
fabric-client-tags-api-v1: Fabric Client Tags 1.0.14+1134c5b8f4
fabric-command-api-v1: Fabric Command API (v1) 1.2.26+f71b366ff4
fabric-command-api-v2: Fabric Command API (v2) 2.2.5+e719b857f4
fabric-commands-v0: Fabric Commands (v0) 0.2.43+df3654b3f4
fabric-containers-v0: Fabric Containers (v0) 0.1.53+df3654b3f4
fabric-content-registries-v0: Fabric Content Registries (v0) 3.5.8+ae0966baf4
fabric-convention-tags-v1: Fabric Convention Tags 1.4.0+9a7c5daaf4
fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.2.14+aeb40ebef4
fabric-data-generation-api-v1: Fabric Data Generation API (v1) 11.3.7+5da15ca1f4
fabric-dimensions-v1: Fabric Dimensions API (v1) 2.1.44+7f87f8faf4
fabric-entity-events-v1: Fabric Entity Events (v1) 1.5.12+e45f7c65f4
fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.4.42+a1ccd7bff4
fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.51+df3654b3f4
fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.32+a1ccd7bff4
fabric-item-api-v1: Fabric Item API (v1) 2.1.16+09a3510cf4
fabric-item-group-api-v1: Fabric Item Group API (v1) 3.0.4+043f9acff4
fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.32+c477957ef4
fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.30+df3654b3f4
fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 2.2.14+5da15ca1f4
fabric-loot-api-v2: Fabric Loot API (v2) 1.1.26+75e98211f4
fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.1.30+9e7660c6f4
fabric-message-api-v1: Fabric Message API (v1) 5.1.0+1ee8be40f4
fabric-mining-level-api-v1: Fabric Mining Level API (v1) 2.1.38+49abcf7ef4
fabric-models-v0: Fabric Models (v0) 0.3.29+11ba9c3bf4
fabric-networking-api-v1: Fabric Networking API (v1) 1.3.0+a6f3ccfaf4
fabric-networking-v0: Fabric Networking (v0) 0.3.40+df3654b3f4
fabric-object-builder-api-v1: Fabric Object Builder API (v1) 7.0.2+63b515f4f4
fabric-particles-v1: Fabric Particles (v1) 1.0.22+f1e4495bf4
fabric-recipe-api-v1: Fabric Recipe API (v1) 1.0.7+a1ccd7bff4
fabric-registry-sync-v0: Fabric Registry Sync (v0) 2.1.3+a383ab97f4
fabric-renderer-api-v1: Fabric Renderer API (v1) 2.2.4+81e8c576f4
fabric-renderer-indigo: Fabric Renderer - Indigo 1.1.0+81e8c576f4
fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 3.2.37+df3654b3f4
fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.3.27+afca2f3ef4
fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 3.0.20+f1e4495bf4
fabric-rendering-v0: Fabric Rendering (v0) 1.1.40+df3654b3f4
fabric-rendering-v1: Fabric Rendering (v1) 2.1.0+8f878217f4
fabric-resource-conditions-api-v1: Fabric Resource Conditions API (v1) 2.3.0+e6c7d4eef4
fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.11.1+1e1fb126f4
fabric-screen-api-v1: Fabric Screen API (v1) 1.0.44+8c25edb4f4
fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.3.19+5da15ca1f4
fabric-sound-api-v1: Fabric Sound API (v1) 1.0.8+75e98211f4
fabric-transfer-api-v1: Fabric Transfer API (v1) 3.1.0+d51205dbf4
fabric-transitive-access-wideners-v1: Fabric Transitive Access Wideners (v1) 3.0.2+63b515f4f4
fabric-language-kotlin: Fabric Language Kotlin 1.9.3+kotlin.1.8.20
org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 1.8.20
org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 1.8.20
org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 1.8.20
org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 1.8.20
org_jetbrains_kotlinx_atomicfu-jvm: atomicfu-jvm 0.20.1
org_jetbrains_kotlinx_kotlinx-coroutines-core-jvm: kotlinx-coroutines-core-jvm 1.6.4
org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.6.4
org_jetbrains_kotlinx_kotlinx-datetime-jvm: kotlinx-datetime-jvm 0.4.0
org_jetbrains_kotlinx_kotlinx-serialization-cbor-jvm: kotlinx-serialization-cbor-jvm 1.5.0
org_jetbrains_kotlinx_kotlinx-serialization-core-jvm: kotlinx-serialization-core-jvm 1.5.0
org_jetbrains_kotlinx_kotlinx-serialization-json-jvm: kotlinx-serialization-json-jvm 1.5.0
fabricloader: Fabric Loader 0.14.19
fallingtree: FallingTree 3.12.1
java: Java HotSpot(TM) 64-Bit Server VM 17
manymanycommands: ManyManyCommands 0.0.4+1.19.4
ch_skyfy_json5configlib_json5-config-lib: json5-config-lib 1.0.22
io_github_microutils_kotlin-logging-jvm: kotlin-logging-jvm 3.0.4
io_github_xn32_json5k: json5k 0.2.1
manymanycommands_api: ManyManyCommands API 0.0.4+1.19.4
mca: Minecraft Comes Alive 7.4.8+1.19.4
minecraft: Minecraft 1.19.4
modern_beta: Modern Beta Fabric 6.3+1.19.4
modmenu: Mod Menu 6.2.0
nostalgic_tweaks: Nostalgic Tweaks 2.0.0-Beta-8.3
me_xdrop_fuzzywuzzy: fuzzywuzzy 1.4.0
silk-all: Silk (All modules) 1.9.8
silk-commands: Silk Commands 1.9.8
silk-core: Silk Core 1.9.8
silk-game: Silk Game 1.9.8
silk-igui: Silk Inventory GUI 1.9.8
silk-nbt: Silk NBT 1.9.8
silk-network: Silk Network 1.9.8
silk-persistence: Silk Persistence 1.9.8
supermartijn642configlib: SuperMartijn642's Config Lib 1.1.6
supermartijn642corelib: SuperMartijn642's Core Lib 1.1.7
wormhole: Wormhole (Portals) 1.1.12a
yet-another-config-lib: YetAnotherConfigLib 2.4.1
Launched Version: 1.19.4
Backend library: LWJGL version 3.3.1 SNAPSHOT
Backend API: Intel(R) UHD Graphics 630 GL version 3.2.0 - Build 31.0.101.2121, Intel
Window size: 1920x1001
GL Caps: Using framebuffer using OpenGL 3.2
GL debug messages:
Using VBOs: Yes
Is Modded: Definitely; Client brand changed to 'fabric'
Type: Client (map_client.txt)
Graphics mode: fancy
Resource Packs: vanilla, programmer_art, fabric, controlify:extra_mappings
Current Language: en_us
CPU: 8x Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz

Version 1.0.0 and 1.1.0 beta2 doesn't work.

Added the mod to my Minecraft instance, opened it, Minecraft started loading and at half the progress bar it crashed. Tried without other mods and it crashed too.

  • OS: [MacOS 13.3]
  • Minecraft Version: [1.19.4]
  • Mod Version: [1.1.0 beta 2 1.19.4]

I'm on Mac and it doesn't work. It's not that, I tried on my "old" Windows PC and it behaved the same.

As for version 1.0.0 of the mod it loads fine but I can't use the controller or change the settings of the mod. The controller I'm using is a Xbox Series Controller.

YACL Conflict

Mod Info (fill out the following information)

  • Mod name: YetAnotherConfigLib
  • Mod version: 2.2.0+update.1.19.4-SNAPSHOT

Describe the problem
YACL sliders cannot be controlled with a controller.

To Reproduce
Steps to reproduce the behavior:

  1. Open a YACL interface that contains a SliderController
  2. Try to move it
  3. See error

Expected behavior
Users should be able to operate the sliders without problem.

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 22w05a
  • Controlify Version: 0.1.0+1.19.4

Compound controllers

Multiple controllers/joysticks can be merged together into a single Controller instance. This would allow other joystick inputs to be handled as one.

This functionality could be extended to binds so each controller connected would have a different set of buttons, even if they are still identified as the same button: (e.g. J1-A would be the A button on gamepad 1).

Map controller actions to existing vanilla keybinds

A secondary keybind for controller buttons should be added to the controls menu. Controlify should then hook into the KeyMapping isDown and consumeClick to allow for support without modifying every single query and work seamlessly with other mods.

In some cases, Minecraft does not use the aformentioned methods but query directly with the keycode bound for the option. In these edge cases, manual mixing will be required.

List supported controllers

Is your feature request related to a problem? Please describe.
No.

Describe the solution you'd like
A list of supported controller somewhere (e.g. README)

Describe alternatives you've considered
๐Ÿคท๐Ÿฝโ€โ™‚๏ธ

Additional context
None

Shift Clicking dosent work/Inputs that should not work in the inventory still do

When trying to shift click using the Y button it only makes the character model jolt up (I assume this is because it may be trying to open the inventory, even though you would already be in it.) and you can use buttons like toggle perspective and drop item
while still in the inventory

To recreate this have key binds for inventory and shift click be set to Y button, and use toggle perspective and drop item
buttons while in the inventory

Usually it should have the item quick move (Shift Click) like on bedrock edition, and you should not be able to drop items using the drop button or change perspective while still in the inventory

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 1.19.4
  • Mod Version: 1.1.0

Haptics

Relevant in-game actions should feedback to the controller with rumble. GLFW does not have an implementation for this and a native driver/JNA wrapper would have to be found/created for this to work whastsoever. Damn you GLFW!

Radial menus

For heavily modded scenarios, it may be necessary for a radial menu to appear where a joystick can control different actions. This use-case for this is already partially solved with the addition of compound bindings, but in terms of UX, radial menus are better.

Custom name lazily updates in config

Describe the bug
When changing the custom name, it does not update the YACL category name until closing and re-opening the GUI.

To Reproduce
Steps to reproduce the behavior:

  1. Change controller name
  2. Apply changes
  3. See category name doesn't update

Expected behavior
The name should immediately update once clicking apply.

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 22w05a
  • Mod Version: 0.1.0+1.19.4

Pop up virtual keyboard upon clicking on "Show Chat" on Deck

Is your feature request related to a problem? Please describe.
"Show Chat" interaction on Steam Deck doesn't make the keyboard show up as well. This leaves the chat box "floating" on top of an empty area (assuming the chat box height was modified, and by the way, the correct configuration value is 0.44625 for Deck, assuming fullscreen gameplay.)

Describe the solution you'd like
The idea is to just have the virtual keyboard show up whenever the chat is opened, and hide it whenever the chat is closed. This should ideally account for the scenario in which the keyboard was hidden by the user, to put the chat box back to its original position (just above the hotbar) and clicking on the text box should bring it up again.

Most probably requires to use the Steamworks API to properly function, and IDK if there are Java bindings for that.

Describe alternatives you've considered
Clicking STEAM + X after opening chat, but it's a subpar UX.

Additional context
Not applicable

Controller identification fails on Linux when launcher is containerised

Describe the bug
ControllerHIDService fails to fetch natives when Minecraft is launched through a launcher that is containerised on Linux, such as flatpak or snap. This is because the flatpak (in this case prism) doesn't ask for libusb

This is a big problem because I large demographic of this mod would be steamdeck users, where the recommended way of running Minecraft Java is through Prism Launcher on flatpack.

To Reproduce
Steps to reproduce the behavior:

  1. Launch minecraft on Prism Launcher flatpak
  2. See error

Expected behavior
The game should identify controllers just fine.

[Suggestion] Allow for the user to remove the background of the text

Is your feature request related to a problem? Please describe.
It's not really a problem since I'm fine with a background behind the text but sometimes I think me or other users would prefer if there was no background and it was just the text with text shadow behind to make it easy to read and stand out

Describe the solution you'd like
I would like an option maybe in the config where you could specify if you want a text background or not. If the user picks no background, maybe there could be an option where if the user wants text shadow or not behind the text.

Describe alternatives you've considered
None

Additional context
None

Container slot snapping

The virtual mouse should snap it's cursor to the nearest slot, just like bedrock edition and legacy console editions. An API for mods to implement this should also be made.

D-pad gameplay works in inventory.

Describe the bug
While you in the inventory, you can use d-pad keybindings. (Like open the chat, change the camera, drop somethings.)

To Reproduce
Steps to reproduce the behavior:

  1. Go to the world.
  2. Open the inventory.
  3. Press the d-pad.
  4. See error.

Expected behavior
I think cursor gonna move on the slots.

Screenshots

2023-03-19.16-20-24.mp4

(Sorry for the breath, I thought I muted the mic. Xd)

Minecraft Info (please complete the following information):

  • OS: Windows 10 pro.
  • Minecraft Version: 1.19.4 [quilt, 0.18.5]
  • Mod Version: 0.1.0+1.19.4

Additional context
Add the cursor move on the slots with d-pad?

Split-screen support

Multiple controllers can be connected and two players can play together in singleplayer. It is unclear how this would work in multiplayer (multiple accounts signed in at once?)

This is not trivial whatsoever, the client game loop specifically runs logic for the local player and relies on this player instance for a lot of logic, adding a second may complicate logic and mixins a LOT. Maybe make a new LocalPlayer instance that acts as two players at once?

Screens are also something to consider, how do you decide if a Screen should show for one player or the whole game window? How does mod compatibility fit into this?

Button guide in various GUIs

Some menus should have a guide about what buttons to press, like B to exit in title screen, or X to split half in container screen.

Crash when downloading libraries for vibration support

Hey, I just downloaded this mod and sadly it crashed my game when I wanted to download the libraries for vibration support. Then when I wanted to start the game again - it crashed one more time.

To Reproduce
Steps to reproduce the behavior:

  1. Create an instance like the one I have (everything is in the logs)
  2. When there's a prompt about downloading library for vibration support, click yes
  3. The game crashes
  4. Entering the game again is not possible due to crash.

Expected behavior
Game would start as usual.

Minecraft Info:

  • OS: Windows 11
  • Minecraft Version: 1.19.4
  • Mod Version: 1.1.0 beta.3 1.19.4 fabric

Additional context
Full logs: https://mclo.gs/VfctrkS

D-Pad for GUIs, or "inputs that basically do the same thing"

Is your feature request related to a problem? Please describe.
The really annoying feeling of not being able to use the D-Pad on menus.

Describe the solution you'd like
Please make the D-Pad usable for GUIs, ALONGSIDE the left analog stick or whatever is already mapped; this might just be best done by "binding the same function twice", even though that's something no one wants to show in any configuration screen, I guess.

Describe alternatives you've considered
Left stick is fine, it just doesn't line up with some people's muscle memory.

Additional context
In Bedrock you can use both the left stick and the D-Pad to navigate through menus.

Crash on Startup

Game crashes on startup

To Reproduce
Steps to reproduce the behavior:
Open game
Crash

Expected behavior
The game starting

Screenshots
image

Minecraft Info (please complete the following information):
Windows 10
1.19.4
1.0.0 beta.2

Additional context
crash-2023-04-06_00.09.38-client.txt

Graphical controller button action assignment

A graphical image of a controller should be navigable, being able to add actions to each button such as inventory, back, select.

This should be configurable per-controller and have multiple styles for different varieties of controller such as Xbox, Dualshock, Nintendo.

Server integration

A server could ban the use of future features of the mod that may be seen as cheating, such as reach-around placement, if it gets added in the future.

Additionally, servers could also register custom keybinds to the client so it can receive custom input in its own way that will trigger a server action.

Joystick support

What are joysticks?

Joysticks are very different to gamepads in GLFW: Joysticks have inputs of unnamed axes, buttons and hats with an unknown size whilst gamepads provide a set up defined buttons, like ABXY, left and right trigger, a dpad and thumbsticks.

Approach 1

This makes joysticks a lot harder to handle in games due to how abstract they are. This can be solved with mappings, https://github.com/gabomdq/SDL_GameControllerDB, which GLFW handles already. For UX purposes, an editor for mappings should be built-in and the mod should query some kind of API to find mappings already out there. These joysticks will then need to have a sort of initial setup process, to sort out the mappings, much like the gamepad thumbstick deadzone calibration.

Approach 2

Due to the abstract nature of Controlify's bind system, this mapping process may not need to exist, as the bind process could just create an abstract bind anyway with resource packs adding themes to joystick buttons which by default, may be something like A1 (axis 1), B1 (button 1) and H1 (hat 3). This is probably the way I will go with Controlify's implementation as it allows for more customizability with mappings and doesn't limit a user with pedals, steering wheels etc just to the input of one single gamepad.

To-do

  • Basic joystick input
  • Controller abstraction
  • Joystick binds
  • Resource-pack based mapping
  • Joystick button icon rendering
  • Joystick onboarding screen to setup mapping and binds
  • SDL_GameControllerDB in-game search tool to find mappings

Configuration menu

Users should be able to customize different settings about their controller such as deadzones.

  • Deadzone configuration per-controller
  • Accessibility configuration per-controller (e.g. toggle sprint, auto jump)
  • Basic controller bind configuration per-controller
  • Controller custom name

Minecraft 1.19.4 - Crash on Startup

The game immediately closes when attempting to execute Controlify 1.1.0-beta.3+1.19.4, even when using YetAnotherConfigLib 2.4.1

The game crashed whilst initializing game
Error: java.lang.RuntimeException: Could not execute entrypoint stage 'client' due to errors, provided by 'controlify'!

Crash report.
crash-2023-04-20_17.49.00-client.txt

Bind conflict behaviour

Currently, compound binds are very hard to handle, if a bind with just one of the button is handled first, the compound bind can no longer be handled because then two actions would happen at once.

This could be solved with some sort of handler system:

Instead of checking a bind's state from an input event, handlers could be added to a bind on init which then call a consumer when it's state changes, this handling order could then be sorted, from most complex compound bind to simple single key binds.

Reach-around block placement

Like in bedrock edition, placers should be able to place a block at the end of a bridge even when not looking at the face. This feature is present in both Midnight Controls and Bedrock-ify.

Multiplayer should be considered. When implementing #15, the server should be able to force disable this feature with a toggle to disable in Multiplayer.

Button mappings do not save

Describe the bug
When changing button mappings, they do not save to config unless another non-instant is changed. This underlying bug is due to how YACL handles instant application, it does not notify itself that it needs to save.

To Reproduce
Steps to reproduce the behavior:

  1. Go to controller binding group
  2. Change a binding
  3. Press done
  4. Restart
  5. See binding has not saved

Expected behavior
Binding should instantly save as soon as updated.

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 22w05a
  • Mod Version: 0.1.0+1.19.4

User definable custom binds

This would give users the ability to create custom binds by mapping a key to a vanilla key mapping, which is already a thing in the code.

Controller deadzone callibration

How?
On first connection of a controller, a screen to calibrate the best values for deadzones should be available, where the user does not touch the joysticks whatsoever for a certain period of time, then pick a rounded number for deadzone values.

Why?
When a user first connects a controller, and the deadzones require to be higher than the default 0.2, then inputs will be continually be registered and the user will not be able to use Minecraft. This is present even when they decide to just use keyboard and mouse, because the constant input will override keyboard and mouse mode back to controller.

Rewrite player look handling

Why?

Currently, the controller player look system is very janky, and was adapted from the MouseHandler code in Minecraft. This provides a jittery feel to the input and does not stop immediately due to the accumulated input being handled over multiple render ticks.

This will close #6.

How?

Instead, this should be re-written from scratch from resources elsewhere on the internet that is optimized for controller input.

Resources

Missing guide button for all Playstation controllers - and maybe more

Describe the bug
The guide (PS) button is absent, so the "missing texture" will be used. I didn't test the "touchpad" button on Dualsense and Dualshock 4, but I am leaving it there since those controllers actually have touchpads.

To Reproduce

  • Map the PS button on any key.

Minecraft Info (please complete the following information):

  • Mod Version: 1.1.0-beta.3+1.19.4

Additional context
I should really make those glyphs.

Vanilla screen compatibility

All vanilla screens should be able to be operated fully with no drawbacks or annoyances to using that specific UI with a controller

Screens

  • Singleplayer world select can't select world unless focusing on bottom world
  • Title screen no change needed
  • Multiplayer server select can't edit/delete server unless focusing on bottom server
  • Options menu and submenus slider focus behaviour needs improving
  • Container screens can't shift click items
  • Creative block picker can't move through tabs without vmouse
  • Creative inventory can't clear inventory
  • Survival inventory can't shift click items onto body
  • Language select screen can't navigate to close screen without focusing on bottom language

Crash when initializing controllers

Describe the bug
Minecraft crashes after the end of loading with the version 1.1.0-beta.3+1.19.4

To Reproduce
Steps to reproduce the behavior:

  1. Install version 1.1.0-beta.3+1.19.4
  2. Run minecraft
  3. Wait for the end of loading
  4. See the error

Expected behavior
Launching Minecraft

Minecraft Info:

  • OS: Linux Mint 21.1 x86_64
  • Minecraft Version: fabric-loader-0.14.19-1.19.4
  • Mod Version: 1.1.0-beta.3+1.19.4

Additional context
logs
latest.log

Button guide in-game

A HUD should be toggleable which lets users know which actions can be used based on the player's state.

Player look jittery-ness

When moving the player head around, the view is slightly jittery. This is quite noticeable when sprinting around..

You can't control YACL slider values with a controller

Describe the bug
While you can press the A button and move the left stick to assign a new value in a slider using vanilla slider options, you cannot do the same on YACL menus (including Controlify's own configuration screen). This is an issue.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the Controlify config screen
  2. Look for a slider value
  3. Try to change it with a controller, WITHOUT using the virtual mouse
  4. See the UX error

Expected behavior
Clicking A and then going left and right with the stick should decrease or increase the slider value.

Screenshots
Not really applicable.

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 1.19.4
  • Mod Version: 1.1.0-beta.3+1.19.4

Additional context
It's also an issue with Sodium

Broken deadzone detection

Is your feature request related to a problem? Please describe.
If for whatever reason, controller calibration has been skipped, or a joystick is not mapped (default resting state is 0.0 and triggers return -1.0 by default), the user is unable to use keyboard/mouse input because every tick, Controlify detects input and sets the input mode to controller.

Describe the solution you'd like
Controlify should detect the constant changes in input mode (e.g., every tick it changes back and forth), and automatically disable the controller currently in use and send a toast.

Describe alternatives you've considered
The behaviour of switching input mode could be changed so it will only switch to controller if a button is pressed (which doesn't have deadzone issues).

Touch controls

Is your feature request related to a problem? Please describe.
Java Edition does not have full touch controls

Describe the solution you'd like
Add touch controls that look and behave like Bedrock Edition.

Describe alternatives you've considered
A separate mod?

Additional context

Basic screen navigation

Players should be able to navigate Minecraft Screens with just the controller with out-of-box support for every vanilla gui component and screen.

Additionally, it should be trivial for other mod developers to add controller support to their own GUIs and components with a simple and intuitive API.

Virtual mouse snapping for other GUI elements, such as the recipe book

Is your feature request related to a problem? Please describe.
I am not really frustrated with anything, but then I thought there were people who legit use the recipe book? Like, wtf, learn the crafting recipes, casuals...

Describe the solution you'd like
For those people who are new to the game or coming from Bedrock, it might be wise to have a snap target for the recipe book button, then some for the recipe book tabs, one for the searchbar, one for each recipe icon and the last one for the "show only craftables" icon. Yeah basically the whole recipe book GUI.

Describe alternatives you've considered
People could probably learn the crafting recipes old style. I miss those days of discovery.

Additional context
Not really applicable.

Button Labels Switch Offbrand

Button labels are switched for some buttons on the PowerA Switch controller Model 1511370-01. Controlify is identifying Button A as b_button, for instance.

A/B and X/Y are the switched buttons i've noticed so far, but I can't find anywhere to change or remap the pad layout. In fact when i tried to remap individual buttons, the Inventory keybind to the actual Y button it exited the mod settings menu, and when i tried to remap the GUI Press keybind to the actual A button it exited the mod settings menu. It won't set the actual B button to GUI Back, either, so I'm not sure if it's able to save keybind changes ingame at all.

EDIT: Apparently, you have to hold the mouse button down to change keybinds.

After changing the keybinds in the configuration json, the expected buttons on the controller do the expected actions, but the button labels (hints) are still wrong.

I kind of remember having to do something like "switch identity profiles" specifically for the PowerA controller on Midnight Controls.

[Suggestion] Allow user to make buttons guide bottom.

Is your feature request related to a problem? Please describe.
I see first time, what the hud on the top of the screen. This kind of throws me off. For me, it will be better, if the guide buttons was at the bottom on screen. (And I think that many people will like the bottom one...)

Describe the solution you'd like.
Add in the global settings the "hud side". You can make default the top side, but add additional the bottom. It will be great solution.

Conflict with VulkanMod

Controlify is conflicting with VulkanMod.

Stacktrace

org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: @At("CONSTANT") on net/minecraft/class_338::modifyChatOffset with priority 1000 cannot inject into net/minecraft/class_338::method_1805(Lnet/minecraft/class_4587;III)V merged by net.vulkanmod.mixin.gui.ChatComponentM with priority 1000 [PREINJECT Applicator Phase -> controlify.mixins.json:feature.chatkbheight.ChatComponentMixin from mod controlify -> Prepare Injections ->  -> constant$zfg000$controlify$modifyChatOffset(I)I -> Prepare]
	at org.spongepowered.asm.mixin.injection.code.Injector.findTargetNodes(Injector.java:305)
	at org.spongepowered.asm.mixin.injection.code.Injector.find(Injector.java:240)
	at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.prepare(InjectionInfo.java:421)
	at org.spongepowered.asm.mixin.transformer.MixinTargetContext.prepareInjections(MixinTargetContext.java:1338)
	at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.prepareInjections(MixinApplicatorStandard.java:1053)
	at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:395)
	at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:327)
	at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:421)
	at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:403)
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)
	at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234)
	at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202)
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:422)
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323)
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218)
	at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:112)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at net.minecraft.class_315.<init>(class_315.java:469)
	at net.minecraft.class_310.<init>(class_310.java:470)
	at net.minecraft.client.main.Main.main(Main.java:198)
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:462)
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
	at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:88)
	at org.prismlauncher.EntryPoint.listen(EntryPoint.java:126)
	at org.prismlauncher.EntryPoint.main(EntryPoint.java:71)

Mod list

- alternate-current 1.5.0
- bedrockify 1.8+mc1.19.4
- cardinal-components-base 5.1.0 via do_a_barrel_roll
- cardinal-components-entity 5.1.0 via do_a_barrel_roll
- cem 0.7.3
- cicada 0.3.0 via do_a_barrel_roll
- cloth-basic-math 0.6.1 via cloth-config
- cloth-config 10.0.96 via bedrockify
- com_akuleshov7_ktoml-core-jvm 0.3.0 via zoomify
- com_github_llamalad7_mixinextras 0.2.0-beta.6 via controlify
- com_github_luben_zstd-jni 1.5.2-2 via dashloader
- com_velocitypowered_velocity-native 3.2.0-SNAPSHOT via krypton
- completeconfig-base 2.3.1 via cem
- completeconfig-gui-cloth 2.3.1 via cem
- controlify 1.1.0-beta.3+1.19.4
- dashloader 5.0.0-alpha.13+1.19.4
- debugify 1.19.4+1.0
- dev_isxander_sdl2-jni 2.26.4-4 via controlify
- dev_isxander_settxi_settxi-core 2.10.6 via zoomify
- dev_isxander_settxi_settxi-gui 2.10.6 via zoomify
- dev_isxander_settxi_settxi-kotlinx-serialization 2.10.6 via zoomify
- dev_quantumfusion_hyphen 0.4.0-rc.3 via dashloader
- dev_quantumfusion_taski 2.1.0 via dashloader
- do_a_barrel_roll 2.7.0+1.19.4
- entityculling 1.6.2-mc1.19.4
- fabric-api 0.78.0+1.19.4
- fabric-api-base 0.4.23+9ff28bcef4 via fabric-api
- fabric-api-lookup-api-v1 1.6.24+49abcf7ef4 via fabric-api
- fabric-biome-api-v1 13.0.6+348a9c64f4 via fabric-api
- fabric-block-api-v1 1.0.5+e022e5d1f4 via fabric-api
- fabric-blockrenderlayer-v1 1.1.33+c2e6f674f4 via fabric-api
- fabric-client-tags-api-v1 1.0.14+1134c5b8f4 via fabric-api
- fabric-command-api-v1 1.2.26+f71b366ff4 via fabric-api
- fabric-command-api-v2 2.2.5+e719b857f4 via fabric-api
- fabric-commands-v0 0.2.43+df3654b3f4 via fabric-api
- fabric-containers-v0 0.1.53+df3654b3f4 via fabric-api
- fabric-content-registries-v0 3.5.8+ae0966baf4 via fabric-api
- fabric-convention-tags-v1 1.4.0+9a7c5daaf4 via fabric-api
- fabric-crash-report-info-v1 0.2.14+aeb40ebef4 via fabric-api
- fabric-data-generation-api-v1 11.3.7+5da15ca1f4 via fabric-api
- fabric-dimensions-v1 2.1.44+7f87f8faf4 via fabric-api
- fabric-entity-events-v1 1.5.12+e45f7c65f4 via fabric-api
- fabric-events-interaction-v0 0.4.42+a1ccd7bff4 via fabric-api
- fabric-events-lifecycle-v0 0.2.51+df3654b3f4 via fabric-api
- fabric-game-rule-api-v1 1.0.32+a1ccd7bff4 via fabric-api
- fabric-item-api-v1 2.1.16+09a3510cf4 via fabric-api
- fabric-item-group-api-v1 3.0.4+043f9acff4 via fabric-api
- fabric-key-binding-api-v1 1.0.32+c477957ef4 via fabric-api
- fabric-keybindings-v0 0.2.30+df3654b3f4 via fabric-api
- fabric-language-kotlin 1.9.3+kotlin.1.8.20
- fabric-lifecycle-events-v1 2.2.14+5da15ca1f4 via fabric-api
- fabric-loot-api-v2 1.1.26+75e98211f4 via fabric-api
- fabric-loot-tables-v1 1.1.30+9e7660c6f4 via fabric-api
- fabric-message-api-v1 5.1.0+1ee8be40f4 via fabric-api
- fabric-mining-level-api-v1 2.1.38+49abcf7ef4 via fabric-api
- fabric-models-v0 0.3.29+11ba9c3bf4 via fabric-api
- fabric-networking-api-v1 1.3.0+a6f3ccfaf4 via fabric-api
- fabric-networking-v0 0.3.40+df3654b3f4 via fabric-api
- fabric-object-builder-api-v1 7.0.2+63b515f4f4 via fabric-api
- fabric-particles-v1 1.0.22+f1e4495bf4 via fabric-api
- fabric-recipe-api-v1 1.0.7+a1ccd7bff4 via fabric-api
- fabric-registry-sync-v0 2.1.3+a383ab97f4 via fabric-api
- fabric-renderer-api-v1 2.2.4+81e8c576f4 via fabric-api
- fabric-renderer-indigo 1.1.0+81e8c576f4 via fabric-api
- fabric-renderer-registries-v1 3.2.37+df3654b3f4 via fabric-api
- fabric-rendering-data-attachment-v1 0.3.27+afca2f3ef4 via fabric-api
- fabric-rendering-fluids-v1 3.0.20+f1e4495bf4 via fabric-api
- fabric-rendering-v0 1.1.40+df3654b3f4 via fabric-api
- fabric-rendering-v1 2.1.0+8f878217f4 via fabric-api
- fabric-resource-conditions-api-v1 2.3.0+e6c7d4eef4 via fabric-api
- fabric-resource-loader-v0 0.11.1+1e1fb126f4 via fabric-api
- fabric-screen-api-v1 1.0.44+8c25edb4f4 via fabric-api
- fabric-screen-handler-api-v1 1.3.19+5da15ca1f4 via fabric-api
- fabric-sound-api-v1 1.0.8+75e98211f4 via fabric-api
- fabric-transfer-api-v1 3.1.0+d51205dbf4 via fabric-api
- fabric-transitive-access-wideners-v1 3.0.2+63b515f4f4 via fabric-api
- fabricloader 0.14.18
- fastquit 2.1.0+1.19.3
- ferritecore 5.2.0
- firstperson 2.2.3
- java 17
- krypton 0.2.2
- ksyxis 1.1
- lambdynlights 2.3.0+1.19.4
- langfiles-plus 1.0.0 via cicada
- lithium 0.11.1
- memoryleakfix 1.0.0
- minecraft 1.19.4
- mixin-conflict-helper 1.2.0
- mixintrace 1.1.1+1.17
- modelfix 1.10
- modmenu 6.1.0-rc.4
- org_hid4java_hid4java 0.7.0 via controlify
- org_jetbrains_kotlin_kotlin-reflect 1.8.20 via fabric-language-kotlin
- org_jetbrains_kotlin_kotlin-stdlib 1.8.20 via fabric-language-kotlin
- org_jetbrains_kotlin_kotlin-stdlib-jdk7 1.8.20 via fabric-language-kotlin
- org_jetbrains_kotlin_kotlin-stdlib-jdk8 1.8.20 via fabric-language-kotlin
- org_jetbrains_kotlinx_atomicfu-jvm 0.20.1 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-coroutines-core-jvm 1.6.4 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-coroutines-jdk8 1.6.4 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-datetime-jvm 0.4.0 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-serialization-cbor-jvm 1.5.0 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-serialization-core-jvm 1.5.0 via fabric-language-kotlin
- org_jetbrains_kotlinx_kotlinx-serialization-json-jvm 1.5.0 via fabric-language-kotlin
- org_lwjgl_lwjgl-shaderc 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-shaderc_natives-linux 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-shaderc_natives-windows 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-vma 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-vma_natives-linux 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-vma_natives-windows 3.3.1 via vulkanmod
- org_lwjgl_lwjgl-vulkan 3.3.1 via vulkanmod
- org_quiltmc_quilt-json5 1.0.3 via controlify
- pride 1.2.0+1.19.4 via lambdynlights
- settxi-gui-yacl 2.10.6 via zoomify
- sound_physics_remastered 1.19.4-1.1.0
- spruceui 4.2.0+1.19.4 via lambdynlights
- starlight 1.1.1+fabric.ae22326
- vulkanmod 0.2.5
- yet-another-config-lib 2.4.0
- zoomify 2.9.2

Game info

Minecraft Version: 1.19.4
Fabric Loader Version: 0.14.18

Message autogenerated using MixinConflictHelper

Minecraft Info (please complete the following information):

  • OS: Windows 11
  • Minecraft Version: 1.19.4
  • Mod Version: 1.1.0-beta.3+1.19.4

Can't set custom bind

Describe the bug
When I press a bind to change it, the label change to "Press any button", and when I do an action on the controller, it works for the menu (like cursor moving or going to the previous menu) but don't register the new bind

Screenshots
image

Minecraft Info (please complete the following information):

  • OS: [Windows 11
  • Minecraft Version: 1.19.4
  • Mod Version: v1.1.0-beta.2

Additional context
I tried with an USB PS3 controller and an Xbox One controller connected with Bluetooth.

Manual controller switching

Instead of automatically switching controllers, a toast should appear on connect where you can press any button to switch.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.