> For the complete documentation index, see [llms.txt](https://docs.myarc.icu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.myarc.icu/en/feature-configuration/input-modes.md).

# Touch, Mouse and Vision input

ArcMenu provides three interaction modes: Touch (`touch`), Mouse (`mouse`), and Vision (`vision`). All three share the same menu configurations and backend click regions, so you never have to write separate menus for different input styles.

| Mode            | Experience                                                                        | Client setup                                                                             |
| --------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Touch `touch`   | Turn your camera, aim the crosshair at a button, and click.                       | Works on a vanilla client.                                                               |
| Mouse `mouse`   | Camera stays fixed while you move a menu cursor to point and click.               | Load a companion resource pack containing ArcMenu assets; no mod required.               |
| Vision `vision` | Fixed menu view with a locally driven client cursor and full shader pack support. | Install Fabric, Fabric API, and the matching ArcMenu Editor build for your game version. |

Each mode is tailored to a different setup:

* **Touch mode** uses standard in-world display rendering. It follows the player's own field of view (FOV), preserves normal world lighting and block occlusion, and keeps gameplay visuals intact when shader packs are enabled.
* **Mouse mode** enables a local cursor, fixed FOV, front-to-back menu depth, and even flat lighting once the companion resource pack is loaded.
* **Vision mode** draws directly on the client rendering and input capabilities built into ArcMenu Editor, without needing any separate mouse mod. Installing Editor only gives ordinary players client-side interaction support; it does not grant administrative or editing permissions.

## Vision display and response

Vision updates the cursor locally on the client every frame for smooth, immediate movement. Its default cursor texture matches Mouse mode, and horizontal and vertical movement share a unified displacement formula that respects both server-configured axis sensitivity and each player's personal sensitivity and cursor-scale preferences. As the cursor moves, hovers, or clicks, the server calculates hit regions in real time and runs the corresponding menu actions.

Visually, Vision draws menus in a dedicated render pass at a fixed **70° vertical FOV**. Menu dimensions stay consistent regardless of the player's FOV setting, and world blocks or entities never clip into the menu, while layers inside the menu still occlude one another according to their depth. Item and block displays use bright, steady interface lighting that remains clear and readable with shader packs enabled. Menu images and custom fonts continue to load from the resource pack, and Editor includes built-in fallback textures for the default cursor.

## Switching modes as a player

Players with the `arcmenu.use` permission can check or switch their input mode at any time:

```
/arcmenu mode
/arcmenu mode touch
/arcmenu mode mouse
/arcmenu mode vision
```

Running `/arcmenu mode` without arguments shows the active mode. When a player switches modes, their preference is saved automatically for future logins. If a menu is already open when they switch, the new mode takes effect on that menu immediately.

## Click and hover interactions

Regardless of which input mode a player uses, backend regions recognize a full set of click types. You can configure any of the following triggers under a button's `actions`:

* `left`: Left-click
* `right`: Right-click
* `middle`: Middle-click (the vanilla "Pick Block" key)
* `shift-left`: Sneak + left-click
* `shift-right`: Sneak + right-click
* `shift-middle`: Sneak + middle-click
* `shift`: Any click while sneaking
* `all` or `any`: Any click

Alongside clicks, buttons can trigger actions through `on-hover` and `on-leave` when the crosshair or cursor enters or leaves the region. See [Backend regions and click events](/en/menu-configuration/menus/backend.md) for region configuration details.

## Menu shortcuts

The `shortcuts` section in `config.yml` controls the keybinds used to open and close menus:

```yaml
shortcuts:
  shift-f: true
  close-on-shift-f: true
  close-on-space: true
```

All three fields accept a boolean (`true` or `false`) and default to `true`:

* `shift-f`: When no menu is open, pressing Shift+F (Sneak + Swap Item With Offhand) opens the main menu directly. You can designate a menu as the main menu by setting `main-menu: true` in its configuration, or open the default main menu with `/arcmenu open main`.
* `close-on-shift-f`: While a menu or application is open, pressing Shift+F closes it.
* `close-on-space`: While a menu or application is open, pressing Space (Jump) closes it.

Key detection follows the player's own client bindings for sneak, swap offhand, and jump. When a player presses Space to close a menu in Vision mode, the client intercepts the jump input so the character does not jump upon closing. While a player is typing in an Arcitx text field, pressing Space enters a normal space character instead of closing the menu.

## Server mode policy

Server administrators can configure the default input mode and switching rules under the `mouse` section of `config.yml`:

```yaml
mouse:
  policy: player-choice
  default: touch
  assume-resource-pack-loaded: true
  sample-rate: 40
```

### Field values

* `policy`: Controls which modes players are allowed to use. Accepts one of the following strings:
  * `player-choice` (default): Players can freely switch between `touch`, `mouse`, and `vision`. Until a player chooses a preference, `default` is used.
  * `force-touch`: Forces Touch mode for all players across the server.
  * `force-mouse`: Uses cursor-based interaction across the server. Players enter `mouse` mode by default, and clients with a matching ArcMenu Editor build installed can also switch to `vision` mode.
* `default`: The mode given to players who have not chosen a preference when `policy` is `player-choice`. Accepts `touch`, `mouse`, or `vision`. If you set the default to `vision`, make sure players have installed the matching ArcMenu Editor build for their client.
* `assume-resource-pack-loaded`: Accepts `true` or `false` (default `true`). When `true`, Mouse mode enables menu depth, flat lighting, the local cursor, and local GIF playback immediately—even if the player loaded the companion resource pack manually from their local `resourcepacks` folder. When `false`, the server waits for a resource-pack load success acknowledgement from the client before enabling those features. See [Images and resource packs](/en/feature-configuration/resource-packs.md) for details on pack generation and distribution.
* `sample-rate`: An integer from `20` to `60` (default `40`). Sets the polling frequency in Hz for the legacy server-polled cursor; local Mouse cursors and Vision mode are driven directly by the client and do not rely on this polling.

## Cursor appearance and sensitivity

The `mouse.cursor` section in `config.yml` adjusts cursor speed, movement boundaries, and display size:

```yaml
mouse:
  cursor:
    interpolation-ticks: 0
    sensitivity-x: 2.0
    sensitivity-y: 2.0
    clamp-margin: 3.0
    size: 5.0
    z: 5.0
```

| Field                 | Valid values                     | Default | Description                                                                                                 |
| --------------------- | -------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| `sensitivity-x`       | Number from `0.05` to `50`       | `2.0`   | Horizontal cursor sensitivity. Higher values move the cursor faster horizontally.                           |
| `sensitivity-y`       | Number from `0.05` to `50`       | `2.0`   | Vertical cursor sensitivity. Higher values move the cursor faster vertically.                               |
| `clamp-margin`        | Number `0` or greater            | `3.0`   | Inner margin around all four canvas edges (in canvas units) to keep the cursor from moving off the menu.    |
| `size`                | Positive number greater than `0` | `5.0`   | Logical display height of the cursor in canvas units.                                                       |
| `z`                   | Any finite number                | `5.0`   | Depth offset of the cursor relative to the menu plane. Higher values place the cursor closer to the viewer. |
| `interpolation-ticks` | `0`, `1`, or `2`                 | `0`     | Smoothing interpolation ticks for the legacy polled cursor. `0` gives immediate response.                   |

The default cursor texture is stored at `plugins/ArcMenu/images/mouse/mouse.png`, and automatically switches to `choose.png` when hovering over a clickable region. Generating resources also exports both textures for Vision mode.

Whenever you change the cursor textures or modify the geometry and sensitivity values under `mouse.cursor`, rebuild the resource pack so clients receive the updated local cursor configuration. Run `/arcmenu resources` or `/arcmenu reload all` to generate ArcMenu's assets, and if you use an external resource-pack plugin, run its pack reload command afterward (such as `/ce reload pack`, `/nexo reload pack`, or `/iazip`). If you only changed `policy`, `default`, or `shortcuts`, a standard `/arcmenu reload` is all you need.

To adjust the overall screen offset or viewing distance of the entire menu for each mode, configure `offset.yml` as described in [Canvas, coordinates and screen position](/en/menu-configuration/menus/canvas.md).

## Personal sensitivity and cursor size

Every player with the `arcmenu.use` permission can fine-tune their own cursor speed and display size without affecting the server's base settings or other players. The bundled `cursor-setting` example menu created on first-time setup also demonstrates this feature in an interactive menu.

```
/arcmenu sensitivity
/arcmenu sensitivity set 7
/arcmenu sensitivity add -1
/arcmenu sensitivity clear

/arcmenu cursor-scale
/arcmenu cursor-scale set 3
/arcmenu cursor-scale add 1
/arcmenu cursor-scale clear
```

* Running the command without arguments displays the player's current level and multiplier.
* `set <1-9>`: Sets the level directly to an integer from `1` to `9`.
* `add <integer>`: Adds or subtracts from the current level (for example, `add 1` or `add -1`), keeping the final result within `1` to `9`.
* `clear`: Clears the personal override and returns to the default level `5`.

Levels convert to multipliers using the formula `2^((level - 5) / 4)`:

* **Level 5 (default)**: `1`×, preserving the server's configured speed and size.
* **Level 1 (minimum)**: `0.5`×.
* **Level 9 (maximum)**: `2`×.

The personal sensitivity multiplier scales both `sensitivity-x` and `sensitivity-y`, while the personal cursor-scale multiplier scales `mouse.cursor.size`. Changes apply immediately to any open Mouse or Vision menu without interrupting active menu animations, and are saved in the player's data on the server.

### Placeholders

You can display a player's current settings inside menu text—or in other plugins when PlaceholderAPI is installed—using these placeholders:

| Placeholder                    | Returned value                                                      |
| ------------------------------ | ------------------------------------------------------------------- |
| `%arcmenu_sensitivity%`        | Current personal sensitivity multiplier (up to four decimal places) |
| `%arcmenu_sensitivity_level%`  | Current personal sensitivity level (`1`–`9`)                        |
| `%arcmenu_cursor_scale%`       | Current personal cursor-size multiplier (up to four decimal places) |
| `%arcmenu_cursor_scale_level%` | Current personal cursor-size level (`1`–`9`)                        |

`privatepointersensitivity` and `privatepointerscale` are also supported as aliases for both the commands and placeholders (for example, `%arcmenu_privatepointersensitivity_level%`).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.myarc.icu/en/feature-configuration/input-modes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
