{"id":90155,"date":"2026-06-05T06:32:55","date_gmt":"2026-06-05T03:32:55","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/"},"modified":"2026-06-05T06:32:55","modified_gmt":"2026-06-05T03:32:55","slug":"keybind","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/","title":{"rendered":"Keybind"},"content":{"rendered":"<p># \u2328\ufe0f Keybind<\/p>\n<p>Bind keys to server-side commands. Press a key, the server runs a command.<\/p>\n<p>**Client Mod (Fabric)** \u2022 **Server Plugin (Paper)**<\/p>\n<p>| Component | Environment | Platform |<br \/>\n| :&#8212; | :&#8212; | :&#8212; |<br \/>\n| `KeybindMod` | **Client only** | Fabric (MC 26.1.2) |<br \/>\n| `KeybindPlugin` | **Server only** | Paper 1.18.2+ |<\/p>\n<p>&#8212;<\/p>\n<p>## \u2728 Features<\/p>\n<p>&#8211; \ud83d\udd17 **Server-Driven**: Actions are defined entirely on the server and synced to the client on join.<br \/>\n&#8211; \ud83d\udcc1 **Per-Server Storage**: Key assignments are saved per server IP in `.minecraft\/config\/keybind-servers\/` and never overwritten on rejoin.<br \/>\n&#8211; \ud83d\udee0\ufe0f **Dynamic Registration**: New server actions appear in your **Settings \u2192 Controls** menu without restarting the game.<br \/>\n&#8211; \ud83c\udff7\ufe0f **Custom Display Names**: Server owners set friendly names (e.g., `&#8221;Teleport to Spawn&#8221;` instead of `spawn`).<br \/>\n&#8211; \u23f1\ufe0f **Dual Cooldowns**: Both a global cooldown (between any actions) and per-action cooldowns prevent spam.<br \/>\n&#8211; \ud83d\udd10 **Permission Support**: Each action supports an optional extra permission node on top of `keybind.use`.<br \/>\n&#8211; \ud83d\udce1 **Plugin Messaging**: Uses `keybind:main` \/ `keybind:sync` plugin message channels. Falls back to `\/kbind <action>` if the packet channel is unavailable.<br \/>\n&#8211; \ud83e\uddf9 **Stale Action Cleanup**: Obsolete actions from previous sessions are automatically removed from the Controls menu and saved config.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\ude80 How It Works<\/p>\n<p>1. **Sync**: 1 second after a player joins, the plugin sends all configured actions (name, display name, default key) over the `keybind:sync` channel.<br \/>\n2. **Registration**: The mod registers each action as a native Minecraft keybind under the **Keybind** category in **Settings \u2192 Controls**.<br \/>\n3. **Trigger**: When a key is pressed (and no screen is open), the mod sends the action name over the `keybind:main` channel.<br \/>\n4. **Execution**: The plugin validates the action name (alphanumeric + underscores only), checks permissions and cooldowns, then runs the command.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udee0\ufe0f Installation<\/p>\n<p>### Server Side<br \/>\n1. Place `KeybindPlugin.jar` into your `plugins\/` folder.<br \/>\n2. Restart the server \u2014 `plugins\/Keybind\/config.yml` is generated automatically.<br \/>\n3. Edit `config.yml` to define your actions, then run `\/kbind reload`.<\/p>\n<p>### Client Side<br \/>\n1. Place `KeybindMod.jar` into your `.minecraft\/mods\/` folder.<br \/>\n2. Requires **Fabric Loader 0.18.4+** and **Fabric API**.<br \/>\n3. Launch the game and connect to any server running the plugin.<\/p>\n<p>> The mod works on any server. On servers without the plugin, no keybinds are registered.<\/p>\n<p>&#8212;<\/p>\n<p>## \u2699\ufe0f Configuration<\/p>\n<p>### `plugins\/Keybind\/config.yml`<br \/>\n&#8220;`yaml<br \/>\n# Global cooldown between any keybind actions (milliseconds)<br \/>\nglobal-cooldown: 500<\/p>\n<p>actions:<br \/>\n  spawn:<br \/>\n    command: &#8220;spawn&#8221;              # Command to run (without \/)<br \/>\n    display-name: &#8220;Spawn&#8221;        # Label shown in Controls menu<br \/>\n    default-key: &#8220;LEFT_BRACKET&#8221;  # Suggested key for first-time players<br \/>\n    permission: &#8220;&#8221;               # Optional extra permission node (leave empty for none)<br \/>\n    cooldown: 1000               # Per-action cooldown (ms); defaults to global-cooldown<br \/>\n    console: false               # true = run as console with {player} replaced by player name<\/p>\n<p>  home:<br \/>\n    command: &#8220;home&#8221;<br \/>\n    display-name: &#8220;Home&#8221;<br \/>\n    default-key: &#8220;RIGHT_BRACKET&#8221;<br \/>\n    permission: &#8220;&#8221;<br \/>\n    cooldown: 1000<br \/>\n    console: false<br \/>\n&#8220;`<\/p>\n<p>**Notes:**<br \/>\n&#8211; Action names must be alphanumeric + underscores only (e.g. `my_action`).<br \/>\n&#8211; `console: true` runs the command as the console sender. Use `{player}` as a placeholder for the player&#8217;s name (e.g. `command: &#8220;tp {player} spawn&#8221;`).<br \/>\n&#8211; `default-key` is only applied the first time a player connects. Their saved binding is used on subsequent joins.<\/p>\n<p>&#8212;<\/p>\n<p>## \u2328\ufe0f Supported Keys<\/p>\n<p>### Keyboard<br \/>\n| Category | Values |<br \/>\n| :&#8212; | :&#8212; |<br \/>\n| Letters | `A`\u2013`Z` |<br \/>\n| Numbers | `0`\u2013`9` |<br \/>\n| Function | `F1`\u2013`F25` |<br \/>\n| Arrows | `UP`, `DOWN`, `LEFT`, `RIGHT` |<br \/>\n| Navigation | `PAGE_UP`, `PAGE_DOWN`, `HOME`, `END`, `INSERT`, `DELETE` |<br \/>\n| Special | `SPACE`, `ENTER`, `TAB`, `BACKSPACE`, `ESCAPE`, `PAUSE` |<br \/>\n| Lock keys | `CAPS_LOCK`, `SCROLL_LOCK`, `NUM_LOCK` |<br \/>\n| Other | `PRINT_SCREEN`, `MENU` |<br \/>\n| Modifiers | `LEFT_SHIFT`, `LEFT_CONTROL` (or `LEFT_CTRL`), `LEFT_ALT`, `LEFT_SUPER`, `RIGHT_SHIFT`, `RIGHT_CONTROL` (or `RIGHT_CTRL`), `RIGHT_ALT`, `RIGHT_SUPER` |<br \/>\n| Numpad | `KP_0`\u2013`KP_9`, `KP_ADD`, `KP_SUBTRACT`, `KP_MULTIPLY`, `KP_DIVIDE`, `KP_DECIMAL`, `KP_ENTER`, `KP_EQUAL` |<br \/>\n| Symbols | `LEFT_BRACKET`, `RIGHT_BRACKET`, `BACKSLASH`, `SEMICOLON`, `APOSTROPHE`, `COMMA`, `PERIOD`, `SLASH`, `GRAVE_ACCENT`, `MINUS`, `EQUAL` \u2014 or the character directly: `[`, `]`, &#8220;, `;`, `&#8217;`, `,`, `.`, `\/`, &#8220; ` &#8220;, `-`, `=` |<br \/>\n| World keys | `WORLD_1`, `WORLD_2` (locale-specific keys on some keyboards) |<\/p>\n<p>### Mouse<br \/>\n| Value | Aliases | Button |<br \/>\n| :&#8212; | :&#8212; | :&#8212; |<br \/>\n| `MOUSE_LEFT` | `MOUSE_1` | Left click |<br \/>\n| `MOUSE_RIGHT` | `MOUSE_2` | Right click |<br \/>\n| `MOUSE_MIDDLE` | `MOUSE_3` | Middle click |<br \/>\n| `MOUSE_4`\u2013`MOUSE_8` | \u2014 | Side\/extra buttons |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcdc Commands &#038; Permissions<\/p>\n<p>| Command | Description | Permission |<br \/>\n| :&#8212; | :&#8212; | :&#8212; |<br \/>\n| `\/kbind <action>` | Manually trigger an action | `keybind.use` |<br \/>\n| `\/kbind list` | List all configured action names | *(any)* |<br \/>\n| `\/kbind reload` | Reload config and re-sync all online players | `keybind.admin` |<\/p>\n<p>| Permission | Description | Default |<br \/>\n| :&#8212; | :&#8212; | :&#8212; |<br \/>\n| `keybind.use` | Required to trigger any action | `true` (everyone) |<br \/>\n| `keybind.admin` | Access to `\/kbind reload` | `op` |<br \/>\n| `keybind.bypass.cooldown` | Ignore all cooldowns | `op` |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udfd7\ufe0f Building from Source<\/p>\n<p>&#8220;`bash<br \/>\n.\/gradlew clean build<br \/>\n&#8220;`<\/p>\n<p>Output jars:<br \/>\n&#8211; `keybind-plugin\/build\/libs\/KeybindPlugin-1.0.0.jar`<br \/>\n&#8211; `keybind-mod\/build\/libs\/KeybindMod-1.0.0.jar`<\/p>\n<p>Requires Java 17+ for the plugin, Java 25+ for the mod.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd12 Security<\/p>\n<p>&#8211; Action names are validated server-side against `^[a-zA-Z0-9_]+$` \u2014 arbitrary input is rejected.<br \/>\n&#8211; Packet length is capped at 256 bytes.<br \/>\n&#8211; All command execution happens on the main server thread.<br \/>\n&#8211; Players without `keybind.use` cannot trigger any action, even via direct `\/kbind` command.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2328\ufe0f Bind keys to server-side commands. Press a key, the server runs a command.<\/p>\n","protected":false},"featured_media":90156,"template":"","meta":{"_minecraft_slug":"keybind","_minecraft_project_id":"yuttqmXl","_minecraft_author":"iM5LB1","_minecraft_license":"MIT","_minecraft_downloads":30,"_minecraft_follows":1,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"keybind.zip","_minecraft_size_bytes":40669,"_minecraft_version_count":2,"_minecraft_updated_at":"2026-05-15T22:13:00.042114Z","_minecraft_date_created":"2026-05-08T04:08:59.810539Z","_minecraft_date_modified":"2026-05-08T02:08:27.476151Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/keybind","_minecraft_icon_attachment_id":90156,"_minecraft_imported_at":"2026-06-05T03:32:56+00:00","_minecraft_import_hash":"03294d80507227c32cb28d20d3e16b20","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,97,89,127,128,129,123,92],"mod_loader":[99],"minecraft_version":[51,52,53,54,55,56,57,58,59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82,83,167,163],"class_list":["post-90155","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bukkit","mod_category-fabric","mod_category-game-mechanics","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-technology","mod_category-utility","mod_loader-fabric","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-26-1","minecraft_version-26-1-1","minecraft_version-26-1-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Keybind - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Keybind - Minecraft\" \/>\n<meta property=\"og:description\" content=\"\u2328\ufe0f Bind keys to server-side commands. Press a key, the server runs a command.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/\",\"name\":\"Keybind - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp\",\"datePublished\":\"2026-06-05T03:32:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/keybind\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Keybind\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Keybind - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/","og_locale":"en_US","og_type":"article","og_title":"Keybind - Minecraft","og_description":"\u2328\ufe0f Bind keys to server-side commands. Press a key, the server runs a command.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/","name":"Keybind - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp","datePublished":"2026-06-05T03:32:55+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/keybind\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/keybind-icon-9a4b72645c5b28c489dfbb1ef0b320d9288bf359_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/keybind\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"Keybind"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/90155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/90156"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=90155"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=90155"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=90155"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=90155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}