CFXControl Flex Wiki
English中文

Who uses this API

control-flex-api has five public consumers today, and all of them are official bridge mods under the ControlFlexMC organisation. The mods they adapt (Epic Fight, Create, Exposure, EMI, Immersive Vehicles) do not depend on this API and need no changes at all — this page keeps "depends on the API" and "is merely adapted" strictly apart.

Section: Overview · Setup & lifecycle · Interfaces · Implementations · Who uses the API

You can tell the two apart from a build script: a compileOnly "com.github.ControlFlexMC:control-flex-api:<version>" line means it is a bridge (it depends on the API); declaring Control Flex under dependencies only means it requires the core mod to be installed; if neither appears, the mod is purely a target.

Bridge mods that depend on the API

All five repositories live under ControlFlexMC and branch per MC version (the default branch is 1.20.1). The "API surface" column comes from counting call sites in each repository's own source.

Repository Adapts Branches API surface used Bundled assets
cfx-compat-epicfight Epic Fight 1.20.1 · 1.21.1 The whole SPI (ready / compat / guide) + action state + state push + camera hand-off + input view compat JSON + guide JSON + en/zh strings
cfx-compat-create Create train console 1.20.1 · 1.21.1 Plugin ready callback + action state + controller state None
cfx-compat-exposure Exposure viewfinder 1.20.1 · 1.21.1 Calls getInteractiveContextRegistrar() only — no SPI plugin at all None
cfx-compat-emi EMI 1.18.2 · 1.19.2 · 1.20.1 · 1.21.1 Plugin compat callback + asset installer (the 22 pseudo keys are described in JSON) compat JSON + en/zh strings
cfx-compat-vehicles Immersive Vehicles (MTS) 1.12.2 · 1.16.5 · 1.18.2 · 1.19.2 · 1.20.1 · 1.21.1 · 26.1.2 Plugin ready callback + action state + controller state None (no JSON shipped)

Adapted mods (no API dependency)

These are the upstream mods. They have no idea they are being driven by a gamepad — the bridge sits on this side and translates input into signals they already understand, so an upstream update only needs the bridge to follow; not one field upstream changes.

Mod Minimum version Adapted by
Epic Fight ≥ 20.14 (1.20.1 Forge) · ≥ 21.15 (1.21.1 NeoForge) cfx-compat-epicfight
Create ≥ 6.0.7 cfx-compat-create
Exposure ≥ 1.9.20 cfx-compat-exposure
EMI 1.1.x cfx-compat-emi
Immersive Vehicles (MTS) Whatever the matching MC line currently ships cfx-compat-vehicles

Core mod and config source: two roles people mix up

One mod can need both paths at once

Bridges and JSON are not mutually exclusive: epicfight writes Java and ships JSON, and the community configs for create / emi use dependencies to require the bridge. Whether a mod feels right on a controller therefore comes down to two things — is the bridge installed, and does a config cover the rest.

What the mod looks like Who covers it
A standard KeyMapping, visible under Controls Auto-discovery is enough; add a compat JSON to fine-tune
Its own input system, and a bridge already exists Install the bridge, then override the JSON it installs as needed
Its own input system, and nobody has written a bridge Fall back to editing configs by hand; long term, write the bridge

Keep reading