Minecraft anticheat guide
Transaction Providers: AUTO, GRIM, NATIVE, and DISABLED
Choose how FairPlay handles transaction acknowledgements and review the conditions for each provider mode.
The four provider modes
The TransactionConfig mode comment names exactly four values: AUTO, GRIM, NATIVE, and DISABLED. DISABLED means the channel is off. GRIM means use Grim's transaction stream explicitly. NATIVE means use FairPlay's own session explicitly. AUTO means let FairTransactionService.selectMode() decide between native and Grim from what is actually present.
The top-level default is enabled=true. The provider block defaults are mode="AUTO", probe-interval-ms=80, pending-timeout-ms=5000, pending-size=256, debug=false, log-successful-acks=false, and throttle-ms=1000. The native block and diagnostics settings are separate concerns, and the protection block defaults to enabled=false with allowed-strikes=3, strike-window-ms=15000, successful-acks-to-recover=1, and warn-player=true.
enabled: true
provider:
mode: "AUTO"
probe-interval-ms: 80
pending-timeout-ms: 5000
pending-size: 256
debug: false
log-successful-acks: false
throttle-ms: 1000
protection:
enabled: false
allowed-strikes: 3
strike-window-ms: 15000
successful-acks-to-recover: 1
warn-player: trueA write is not an ack
A transaction stream is a per-player logical sequence used to order state changes and fences. A wire ID is a short transport correlation token; consumers use a logical sequence and session epoch instead.
A successful packet write is not itself an acknowledgment. FairTransactionService advances acknowledgement state only when a response is matched and consumed in stream order, so provider selection tells you which stream is authoritative, not how fast any single packet was.
Who owns each decision
selectMode() evaluates ownership before provider preference: Polar and Vulcan conflicts take precedence over the configured provider mode, and explicit modes have strict requirements with no silent substitution. Read the table, then the diagnosis steps below.
| Decision | Owner | Outcome |
|---|---|---|
| Channel on or off | TransactionConfig plus confirmation setting | DISABLED when the transaction config is disabled or confirmation is disabled |
| External ownership conflict | FairTransactionService.selectMode() | POLAR_CONFLICT when Polar is enabled; VULCAN_CONFLICT when Vulcan is enabled; both take precedence over provider mode |
Explicit GRIM | FairTransactionService.selectMode() | Grim mode only when Grim is enabled and its transaction hook starts; otherwise GRIM_UNAVAILABLE with no native fallback |
Explicit NATIVE | FairTransactionService.selectMode() | Native mode when Grim is absent; when Grim is present it warns of the collision and yields GRIM_UNAVAILABLE |
AUTO | FairTransactionService.selectMode() | NATIVE when no Grim is present, GRIM when its transaction hook starts, otherwise GRIM_UNAVAILABLE |
Diagnose in this order
Check the transaction mode and confirmation settings in your server configuration. If Polar or Vulcan is enabled, review its transaction handling first; then check whether Grim is present and active before selecting a provider mode. against the observed outcome.
Two mistakes recur in support threads. Never assume AUTO always falls back to native: when Grim is expected but its transaction hook is unavailable, the result is GRIM_UNAVAILABLE, not a quiet native session. Never assume explicit NATIVE ignores Grim: with Grim present, the service warns about the collision and yields GRIM_UNAVAILABLE.
What provider choice changes
Provider selection determines which acknowledgement stream FairPlay uses. It does not measure player ping; review transaction health separately when investigating combat timing.
If the acknowledgement stream is stale or unhealthy, FairPlay applies no leniency to reach compensation. Check server diagnostics when investigating this condition.
FAQ
Does AUTO always fall back to native when Grim is missing?
No. AUTO selects NATIVE when Grim is absent and GRIM when Grim is active. If Grim is expected but unavailable, FairPlay reports GRIM_UNAVAILABLE instead of silently switching to NATIVE.
Does explicit NATIVE ignore a present Grim?
No. With Grim present, the service warns about the collision and yields GRIM_UNAVAILABLE instead of running a native session alongside Grim.
Do Polar or Vulcan change provider selection?
Yes. POLAR_CONFLICT and VULCAN_CONFLICT take precedence over the configured provider mode, so check those ownership states before tuning provider settings.