Sueta

SquidLab Anti-Cheat | Advanced Detection | Web-Dashboard | O

1.6.8

Detect cheaters without hurting your TPS or your players

·Plugin


Catch cheaters. Not your own players.

One jar for 1.8.8 - 26.2 • 58 behaviour checks • Web Dashboard • XRay Protection • Optional Cloud • 7 Languages • Geyser friendly • Proxy ready • Developer API

■ The problem every anti-cheat has

Anti-cheats are easy to make loud. The hard part is making them quiet when nothing is wrong.

Your players do not care how many modules a plugin claims to detect. They care that they got rubber-banded off a fence, that their spear stab was cancelled, that jumping with a beacon buff got them flagged, or that clicking too fast in their own inventory put them in the staff channel.

SquidLab is built the other way around. Every limit in the default configuration has room for the most extreme legitimate case a player can produce: lag spikes, merged movement packets, beacon and potion effects, jump strength items, elytra momentum, rockets of any duration, ice, fences, walls, shulker lids, spears, tridents, riptide dashes and gear swaps. If a check has a look-alike in honest play, it ships EXPERIMENTAL and disabled instead of quietly generating noise.

Fewer flags on legit players is worth more than one extra catch. A staff team that trusts the alerts acts on them. A staff team that has learned to ignore them may as well not have an anti-cheat.

■ What you get

  • One jar for 1.8.8 up to 26.2: all version handling is automatic, no ProtocolLib, no extra dependency
  • Packet analysis on netty threads: the main thread is never blocked, and one movement tick feeds every check at once
  • Attribute driven limits: movement ceilings are read from the player's real attributes, so beacons, potions, speed gear, jump strength items, step height and safe fall are always calculated in, including items that did not exist when the jar was built
  • Bedrock players are never flagged: Geyser and Floodgate players are detected four different ways and exempt by category
  • Your ban system stays in charge: SquidLab runs YOUR command, and on networks it runs it on the proxy console
  • Web dashboard with zero setup: suspect list, live alerts, charts, TPS, ban waves, remote check toggles
  • 7 languages built in: switch with one config line
  • Developer API: cancellable violation and punish events plus a query API

■ Speaks your players' language

Every message the plugin shows in chat ships translated inside the jar. Set the language, reload, done. Your own wording is never lost: when the language changes, the current file is kept as a dated backup next to it.

LANGUAGE: de
enEnglish (default)itItaliano
deDeutschja日本語
esEspañolptPortuguês
frFrançais

■ Web Dashboard

There is nothing to configure. No database, no host, no port, no credentials. The connection is built into the plugin and reconnects on its own if the service is ever unreachable. The anti-cheat never depends on it.

  • Live suspect list with violation levels, relog-proof: disconnecting to dodge a ban resets nothing
  • Live alert feed and a suspected-players-over-time chart
  • TPS ring, server versions and player counts at a glance
  • Watch lists and one-click ban waves
  • Enable or disable every check remotely, experimental ones carry a clear EXPERIMENTAL badge
  • Network support: group the sub servers of a proxy under one login with shared lists and network-wide ban waves

Create your login in-game with /squidlab createdash <user> <password>. The first account of a server becomes its admin.

■ 58 Checks

Every check is behaviour based, so one check covers dozens of named modules: TpAura, FightBot, JetPack, Glide, AirJump, BunnyHop, YPort, Derp, WaterWalk, Spider, Phase and countless others all fall into the categories below.

Combat (14)
  • Reach A: attack distance with ping and victim-motion compensation. Honors the interaction-range attribute, so spears and tridents stab as far as vanilla lets them
  • KillAura A: NoSwing, damage without any attack animation. Thrust weapons are use-based attacks and are understood as such
  • KillAura B: impossible attack angles, hits far outside the field of view
  • KillAura C: multi aura and rapid A-B-A target switching. Piercing weapons and sweeping swords hit several targets from ONE swing and are never counted as a switch
  • KillAura D (EXPERIMENTAL): computed rotations, aura angles ignore the mouse sensitivity raster
  • KillAura E (EXPERIMENTAL): aim consistency, auras center the target hit after hit while humans scatter
  • AutoClicker A: CPS ceiling, the whole mining window excluded
  • AutoClicker B: consistency analysis, a click rhythm steadier than a hand can produce
  • AutoClicker C: endurance analysis, even randomized clickers never pause and human hands always do
  • Hitbox A: the crosshair ray misses even the lag-expanded hitbox
  • Criticals A: fake criticals while provably standing on solid ground
  • Velocity A: anti knockback, with walls, webs, liquids and laggy victims excluded
  • WallHit A: attacking through fully occluding blocks, body AND head must be covered
  • ShieldAttack A: attacking while actively blocking (1.9+)
