Overview
Minecraft Community Edition’s input system provides a platform-agnostic abstraction layer for handling input from keyboards, mice, and game controllers. The system supports multiple input sources and handles platform-specific implementations for PC, Xbox, PlayStation, and PS Vita.Input Architecture
The input system is organized into three layers:- Platform Layer - Platform-specific input capture (4J_Input)
- Abstraction Layer - Unified input interface (Input, ConsoleInput, KeyboardMouseInput)
- Game Layer - Input processing for player control and UI
Input Base Class
TheInput class provides the core abstraction for player movement input:
Minecraft.Client/Input.h:4
Input Processing
Thetick() method is called every game tick to update input state:
Keyboard and Mouse Input
TheKeyboardMouseInput class handles PC keyboard and mouse input:
KeyboardMouseInput Class
Minecraft.Client/KeyboardMouseInput.h:5
Keyboard State
Key State Query:Minecraft.Client/KeyboardMouseInput.h:42
Key Events:
Minecraft.Client/KeyboardMouseInput.h:34
Mouse State
Button State Query:Minecraft.Client/KeyboardMouseInput.h:46
Mouse Position:
Minecraft.Client/KeyboardMouseInput.h:50
Mouse Events:
Minecraft.Client/KeyboardMouseInput.h:36
Mouse Capture
Grab/Release Mouse:- Mouse is hidden
- Cursor is locked to window
- Raw delta values used for camera
Minecraft.Client/KeyboardMouseInput.h:58
Cursor Visibility:
Minecraft.Client/KeyboardMouseInput.h:61
Window Focus
Minecraft.Client/KeyboardMouseInput.h:64
Keyboard/Mouse Activation
Minecraft.Client/KeyboardMouseInput.h:67
Movement Input
Minecraft.Client/KeyboardMouseInput.h:75
Default Key Bindings
Minecraft.Client/KeyboardMouseInput.h:15
Global Instance
Minecraft.Client/KeyboardMouseInput.h:121
Console Input (Gamepad)
The console editions use gamepad input through theConsoleInput and C_4JInput classes:
ConsoleInput Class
Minecraft.Client/ConsoleInput.h:5
Used for text input results from virtual keyboards on consoles.
4J Input Manager
TheC_4JInput class provides the low-level gamepad interface:
4J_Input.h files
Gamepad Button Mapping
Buttons are mapped to a unified button mask system:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:10
PlayStation Button Mapping
PS Vita and PlayStation buttons are mapped to Xbox equivalents:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:43
Gamepad State Query
Button State:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:119
Analog Sticks:
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:137
Triggers:
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:141
Gamepad Configuration
Deadzone and Sensitivity:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:113
Control Schemes:
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:70
Controller Detection
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:128
Key Repeat
For menu navigation:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:126
Menu Display State
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:146
Input Manager Singleton
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:177
Touch Input (PS Vita)
The PS Vita version supports touchscreen input:Touch Data
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:144
Touch Mapping
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:134
Virtual Keyboard
Console platforms use virtual keyboards for text input:Keyboard Modes
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:99
Requesting Keyboard
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:79
Retrieving Text
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:151
Key Mappings
TheOptions class stores configurable key bindings:
Minecraft.Client/Options.h:74
Key Mapping Access
Minecraft.Client/Options.h:117
Input Settings
Input-related settings in the Options class:Minecraft.Client/Options.h:62
Multi-Player Input
The input system supports up to 4 simultaneous players:- Independent controller
- Separate input state
- Own viewport (in split-screen)
- Individual settings
Input Processing Flow
Game Input (In-World)
- Platform Layer captures hardware input
- Input Manager processes and filters input
- Input::tick() updates movement state
- LocalPlayer applies movement to player entity
- Game updates physics and world state
UI Input (Screens)
- Platform Layer captures hardware input
- Screen::updateEvents() polls for input events
- Screen::mouseEvent() / keyboardEvent() process events
- Screen::mouseClicked() / keyPressed() handle specific actions
- Screen::buttonClicked() receives button callbacks
Minecraft.Client/Screen.cpp:104
Platform-Specific Input
Windows PC
- Uses Windows message loop for keyboard/mouse
- Raw input for camera control
- DirectInput for gamepad support
- XInput for Xbox controllers
Xbox (Durango)
- Native XInput for controllers
- Kinect support (voice/gesture)
- Smart Glass integration
PlayStation 3
- Cell SPU optimized input processing
- SIXAXIS motion support
- PlayStation Network integration
PlayStation Vita
- Front and rear touchscreen
- Motion sensors (gyroscope/accelerometer)
- Hardware buttons and analog sticks
- Vita TV mode (controller-only)
Checking Platform
Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:171
Text Input Validation
For online play, user text is validated:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:167
Used to filter offensive language in:
- Chat messages
- World names
- Player usernames
- Signs and books
Circle/Cross Swap (PlayStation)
PlayStation regions have different button conventions:Minecraft.Client/PSVita/4JLibs/inc/4J_Input.h:130
Best Practices
Input Handling
- Check for input availability before processing
- Respect menu state - disable game input when UI is open
- Handle controller disconnect gracefully
- Support all control schemes (default, southpaw, legacy)
- Apply deadzone to analog sticks
- Smooth camera input using delta values
- Validate text input for online features
Multi-Player Support
- Index by player (iPad/controller index)
- Check connection state before reading input
- Handle hot-plugging (controllers connecting/disconnecting)
- Show appropriate prompts per platform (“Press A” vs “Press X”)
- Respect per-player settings (sensitivity, inversion)
Platform Compatibility
- Use abstraction layer - avoid platform-specific code in game logic
- Test all platforms - button mappings may differ
- Support keyboard and gamepad simultaneously on PC
- Handle touch input on Vita
- Provide fallbacks for missing input devices
Related Documentation
- Screen System - UI screen input handling
- GUI Components - Button interactions and rendering