Controlify 1.5.0 for Minecraft 1.20.1
New Features
Radial Menu
Added a radial menu for quick access to up to 8 common binds that could not fit on the controller buttons. The menu can be opened by holding down the bind (right d-pad by default), then selecting with the action you want (right-stick by default) and letting go of the bind.
The menu can be configured in the config screen, as usual.
Unknown Controller Submission
When your controller is unidentified, a screen will pop up, asking you to send off some controller data in order for me to add it to the identification database. You can skip this screen if you want to, and it won't bother you again for that controller.
Changes
Controller Handling
A lot of changes and improvements have been made regarding the way Controlify handles controllers:
- Moved to an SDL2-based driver when available, you shouldn't notice any difference, but may support more controllers than the old GLFW approach.
- XInput devices are now named properly in some cases, instead of just "XInput Controller"
- Upon failure of detection, the controller will continue to load, as an unknown controller.
- Updated the required SDL2 natives version to 2.28.2, hopefully fixing some controller bugs.
- Reduced the delay before the mouse hides itself after use when using Mixed Input mode (from 3 to 2 seconds).
- Added the 'PRINT_VID_PID' debug property which prints the vendor and product ID of any connected controller.
Configuration Screen
- Updated some controller arts.
- Made the reset button act as an unbind button for controls.
- Added a new "What's New" section to the configuration screen, so it's easier to spot the new features.
- Fixed controller names not stacking properly when multiple controllers have the same name.
- Credited Andrew Grant for making the controller art on the carousel screen, with a link to his GitHub.
Bug Fixes
As usual, a lot of bug fixes have been made:
- Fixed not being able to type in text boxes after focusing them with a controller.
- Fixed controller guides in inventory corresponding to the incorrect binds.
- Fixed rumble not working intermittently.
- Fix server reach-around not respecting config option and always being disallowed.
- Fixed the chat rendering incorrectly when hidden.
- Fixed the controller being disabled when pressing "Maybe Later" on the calibration screen if the controller was already calibrated.
- Fix mixin remap error when starting up the game.
- Fix missing textures relating to joysticks.
- Fix missing language entry for joystick axis deadzones.
Controller Database Updates
Changes to the database that Controlify uses to identify controllers at runtime.
- Added more Xbox controller identifications.
- Added 8BitDo SN30 Pro & Ultimate.
Translations
- Update chinese translation
Controlify 1.4.5 for 1.20
Bug Fixes
- Fix some movement input not working after hotplugging a controller until you switch worlds
- Improve the feel of keyboard-like movement input
- Use SDL when a controller isn't detected with hid4java
- Fix crash on servers due to loading sounds
- Resolve incompatibility with Fabric Item Group API where custom creative tabs would be cycled through in a random order
Controlify 1.4.2 for 1.20
New Features
- Added a 'Maybe Later' button to the calibration screen, which will close the screen and not calibrate the controller.
- Added a 'Mixed Input' option which allows you to make any controller behave like the Steam Deck.
- Implement SDL controller identification when
hid4java
is unavailable (on macOS ARM).
Changes
- Controller rumble is silenced whilst the window is out of focus, rather than the previous behaviour where all rumble effects were cancelled.
- Optimize rumble driver calls to not send every tick if unnecessary.
Bug Fixes
- Fix the controller default config syncing with the normal config after a serialization failure.
Controlify 1.4 for 1.20
Additions
- New config option to render ingame button guide HUD at the bottom rather than the top.
- Support for dpad navigation in screens.
- Changed the no gyro supported message to something more suitable for Steam Deck users, directing them to use Steam Input.
Bug Fixes
- Fix crash when opening journeymap menu with a Steam Deck.
- Fix some vanilla override bindings from not working.
- Fix crash on shutdown when not using SDL mappings with a joystick connected.
- Fix virtual mouse not working properly on most GUIs.
- Fix buttons not auto-focusing on Steam Deck.
- Fix rare crash to do with
delegate_setup
config option.
Localisation
- Updated Chinese translation.
Controlify 1.3.1 for 1.20
Additions
- Added new setting to have a custom scale for the in-game button guide hud. This is relative to the Minecraft gui scale setting.
- Better Steam Deck handling, allowing simultaneous use of Steam Input features like mouse gyro emulation and touchpads. This is temporary until the Steam Deck driver is finished.
Changes
- Reimplement immediately-fast compatibility that was temporarily removed in 1.20 betas. Your button guides should be a little more performant now.
Controlify 1.3 for 1.20
New Features
- Added a config setting
delegate_setup
so modpack authors can move the controller setup to when users enter the config screen.
Controller Carousel Screen
This screen appears where the YACL config once was, after opening controller settings. You can select a controller from the carousel to either edit its settings or set it as the active controller.
On each entry of the carousel, you can now also see a pixel art icon of the specific controller type, thanks to Andrew Grant for making these!
New Controller Settings Screen
Upon opening an individual controller config, a more refined YACL config screen will appear. Three categories are available: Basic, Advanced and Controls. Basic contains the most common settings you will change, advanced holds settings such as gyro and rumble.
With the new settings screen, comes the features of YetAnotherConfigLib v3. Some option descriptions are now enhanced with gifs and images to better explain what they do. Because the controls groups are now actually classes as groups, searching the group name will show all controls in that group.
Greatly improved gyro support
I got my hands on a controller with gyro, so I was able to test and refine the functionality to make it as intuitive as possible. For starts, it actually works now (I forgot to enable the sensor) and the flick stick is now a smooth animation rather than just jumping 90 degrees.
Better controller name detection
If not provided by explicit controller detection, Controlify now uses the name found in the SDL game controller database, so more controllers should have more accurate names.
Experimental anti-snapback
Every spring isn't perfect, and can sometimes cause the stick to overshoot the neutral position when returning to it. This can cause the camera to drift slightly. This feature attempts to mitigate that. This feature can already be found in DS4Windows, but a more native solution is always better.
To try it out, you need to set a JVM flag in your launcher: -Dcontrolify.debug.use_snapback=true
,
however, do be warned, this is extremely buggy and can cause the stick to jitter.
Server-side support
Controlify now has server-side support, meaning it is now recommended to install Controlify on your server.
/vibratecontroller
command
This command allows you to make players' controllers vibrate. You can specify the intensity of both the low frequency and high frequency motors, and the duration of the vibration.
You can select to either do a simple vibration, or place the vibration in world-space (either bound to an entity or position) with a range to have the vibration intensity decrease with distance.
/vibratecontroller <receivers> <low_freq_intensity> <high_freq_intensity> <duration_ticks> <(static|positioned)> [<range>] [<(position|entity>]
/vibratecontroller @a 0 0.25 200 positioned 10 ~ ~ ~
/vibratecontroller @a 0.75 1 50 static
/vibratecontroller @a 0.75 1 20 positioned 10 @e[type=minecraft:warden,sort=nearest,limit=1]
/execute as @e[type=!minecraft:player] run vibratecontroller @a 1 0 5 positioned 20 @s
This comes with a client option in global settings to ignore these server requests to vibrate.
Reach-around policy
When Controlify is stored in the server, by default, the reach-around policy is set to disallow
. You can
allow reach-around placement on your server by setting the reach_around_policy
config option to true
.
Changes
- Removed extra mappings resource pack (merged into base resources)
Bug Fixes
- Fixed hotplugging not working when no controllers were connected at launch
- Fixed natives not working on Apple Silicon
Controlify 1.3 (Beta 2) for 1.20
Additions
Controller Carousel Screen
This screen appears where the YACL config once was, after opening controller settings. You can select a controller from the carousel to either edit its settings or set it as the active controller.
On each entry of the carousel, you can now also see a pixel art icon of the specific controller type, thanks to Andrew Grant for making these!
New Controller Settings Screen
Upon opening an individual controller config, a more refined YACL config screen will appear. Three categories are available: Basic, Advanced and Controls. Basic contains the most common settings you will change, advanced holds settings such as gyro and rumble.
With the new settings screen, comes the features of YetAnotherConfigLib v3. Some option descriptions are now enhanced with gifs and images to better explain what they do. Because the controls groups are now actually classes as groups, searching the group name will show all controls in that group.
Greatly improved gyro support
I got my hands on a controller with gyro, so I was able to test and refine the functionality to make it as intuitive as possible. For starts, it actually works now (I forgot to enable the sensor) and the flick stick is now a smooth animation rather than just jumping 90 degrees.
Better controller name detection
If not provided by explicit controller detection, Controlify now uses the name found in the SDL game controller database, so more controllers should have more accurate names.
Experimental anti-snapback
Every spring isn't perfect, and can sometimes cause the stick to overshoot the neutral position when returning to it. This can cause the camera to drift slightly. This feature attempts to mitigate that. This feature can already be found in DS4Windows, but a more native solution is always better.
To try it out, you need to set a JVM flag in your launcher: -Dcontrolify.debug.use_snapback=true
,
however, do be warned, this is extremely buggy and can cause the stick to jitter.
Bug Fixes
- Fixed the natives onboarding screen getting stuck until a restart
- Fix crash when attempting to load joysticks.
Controlify 1.3 Beta 1 (for 1.20)
Updated for Minecraft 1.20
New Features
- Added a config setting
delegate_setup
so modpack authors can move the controller setup to when users enter the config screen.
Changes
- Removed extra mappings resource pack (merged into base resources)
Beta 1
- Added a config setting
delegate_setup
so modpack authors can move the controller setup to when users enter the config screen. - Removed the immediately-fast compatibility temporarily.
- Removed extra mappings resource pack (merged into base resources)
Controlify 1.2
New Features
- Container button guide - just like bedrock edition
- Button guides and shortcuts for the title screen and pause menu
- Controller bind conflict detection - binds that conflict with each other are highlighted in red
- Battery level warning as a toast. (EXPERIMENTAL)
- Controller vibration & gyro support on macOS
- A toast is now displayed when your primary controller was connected and automatically switched to.
Changes
- Cursor snapping is now instant
- Only print debug info if non-default
- Removed 'VMouse Escape' bind in favour of GUI back.
- Removed vanilla overrides for: swap hands, inventory, change perspective, show player list. This means nothing to the user but may reduce bugs.
Bug Fixes
- Fix rumble reported as unsupported when it's just off
- Fixed a bug where the logs were spammed on Steam Deck devices
- Fix hidden mouse hovering over buttons in the centre of the screen
- Fix rare crash
Controlify 1.1.1
Additions
- Binds can now be unbound by pressing the right stick down (configurable bind).
Changes
- Vibration natives are now onboarded on-demand (when a controller is connected), rather than on startup.
- Add extra details to controller construction crash report.
- Update toasts to be more clear. (#64 by madis0)
- Update vibration onboarding message to be more generic, including Gyro.
Bug Fixes
- Fix reconnected controllers being unidentified.
- Fix some mod keybindings failing to register as controller binds.
- Fix 'Out Of Focus Input' option not working properly.
- Fix crash with some unmapped joysticks.
- Fix 'GUI Abstract Action 2' bind not saving properly.
Controlify 1.1
A noteable update to Controlify, with a lot of new features.
New Features
- Controller vibration support for all platforms.
- Gyro support for compatible controllers.
- Reach-around block interaction that imitates Bedrock Edition's exact behaviour.
- Reduce aim sensitivity option. When aiming, the sensitivity is reduced and more fine control is given.
- UI sounds option.
- A toggleable setting enables playing the legacy console edition UI sound when changing the selected component in GUIs. In the future, this will be expanded to have more sounds.
- Modded keybinds are now automatically registered as controller binds.
- Bindings are now grouped into categories.
- Under-the-hood drivers.
- Compound joysticks, allowing for an infinite amount of inputs. This currently has no UI, and you have to create a joystick mapping resource-pack yourself. This will come in a future update.
- Two abstract gui controller binds are available for mod developers to use in any screen context.
- Button guide in screens, with a new API for mod developers to add their own button guides.
- New registry for screenop API, as an alternative to mixing into UIs, you now register
ScreenProcessor
s andComponentProcessor
s on the Controlify entrypoint. - New builder API for controller bindings, deprecating the old constructor-based approach.
Controller Vibration
This is a feature that is available on all platforms, Windows, Linux, and Mac.
The current vibrations are:
- Using items (including eating)
- Taking damage
- Ender dragon death
- Anvil use (clang! clang! clang!)
- Explosions
- Their intensity is scaled based on the explosion's distance from the player and power.
- This is a cool custom effect where you feel an initial boom, and then another fading vibration.
- Survival block mining
- The intensity is scaled based on the block's hardness.
- Items breaking
- Fishing rod bite
Vibrations play nicely together, where playing a vibration over a longer vibration does not cause the longer vibration to stop, but is suppressed until the interrupting vibration is completed.
Gyro support
Controlify now has built-in support for controller gyroscopes, allowing you to make fine movements in-game. This can be combined with flick stick to be able to use a controller without the compromise of using the thumbsticks.
This requires use of a compatible controller, such as a Dualsense controller.
Currently, the Steam Deck is not supported, as it does not expose the gyro data to the OS, however, explicit support for this device is planned in the future.
Under-the-hood drivers
Controlify now uses a new driver system, which allows me to combine multiple libraries to create a more powerful controller interface, with a modular system to mix and match drivers.
This means in the future, I can add more advanced features per-controller, such as Steam Deck touchpad and back buttons explicitly supported in-game.
Built-in resource pack for extra mappings
Controlify now has a built-in resource pack, which contains mappings and language files for the aforementioned joystick.
The split was done to not modify the default language file, which would become huge in size and potentially cause merge conflicts.
Changes
There are multiple breaking API changes in this update, but as of writing, I am not aware of any mods that utilise any of Controlify's APIs. This will not happen in minor updates when this mod is more popular.
- Ingame guide registry now takes a function that provides
IngameGuideContext
, rather than many parameters, this future-proofs the API if more parameters are added. - Some ingame guide classes have moved inside the
api
package. - Partial Chinese translation by @GodGun968.
Screen navigation improvements
Moving between components in GUIs feel more like most other games, where when holding the stick in a direction, it moves once, waits a bit, and then moves through components quickly. Think holding down a key while you type.
More controller identifications
More controllers are now identified out-of-box, particularly the PS3 and Dualsense controllers.
Along with that, DualSense, PS3 and Steam Deck now have textures.
Improved crash handling
Where possible, Controlify now generates Minecraft crash reports with details of the controller which caused the crash.
Improved joystick mapping
Allows the mapping of joysticks to be more flexible, allowing for more complex mappings. This has been battle-tested with a Thrustmaster TM.16000M FCS HOTAS joystick.
Bug Fixes
- Fixed a bug where some in-game binds worked in containers. (#35)
- Fix controllers not being detected half the time on startup.
- Fix unidentified controllers not being able to save configs.
- Fixed a bug where closing the pause menu or similar menu would cause you to trigger in-game inputs if bound to the same button
- Fixed YetAnotherConfigLib not being declared as a fabric dependency, causing crashes if not present.
Controlify 1.1 (Beta 3)
New Features
Gyro support
Controlify now has built-in support for controller gyroscopes, allowing you to make fine movements in-game. This can be combined with flick stick to be able to use a controller without the compromise of using the thumbsticks.
This requires use of a compatible controller, such as a Dualsense controller.
Currently, the Steam Deck is not supported, as it does not expose the gyro data to the OS, however, explicit support for this device is planned in the future.
UI sounds
A toggleable setting enables playing the legacy console edition UI sound when changing the selected component in GUIs. In the future, this will be expanded to have more sounds.
Under-the-hood drivers
Controlify now uses a new driver system, which allows me to combine multiple libraries to create a more powerful controller interface, with a modular system to mix and match drivers.
This means in the future, I can add more advanced features per-controller, such as Steam Deck touchpad and back buttons explicitly supported in-game.
Improved joystick mapping
Allows the mapping of joysticks to be more flexible, allowing for more complex mappings. This has been battle-tested with a Thrustmaster TM.16000M FCS HOTAS joystick.
Built-in resource pack for extra mappings
Controlify now has a built-in resource pack, which contains mappings and language files for the aforementioned joystick.
The split was done to not modify the default language file, which would become huge in size and potentially cause merge conflicts.
Improved crash handling
Where possible, Controlify now generates Minecraft crash reports with details of the controller which caused the crash.
Changes
Screen navigation improvements
Moving between components in GUIs feel more like most other games, where when holding the stick in a direction, it moves once, waits a bit, and then moves through components quickly. Think holding down a key while you type.
More controller identifications
More controllers are now identified out-of-box, particularly the PS3 and Dualsense controllers.
Along with that, Dualsense, PS3 and Steam Deck now have textures.
Vibration natives downloading changes
The vibration natives are now downloaded from my maven repository, allowing for better version control and syncing with the mod version.
Bug Fixes
- Fixed a bug where closing the pause menu or similar menu would cause you to trigger in-game inputs if bound to the same button
- Fixed YetAnotherConfigLib not being declared as a fabric dependency, causing crashes if not present.
API Changes
Sources JAR now published
The sources JAR is now published to the maven repository, allowing you to debug Controlify and view documentation in your IDE.
Controller binding API refactor
Controller binding API has had a minor refactor that will cause incompatibilities with mods.
YACL option binding generator
Bindings now allow you to create a YACL option, to add to your own config GUIs.
Controlify 1.1 (Beta 2)
New Vibrations
- Explosions now cause a vibration. Their intensity is scaled based on the explosion's distance from the player and power. This is a cool custom effect where you feel an initial boom, and then another fading vibration.
- Survival block mining now causes a vibration. The intensity is scaled based on the block's hardness.
- Item break now causes a vibration.
- Fishing rod fish bite now causes a vibration.
Vibration Changes
A new continuous vibration effect has been added. This allows for more complex vibrations over a non-specific duration. This means an overhaul of some vibrations:
- Bow draw vibration now feels like a real bow draw with a slight wobble on max charge (like the animation).
- Crossbow load vibration now matches the animation.
- Eating vibration now matches the animation.
Also, vibrations now play nicely together, where playing a vibration over a longer vibration does not cause the longer vibration to stop, but pause.
Bug Fixes
- Fix the health vibration sometimes not playing.
- Fix controllers not being detected half the time on startup.
- Fix unidentified controllers not being able to save configs.