Movement (21)
  • GroundSpoof A: the client's own ground flag against real block collision. A short disagreement makes the air checks stand down, a sustained lie flags
  • Flight A / B / C: hovering, impossible vertical acceleration, and glide (falling slower than gravity allows)
  • Speed A / B: ground and air speed against real physics, attribute based, with a rolling average so bhop cannot hide in the mean
  • Jesus A: walking on the water surface
  • Timer A: packet balance, catches game speed manipulation. Lag credits and a TPS gate keep bad connections out of it
  • Blink A (EXPERIMENTAL): withholding movement packets while the connection provably stays alive
  • NoFall A: skipped fall damage, honors the safe-fall attribute
  • Step A, HighJump A, LongJump A: impossible vertical and horizontal jumps, with the step-height and jump-strength attributes included and the effect values frozen at take-off
  • WallClimb A (Spider): rising along a sheer wall long after any jump would have peaked
  • FastClimb A, NoClip A
  • ElytraFly A: energy model, climbing while gliding has to consume speed. Dive pull-ups and rockets of every duration stay legit
  • BoatFly A: entity flight
  • Strafe A (EXPERIMENTAL), Sprint A (omni-sprint), NoWeb A
Player (18)
  • BadPackets A / B / C / D: illegal flight packets, sneak spam, swing spam, InventoryChat
  • Scaffold A / B and Tower A: bridging and towering beyond any vanilla rhythm
  • FastBreak A: break rate and dig timing against the REAL required time for that player, tool, enchants and haste included, so Efficiency V netherite in the nether never flags
  • FastPlace A, FastUse A (FastEat), FastBow A
  • Regen A, AutoFish A, ChestStealer A
  • Inventory A: InventoryMove, judged on sustained walking rather than leftover momentum
  • PingSpoof A (EXPERIMENTAL): transaction versus keepalive divergence
  • Improbable A: meta check. It counts DISTINCT checks failed within a minute, not raw flags, so one noisy check can never snowball into a ban. The safest autoban anchor in the plugin
World (2, EXPERIMENTAL)
  • XRay A: ore hiding. Ores that are not exposed to a cave or to air are sent to clients as plain stone, deepslate or netherrack. XRay texture packs still load, but there is simply no ore data left to shine through. Legit players notice zero difference because embedded ores are invisible anyway, and mining a neighbouring block reveals the real ore instantly
  • XRay B: decoy ores. Fake veins are embedded into untouched stone around each player, invisible to legit eyes. XRay users see ore everywhere, and the moment they dig towards one the area snaps back to plain rock

Both are OFF by default and tagged EXPERIMENTAL in the dashboard: they rewrite what clients see, and that costs real CPU and bandwidth per player. Enable them only with TPS headroom. Both pause automatically below your MIN-TPS and both always skip Bedrock players.

■ Why you will not be chasing false flags

The anti-false-positive machinery, in detail

Shared grace handling. Before a movement check looks at anything, a single exemption gate runs: freeze, bypass permission, Bedrock, vehicles, creative and spectator, flight permission, gliding, swimming, riptiding, join, teleport, world change, gamemode change, vehicle exit, piston, flight toggle, container open, low TPS and high ping. Combat checks have their own gate on top.

Buffers everywhere. No check flags on a single measurement. A pattern has to repeat, and the buffer drains again whenever the player looks normal. If a check is ever noisy on your server, raising its BUFFER is the safest knob there is.

Merged movement events. Under lag, one Bukkit move event can contain several client ticks. Its deltas are then doubled, which looks exactly like a speed cheat. Every per-tick check detects and skips those.

Terrain rescue. Fences, walls and gates are 1.5 blocks tall, so their base block sits a full block below your feet. Slabs, trapdoors, carpets, snow layers, grates, bulbs and every unknown modern block are handled through the server's own collision data. On top of that, air-based checks ignore anyone still within reach of real blocks below: a fly module floats far above terrain, a player walking a fence line does not.

Values frozen at take-off. A jump is judged with the jump boost, jump strength, speed multiplier and safe-fall distance the player had when they left the ground. A potion running out mid-air can no longer make an already legitimate arc look impossible.

Attribute watch. Taking armor off mid-sprint swaps attribute modifiers between two ticks. The new, lower limit would flag the old momentum. A drop in the movement-speed attribute opens a short grace window, drop-only and with a re-arm cooldown so gear-swap spam cannot farm a permanent exemption.

Setbacks are a last resort. They need a long series of violations, not one flag, and a setback further than 16 blocks is skipped entirely. Being yanked back across half a cave is worse than the cheat it was meant to stop. Only the three Flight checks set players back at all by default.

Prevention only after repetition. Cancelling a hit or a block placement is the most visible thing an anti-cheat can do. Reach only cancels once the over-reach repeats, Scaffold only once the flat-pitch bridging clearly repeats. A single lag spike never costs anyone a legitimate hit.

