# 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](https://github.com/Andrew6rant) for making these!

![carousel screen](https://cdn.modrinth.com/data/DOUdJVEm/images/33079219d3a2de06b8fa36bdb17d8fd632429c7b.png)

### 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
