ReaperAC is an open-source Minecraft anticheat designed to support the latest versions of Minecraft. This fork targets Minecraft 26.2 Snapshot 2 (Fabric-only) with a vendored PacketEvents monorepo, aligned with the live minecraft-cabal server runtime. For current snapshot/release status, see Minecraft Java release notes and this repository's releases. Geyser players are fully exempt from the anticheat to prevent false positives.
- Latest updates:
- Modrinth: coming soon (release pipeline pending)
- GitHub Releases: coming soon
- Download stats: will be shown via live badges once public release listings are active
- Java 25 or higher (required by MC 26.2 / Fabric Loader).
- A Fabric server environment running Minecraft 26.2 Snapshot 2.
- Fabric Loader: 0.19.1+ for MC 26.2 Snapshot 2.
- Fabric API: use a build that matches the MC 26.2 snapshot line (minecraft-cabal currently runs
fabric-api-0.145.5+26.2-snapshot-1.jar). - References:
- Fabric Loader releases: https://github.com/FabricMC/fabric-loader/releases/tag/0.19.1
- Fabric API releases: https://github.com/FabricMC/fabric-api/releases
- Older API line (26.1.1, not the 26.2 snapshot target): https://github.com/FabricMC/fabric-api/releases/tag/0.145.4%2B26.1.1
- ReaperAC in this repo is latest-only.
- Public release artifacts use the stable
26.2.xversion line (no branch/hash suffixes). - We only support the current upstream Minecraft line (currently the 26.2 snapshot line). See release notes for the latest snapshot status.
- Backports are intentionally out of scope; historical support will be handled via tagged releases later.
- Server website: smp.thecabal.app
- For community support and project discussion join our Discord.
See Contributing for more information about contributing and what our guidelines are.
This fork targets Minecraft 26.2 Snapshot 2 (Fabric-only), with PacketEvents vendored as a
Gradle composite build under vendor/packetevents/.
- Java 25 or newer (
java -version— required by MC 26.2 / Fabric Loader) - Git
- Internet access for Gradle dependencies
The vendored PacketEvents is declared as a Gradle composite build via
includeBuild("vendor/packetevents") in settings.gradle.kts, so Gradle
automatically substitutes PE dependencies with the local source during
compilation.
For Fabric packaging, this repo now hooks :fabric:processIncludeJars to run
vendor/packetevents:publishToMavenLocal automatically, so PacketEvents source
edits are always included in the final Reaper jar with a normal build command.
git clone https://github.com/ohnodev/reaper-ac.git
cd reaper-ac
# Build the Reaper-AC Fabric jar (also publishes vendored PE automatically)
./gradlew :fabric:build -x testIf you only change code under common/ or fabric/ (not PE), you can skip
any extra PE-specific steps and just run ./gradlew :fabric:build -x test.
CI workflows (build.yml, build-and-publish.yml, codeql-analysis.yml) can
still run the explicit PE publish step, but local developer builds no longer
require it.
.\gradlew.bat :fabric:build -x test- Fabric runtime jar:
fabric/build/libs/reaperac-fabric-<version>.jar - Extra artifacts (sources/javadocs):
fabric/build/libs/
This fork includes prebuilt Fabric runtime jars in prebuilt/ for direct deployment.
Current prebuilt file (latest):
prebuilt/reaperac-fabric-26.2.0.jar- SHA-256:
209c997a2ffa20eb4525404e6577e52649d40cc050968101d5c18d1084abe918
Verify integrity:
sha256sum prebuilt/reaperac-fabric-26.2.0.jarUpdate this checksum in the README whenever the prebuilt jar is rebuilt.
To inspect locally produced files after a build:
ls -lah fabric/build/libs/Use this runbook on every Minecraft snapshot bump where blockstate IDs may drift. The goal is to regenerate PacketEvents blockstate mapping from native server IDs so Reaper predictions/collisions do not decode to wrong blocks.
- Primary file:
vendor/packetevents/mappings/data/block_state/V_26_2.json - This file controls PacketEvents global blockstate ID -> state decoding order.
- If this order drifts from native runtime IDs, simulation will decode wrong blocks
(example failure:
leaf_litterdecoding asbig_dripleaf).
- Native runtime mapping from the server:
Block.getId(state)->state.toString()
- We dump this from a live Fabric server with the debug command:
/dumpblockstates
-
Dump native blockstates from server runtime
- Ensure
cabal-mobshas the debug commanddumpblockstatesregistered. - Run via console/RCON:
dumpblockstates
- Output is written under server
debug/, for example: minecraft-cabal/server/debug/blockstate-id-map-YYYYMMDD-HHMMSS.txt
- Ensure
-
Generate helper artifacts (optional but recommended)
- Keep copies under:
mapping-artifacts/26.2-snapshot-3/- Recommended files:
id-to-state-26.2-snapshot-3.jsonstate-to-id-26.2-snapshot-3.jsonblockstate-id-map-26.2-snapshot-3.csv
-
Rebuild
V_26_2.jsonfrom native dump- Convert the native dump into PacketEvents
block_stateformat:- ordered by increasing native state ID
- grouped by
type - preserve existing
defindex per type when still in range
- Write output to:
vendor/packetevents/mappings/data/block_state/V_26_2.json
- Convert the native dump into PacketEvents
-
Sanity-check key IDs
- Verify known problematic IDs decode correctly after remap.
- Example checks used for 26.2-snapshot-3:
30350 -> Block{minecraft:leaf_litter}[facing=east,segment_amount=4]30352 -> Block{minecraft:big_dripleaf}[facing=north,tilt=none,waterlogged=true]
-
Validate build + mappings
./gradlew compileJava ./gradlew :packetevents:api:test --tests com.github.retrooper.packetevents.test.MappingIntegrityTest ./gradlew :fabric:build
-
Deploy
- Copy built jar:
fabric/build/libs/reaperac-fabric-26.2.0.jar- Into server mods:
minecraft-cabal/server/mods/reaperac-fabric-26.2.0.jar- Restart server and verify with trace logs on previously failing blocks.
- Grim PacketEvents repository (mapping structure reference):