And when you still want to know why: /squidlab check <player> tells you live whether a player is being checked, and if not, exactly which gate is exempting them.

■ Commands & Permissions

Every player can type /sl and sees the protection card with the installed version. Everything else lives behind /sl help.

Show commands
/sl                               - "This server is protected by SquidLab" card (everyone)
/squidlab help                    - command overview
/squidlab reload                  - reload the configuration     (squidlab.reload)
/squidlab client <player>         - show the client brand        (squidlab.client)
/squidlab freeze <player>         - (un)freeze a player          (squidlab.freeze)
/squidlab disablecheck <check>    - toggle a check live          (squidlab.disablecheck)
/squidlab violations <player>     - current violation levels     (squidlab.violations)
/squidlab cps <player>            - clicks per second            (squidlab.cps)
/squidlab connection <player>     - transaction ping, flying delay, lag spikes (squidlab.connection)
/squidlab profile <player>        - version, brand, sensitivity, CPS, totals   (squidlab.profile)
/squidlab check <player>          - live: why is this player (not) being checked (squidlab.check)
/squidlab createdash <user> <pw>  - create a web dashboard login (squidlab.createdash)
/alerts                           - toggle ingame alerts         (squidlab.alerts)
/logs <player> [page]             - violation logs               (squidlab.logs)
/punishlogs <player> [page]       - punishment logs              (squidlab.punishlogs)

squidlab.admin grants every command. squidlab.alerts receives alerts (hover for debug details, click to teleport). squidlab.bypass bypasses all checks: give it to nobody you do not trust.

■ Autoban: your ban system stays in charge

SquidLab ships no ban system on purpose. Every server already has one, and bans belong in one place. When a player reaches the configurable PUNISH-VL of a check, SquidLab runs YOUR command through the console.

punishment:
  ENABLED: true
  COMMAND: "ban %player% Unfair Advantage [SquidLab: %check%]"
  BUNGEE: auto          # detects BungeeCord AND Velocity, runs the command on the PROXY console
  BUNGEE-SECRET: ""

Autobans are off by default so you can watch the alerts first and tune the checks to your server.

Proxy networks: ban systems usually live on the proxy, and running /ban on a sub server would only ban locally. Drop the included SquidLabBungee.jar (BungeeCord/Waterfall) or SquidLabVelocity.jar (Velocity) into your proxy's plugins folder and SquidLab executes punish commands in the proxy console. Client-spoofed messages are rejected and an optional shared secret is supported.

■ Discord Webhooks

Alert and punishment embeds with ping, TPS, location and client brand. Paste your webhook URL, done.

■ SquidCloud (optional, free)

You do not need this. SquidLab is complete without it and nothing is disabled if you skip it. Everything above works on its own. This section exists because some cheats cannot be caught inside a single tick, and this is where those are caught instead.

Why a second program at all. SquidLab has to answer while the server is waiting. That is right for stopping a cheat as it happens and wrong for being certain about one. Whether a player's clicking looks human is not a question about the last twenty clicks, it is a question about the last twenty minutes. That is cheap to work out and impossible to work out in time. SquidCloud is where those questions run, and your server never waits for it.

It runs on YOUR machine. There is no account, no sign-up, no service, and nothing of yours is sent to us. It is one jar you start yourself, usually on the very same box as your Minecraft server. Because it is yours, there is nothing to agree to and no data leaves your control.

Setup, step by step

Step 1. Put SquidCloud.jar in its own folder. Anywhere is fine. Example:

/home/minecraft/squidcloud/SquidCloud.jar

Step 2. Start it once:

cd /home/minecraft/squidcloud
java -jar SquidCloud.jar

It writes its own settings and generates its own key. You will see exactly this:

[12:41:02] First start. Wrote squidcloud.properties and generated a key.
[12:41:02]
[12:41:02] Paste this into your server's SquidLab config.yml:
[12:41:02]
[12:41:02]   cloud:
[12:41:02]     ENABLED: true
[12:41:02]     URL: 'ws://127.0.0.1:8765'
[12:41:02]     API-KEY: '05e6127d7beca171ea67add62aaf1875c19a85ec2e3cce82'
[12:41:02]
[12:41:02] Then restart the Minecraft server. That is the whole setup.
[12:41:02] SquidCloud listening on port 8765 with 1 key(s).

Step 3. Open plugins/SquidLab/config.yml, find the cloud: section and make it look like what was printed. Copy the key exactly, it is one long line:

cloud:
  ENABLED: true
  URL: 'ws://127.0.0.1:8765'
  API-KEY: '05e6127d7beca171ea67add62aaf1875c19a85ec2e3cce82'

Step 4. Restart the Minecraft server. Done.

What is 127.0.0.1?

Similar projects

Plugin →