Skip to content

Releases: Campione01/MineClient-Bridge

MineClient Bridge 1.1.5

Choose a tag to compare

@Campione01 Campione01 released this 16 Sep 11:40

Synthetic mouse input reached InputEvent.MouseButton.Pre all along. What was missing was any way to tell that a gameplay mod had deliberately taken a button from input that never arrived, and named KeyMapping taps published no input event at all.

Input event reporting

Every key, raw-key and world-mouse response now carries mod_input_event, listing each event the dispatch published and whether a mod cancelled it. /control/status gains mouse (grab and button state) and mod_input_events: running counts plus the last observed InputEvent.MouseButton.Pre, InputEvent.Key, InputEvent.MouseScrollingEvent and InputEvent.InteractionKeyMappingTriggered.

event_fired: false is not by itself proof that input was lost. Minecraft returns before publishing a key event when a screen consumes the key, exactly as it does for a physical keyboard.

Named mappings produce real input events

POST /control/key borrowed the mapping onto a spare keyboard key and called KeyMapping.click(). That updates isDown() and consumeClick(), so a mod that polls its mapping each tick responded, but it publishes no InputEvent.Key or InputEvent.MouseButton at all, so a mod that reads its controls from those events never saw the input. A mapping is now driven through the handler its bound key would use: MouseHandler.onPress for a mouse-bound mapping and KeyboardHandler.keyPress for a keyboard-bound one.

Passing "exact": true keeps the previous targeting, where the mapping is borrowed onto an unused keyboard key so only that mapping reacts; it now fires a real key event while doing so, and an unbound mapping always takes this route. A borrowed key cannot be held, and a mouse-bound mapping is refused while a screen is open, because the screen route would click whatever the pointer sits on instead of activating the mapping.

exact defaults to false, so a named tap behaves like the device the player would actually use, including for other mappings that share the same key.

Mouse grab in an isolated session

MouseHandler.grabMouse() is gated on Minecraft.isWindowActive(), and an isolated client never takes operating system focus. In practice the flag stays at its startup value of true, so the grab has been working, but it would be lost for good if that window ever gained and then lost focus, and Minecraft refuses to continue an attack or to turn the player while the mouse is ungrabbed. grabMouse now ignores the focus gate in an isolated session. The redirect is scoped to that one method, and the native cursor is still never captured.

MCP adapter

minecraft_client_input accepts an optional boolean exact for kind: "key".

Verification

Verified on a live isolated NeoForge 1.21.1 client running this exact JAR, against Ripples of the Past: a held synthetic left click broke oak planks in survival in 3.23 s; with a Stand summoned the same press was published and cancelled by the mod, and the Stand's punch played. The released 1.1.4 JAR breaks the same block in 3.22 s, which is the baseline showing the mouse path already reached gameplay. Details in docs/evidence/1.1.5-melee-input.json.

mineclient-bridge-neoforge-1.21.1-1.1.5.jar SHA-256: DC1C420A0C1CCE18026984AB49C58F4E7034409F5430FA2ED623AC16B48CFACE

MineClient Bridge 1.1.4

Choose a tag to compare

@Campione01 Campione01 released this 14 Sep 18:14

1.1.4

  • Use newline-delimited JSON on the MCP stdio transport, as MCP stdio clients
    expect. The 1.1.3 adapter framed each message with a Content-Length header.
  • Declare plain object input schemas for minecraft_client_query and
    minecraft_client_input, so MCP clients that validate the tool list strictly
    load all seven tools. The server still rejects fields that do not belong to
    the chosen kind.
  • The NeoForge mod is unchanged apart from its version. No server installation
    is needed.

MineClient Bridge 1.1.3

Choose a tag to compare

@Campione01 Campione01 released this 10 Sep 02:53

1.1.3

  • Use process-local virtual mouse capture, keyboard polling and clipboard state
    for isolated background clients, without grabbing the shared OS pointer.
  • Reject physical input callbacks in isolated sessions while retaining the
    normal Minecraft event path for authenticated synthetic input.
  • Preserve Shift/Ctrl/Alt/Super state in synthetic keyboard and mouse events.
  • Report isolation mode and counters in client status. The MCP launcher verifies
    isolation support before starting a background client and before sending input.
  • Keep ordinary foreground clients unchanged. No server installation is needed.

MineClient Bridge 1.1.1

Choose a tag to compare

@Campione01 Campione01 released this 25 Aug 09:10

MineClient Bridge 1.1.1

  • Added normal in-world mouse button and scroll input through Minecraft and NeoForge's internal event paths.
  • Named KeyMapping taps now activate only the requested mapping, even when it is unbound or shares a physical key with another mapping.
  • Fixed MCP mouse press/release translation and allowed coordinate-free world scroll and button actions.
  • Retained loopback bearer authentication, exact session identity, bounded payloads, Minecraft-thread dispatch, and release-all cleanup.

MineClient Bridge 1.1.0

Choose a tag to compare

@Campione01 Campione01 released this 25 Aug 08:22

MineClient Bridge 1.1.0

  • Added authenticated Minecraft command submission through HTTP and MCP, with or without a leading slash and without requiring an open chat screen.
  • Added internal raw-key input for keyboard controls such as Enter, Escape, and F1 that may not have a named KeyMapping.
  • Raw-key state is tracked on the Minecraft thread, with idempotent press/release behavior and explicit release events during release-all, close, and bridge shutdown.
  • Slash-prefixed text submitted through an active chat screen now follows Minecraft's normal chat behavior instead of being blocked by the bridge.
  • Kept loopback, bearer-token, exact-session identity, request-size, and input-validation boundaries; raw keys stay inside Minecraft and never use operating-system input injection.

MineClient Bridge 1.0.0

Choose a tag to compare

@Campione01 Campione01 released this 24 Aug 03:14

MineClient Bridge 1.0.0

  • Initial NeoForge 1.21.1 client release.
  • Added authenticated loopback status, capability, framebuffer, keymap, state, screen, key, view, GUI mouse, text, release-all, and close endpoints.
  • Added bounded request/response limits, constant-time token comparison, separate owner-restricted token storage, and shutdown input cleanup.
  • Added the optional seven-tool MCP server with exact run/PID/desktop/root identity checks.
  • Added a reusable Codex client-acceptance skill for isolated and parallel test sessions.