Introduction

SquidLab is a pure anti-cheat for Spigot and Paper, from 1.8.8 up to 26.2 — one jar handles every version. It catches cheaters without eating your server resources and without interrupting legit players.

No ProtocolLib required. ViaVersion, Floodgate and Geyser are optional soft-dependencies.

Installation

The web dashboard needs no setup at all — the database connection is built into the plugin and connects automatically. Just create a login with /squidlab createdash <user> <pass>.

Configuration

Highlights of config.yml:

Checks

50 behaviour-based checks across three categories. Toggle any of them live with /squidlab disablecheck <check> or from the dashboard.

CategoryChecks
CombatReach, KillAura A/B/C, AutoClicker A/B, Hitbox, Criticals, Velocity, WallHit, ShieldAttack
MovementFlight A/B/C, Speed A/B, Jesus, Timer, Blink, NoFall, GroundSpoof, Step, HighJump, LongJump, WallClimb, FastClimb, NoClip, ElytraFly, BoatFly, Strafe, Sprint, NoSlow, NoWeb
PlayerBadPackets A–D, Scaffold A/B, Tower, FastBreak, FastPlace, FastUse, FastBow, Regen, AutoFish, ChestStealer, Inventory, PingSpoof, Improbable

Commands & Permissions

/squidlab help
/squidlab reload                 squidlab.reload
/squidlab client <player>        squidlab.client
/squidlab freeze <player>        squidlab.freeze
/squidlab disablecheck <check>   squidlab.disablecheck
/squidlab violations <player>    squidlab.violations
/squidlab cps <player>           squidlab.cps
/squidlab connection <player>    squidlab.connection
/squidlab profile <player>       squidlab.profile
/squidlab createdash <u> <p>      squidlab.createdash
/alerts                          squidlab.alerts
/logs <player> [page]            squidlab.logs
/punishlogs <player> [page]      squidlab.punishlogs

squidlab.admin grants everything; squidlab.bypass exempts a player from all checks.

Autoban

SquidLab has no ban system of its own — it runs your command when a player reaches a check's PUNISH-VL.

punishment:
  ENABLED: true
  COMMAND: "ban %player% Unfair Advantage [SquidLab: %check%]"

Placeholders: %player%, %uuid%, %check%, %vl%. Each check can override with its own PUNISH-COMMAND.

BungeeCord

Ban systems usually live on the proxy. Drop SquidLabBungee.jar into the proxy's plugins/ and set punishment.BUNGEE: auto — punish commands then run in the proxy console.

Alert routing

On a network the moderators are rarely online on the exact game server where a cheater is caught. Decide where violation messages are sent with alerts.ROUTE:

ValueWhere alerts go
LOCALStaff on this server only (default).
BUNGEEEvery staff member on the whole proxy, tagged with the source server. Needs the bridge.
BOTHLocal + network.

Violations, punishments and network alerts all travel through the same SquidLabBungee.jar bridge.

Web dashboard

SquidLab ships with a full web dashboard: suspect list, live alert feed, a suspected-players-over-time chart, a live TPS gauge, server versions, watch lists, ban waves and remote check toggles.

Developer API

Add SquidLab.jar as a provided dependency. The de.venta.squidlab.api package is stable and survives obfuscation.

@EventHandler
public void onViolation(PlayerViolationEvent e) {   // cancellable
    if (myMinigame.isIngame(e.getPlayer())) e.setCancelled(true);
}

@EventHandler
public void onPunish(PlayerPunishEvent e) {          // cancellable + editable
    e.setCommand("tempban " + e.getPlayer().getName() + " 7d Cheating");
}

SquidLabApi.getViolationLevel(player, "KillAuraA");
SquidLabApi.exempt(player, 3000);   // before jump pads / custom launches
SquidLabApi.isBedrockPlayer(player);

FAQ

Does it false flag?

Every check is buffered and surrounded by grace handling. Bedrock players are fully exempt. Run alert-only first and tune to your server before enabling autobans.

Does it need ProtocolLib?

No. SquidLab injects its own lightweight netty handler.

Does it lag my server?

Packet work happens on netty threads; block lookups happen once per movement tick for all checks together.

What if the dashboard database is down?

Nothing breaks. The plugin retries the connection in the background and the anti-cheat keeps running normally; violations are still stored locally and stay relog-proof.

Can I disable single checks?

Yes — in config.yml, live with /squidlab disablecheck, or from the dashboard.