
⌨️ Bind keys to server-side commands. Press a key, the server runs a command.
Bind keys to server-side commands. Press a key, the server runs a command.
Client Mod (Fabric) • Server Plugin (Paper)
| Component | Environment | Platform |
|---|---|---|
KeybindMod |
Client Side | Fabric (MC 1.21.x & 26.x) |
KeybindPlugin |
Server Side | Paper 1.18.2+ |
Note: Both the Server Plugin and the Client Mod must be installed for the mod to function. On servers without the plugin, no keybinds will be registered or available.
.minecraft/config/keybind-servers/ and never overwritten on rejoin."Teleport to Spawn" instead of spawn).keybind.use.keybind:main / keybind:sync plugin message channels. Falls back to /kbind <action> if the packet channel is unavailable.keybind:sync channel.keybind:main channel.KeybindPlugin.jar into your plugins/ folder.plugins/Keybind/config.yml is generated automatically.config.yml to define your actions, then run /kbind reload.KeybindMod.jar into your .minecraft/mods/ folder.The mod works on any server. On servers without the plugin, no keybinds are registered.
plugins/Keybind/config.yml# Global cooldown between any keybind actions (milliseconds)
global-cooldown: 500
actions:
spawn:
command: "spawn" # Command to run (without /)
display-name: "Spawn" # Label shown in Controls menu
default-key: "LEFT_BRACKET" # Suggested key for first-time players
permission: "" # Optional extra permission node (leave empty for none)
cooldown: 1000 # Per-action cooldown (ms); defaults to global-cooldown
console: false # true = run as console with {player} replaced by player name
home:
command: "home"
display-name: "Home"
default-key: "RIGHT_BRACKET"
permission: ""
cooldown: 1000
console: false
Notes:
my_action).console: true runs the command as the console sender. Use {player} as a placeholder for the player's name (e.g. command: "tp {player} spawn").default-key is only applied the first time a player connects. Their saved binding is used on subsequent joins.| Category | Values |
|---|---|
| Letters | A–Z |
| Numbers | 0–9 |
| Function | F1–F25 |
| Arrows | UP, DOWN, LEFT, RIGHT |
| Navigation | PAGE_UP, PAGE_DOWN, HOME, END, INSERT, DELETE |
| Special | SPACE, ENTER, TAB, BACKSPACE, ESCAPE, PAUSE |
| Lock keys | CAPS_LOCK, SCROLL_LOCK, NUM_LOCK |
| Other | PRINT_SCREEN, MENU |
| Modifiers | LEFT_SHIFT, LEFT_CONTROL (or LEFT_CTRL), LEFT_ALT, LEFT_SUPER, RIGHT_SHIFT, RIGHT_CONTROL (or RIGHT_CTRL), RIGHT_ALT, RIGHT_SUPER |
| Numpad | KP_0–KP_9, KP_ADD, KP_SUBTRACT, KP_MULTIPLY, KP_DIVIDE, KP_DECIMAL, KP_ENTER, KP_EQUAL |
| Symbols | LEFT_BRACKET, RIGHT_BRACKET, BACKSLASH, SEMICOLON, APOSTROPHE, COMMA, PERIOD, SLASH, GRAVE_ACCENT, MINUS, EQUAL — or the character directly: [, ], \, ;, ', ,, ., /, `, -, = |
| World keys | WORLD_1, WORLD_2 (locale-specific keys on some keyboards) |
| Value | Aliases | Button |
|---|---|---|
MOUSE_LEFT |
MOUSE_1 |
Left click |
MOUSE_RIGHT |
MOUSE_2 |
Right click |
MOUSE_MIDDLE |
MOUSE_3 |
Middle click |
MOUSE_4–MOUSE_8 |
— | Side/extra buttons |
| Command | Description | Permission |
|---|---|---|
/kbind <action> |
Manually trigger an action | keybind.use |
/kbind list |
List all configured action names | (any) |
/kbind reload |
Reload config and re-sync all online players | keybind.admin |
| Permission | Description | Default |
|---|---|---|
keybind.use |
Required to trigger any action | true (everyone) |
keybind.admin |
Access to /kbind reload |
op |
keybind.bypass.cooldown |
Ignore all cooldowns | op |
./gradlew clean build
Project layout:
keybind-mod-common/ shared loader-agnostic code, config/storage models, packet format, sync planning, and client session statekeybind-mod-fabric/ Fabric-specific entrypoints, payload glue, mixins, and resourceskeybind-plugin/ Paper pluginOutput jars:
keybind-plugin/build/libs/KeybindPlugin-1.0.0.jarkeybind-mod-fabric/build/libs/KeybindMod-1.0.0.jarRequires Java 17+ for the plugin, Java 21+ for the mod.
^[a-zA-Z0-9_]+$ — arbitrary input is rejected.keybind.use cannot trigger any action, even via direct /kbind command.