Skip to content
GoatTech-42Public

About

a native fabric anticheat

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

meshac: a native fabric anticheat

meshac

a native anticheat for fabric servers.

it catches only what a server can see.

first beta (0.1.0). everything here is what's been tested so far, misses included.

why this exists

the anticheats i tried either missed hacks or banned honest players for having bad wifi. the second one's worse. a missed hack lets a hacker free, but a false ban costs you a player.

so the quality standard for meshac is simple. if a cheat leaves a trace the server can see, catch it. if it's a real player lagging, don't touch them. zero false flags is the goal, and every check has to prove it against a clean control before it ships.

what it does

meshac watches movement, combat, building, mining, interaction and elytra flight. it works out what vanilla physics would allow and steps in when the two don't match.

with enforcement on, every flag can add heat, and heat cools off on its own. a few signals can get a setback. a steady run of them can get a hold and then a removal. we test with lag on purpose, but that can't promise a lagging player never gets flagged.

  1. the player gets put back
  2. then held for a moment
  3. then kicked, and repeat offenders get tempbans that grow each time (on the default preset: 10 minutes, 1 hour, 6 hours, 36 hours, up to 7 days)

permanent bans are off unless you turn them on.

what it's caught so far

the reports linked below say what was tested, how, and what is still missing.

flight, speed above sprint-jump pace, step, spider, jesus, fast climb, no slow, timer, blink (0.75 s and up), slippy, air jump, high jump, elytra fly and boost, reach, kill aura, criticals, crystal aura, anchor aura, auto totem, nuker, packet mine, ghost hand, auto clicker.

clean controls that ran without a flag: sprint-jumping, wind charges, tnt and crystal knockback, elytra, hand mining through tunnels, lag spikes and a laggy proxy.

what it doesn't catch

  • speed at or below sprint-jump pace. it looks exactly like a fast legit player, so meshac doesn't pretend
  • short blink (about 0.4 s)
  • surround
  • bow aimbot
  • boosts above 45 blocks per second
  • explosion knockback is exempt on purpose, because legit players get launched by explosions all day

some modules just haven't been run yet. that list lives in docs/coverage.md.

the sign text rule and the chat command rule were hooked on the wrong thread, so they never fired. the linked coverage report records the fixes and scripted-bot checks. a quiet test is not proof that its hook ran.

install

  1. get a jar for your minecraft version (see below)
  2. drop it in your server's mods folder next to fabric api
  3. start the server. config/meshac.json gets written with every default so you can see each knob

players install nothing.

start in monitor mode. set monitorOnly to true and leave egregiousChecks empty so monitor-mode enforcement exceptions are not enabled. leave client fingerprinting off, and set combatLog to false, because the fingerprint rule and combat log protection both act even in monitor mode. watch the logs on your own server before enabling punishment.

minecraft local build file java
1.21.11 meshac-1.21.11.jar 21
26.1.2 meshac-26.1.jar 25
26.2 meshac-26.2.jar 25
26.3 meshac-26.3.jar 25

fabric api is required on all of them. the 0.1.0 beta is available. the file names in the table are what a local build makes. the release files have the mod version in the name too. to build one yourself, see building.

for admins

all /mesh commands are op only.

command what it does
/mesh cases recent cases
/mesh case <id> what happened and why
/mesh status <player> a player's heat, offences and what happens next
/mesh watch flags in chat as they happen
/mesh monitor, /mesh monitor on, /mesh monitor off show or switch monitor mode
/mesh kick, /mesh ban manual removal
/mesh pardon <case id>, /mesh unban <player> lift a case or a ban
/mesh reload reload the config

there's an optional discord webhook for holds and removals.

config reference

config/meshac.json, written with defaults on first start. three presets, lenient, default and strict. any knob left null follows the preset, set one to override just that knob.

key what it does
preset lenient, default or strict
monitorOnly log and alert unless a check is listed in egregiousChecks
egregiousChecks checks that still enforce in monitor mode; leave empty for log-only testing
permanentBan false caps the ladder at the longest tempban
holdAt, removeAt heat at which a player is held, and removed
halfLifeSeconds how fast heat cools. heatCoolSeconds is still in the config but nothing reads it
combatLog, combatLogSeconds on by default. a player who disconnects while combat-tagged is killed. monitor mode does not stop it
kicksBeforeTempban kicks before the first tempban
tempbanBaseMinutes, tempbanGrowth, tempbanMaxMinutes the tempban ladder
offenceHalfLifeDays, offenceMemoryDays how long old offences count
requireClusters, requireClustersTierA independent causes needed before removal
discordWebhook, discordOnHold webhook url (empty is off) and whether holds post too
appeal, serverName, accent, warn the text and colours players see
fixPistonWater patches MC-130183, the sticky piston flood machine bug. off by default
veilXray, veilEsp anti-xray and anti-esp. off until proven on a real client
clientFingerprintEnabled optional match on client brand or channel names. a client can fake both. off by default. if you turn it on, a match removes the player even if no check flagged anything

how removal actually works, and its limits, is in docs/PUNISHMENT-DESIGN.md.

coverage by hack

the full per-module tables, with times, holds and kicks:

0 signals only counts as a miss when the hack visibly acted. if it didn't, the row says unproven, not passed.

the last full sweep ran 138 cases with 57 legit controls on the recorded 26.2 jar. no legit control was flagged. kill-aura is only caught on some runs, so treat it as partial. details are in docs/FINAL-SWEEP.md.

how it's tested

rig/ is a throwaway server and real clients on a docker network with no internet. it runs real wurst and meteor clients, scripted bots for packet-level tests, and a lag proxy that stalls and bunches packets so laggy connections get tested on purpose.

the rules for any new check:

  • it ships with a test that shows it catching the hack
  • and a test that shows it leaving legit play alone
  • measure first, never tune blind

see rig/README.md.

false positives we've hit

every one gets written up: what flagged, why, and what the fix does. the short list so far is tunnel mining that looked like a nuker, a block broken "through" another when the hand just grazed a wall edge, and mining checks that tripped under lag. each fix needs a matching clean control.

per-version notes

one source tree builds for 1.21.11, 26.1.2, 26.2 and 26.3. the 1.21.11 jar uses the older obfuscated toolchain and runs on java 21, the rest need java 25. rig/smoke.sh boots each jar on a real server of its version.

real-client runs: wurst on 26.1.2, meteor on 26.2. 26.3 only has a few wurst checks (a nuker run and the tunnel-mining false positive), not a full sweep. 1.21.11 has been built and booted on a server, nothing more. these results are for the jars we tested, not every later commit.

building

you need java 25.

./gradlew build

the jar ends up in build/libs/. build-all.sh builds every version into dist/. for one version, pass every line of its file in versions/ as a -P flag, the way build-all.sh does. the 1.21.11 file includes remap=1, so don't leave that one out.

the words

  • a signal is one check catching something
  • heat is a player's recent signals, and it cools off
  • a trace is the evidence behind a signal
  • a ward is an exemption

docs

license

gnu affero general public license v3.0 only, see LICENSE. use it, change it, share it. if you distribute it or run a modified copy for others over a network, share your changes under the same license and keep the copyright notices.

About

a native fabric anticheat

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages