Minecraft anticheat rebuilt for modern Paper (and Purpur-compatible forks), with companions for BungeeCord and Velocity.
This repository contains:
- Modern modules (recommended) — Java 21, Gradle, buffer-based detections
- Legacy V1 sources under
/src— original free plugin (unmaintained upstream)
Upstream project: Elikill58/Negativity
| Platform | Status |
|---|---|
| Paper 1.20.4+ / 1.21.x | Primary |
| Purpur / Paper forks | Compatible via Paper API |
| BungeeCord companion | Minimal (message validation) |
| Velocity companion | Minimal (message validation) |
| Java | 21 (toolchain) |
Legacy 1.8–1.16 is not the focus of the modern modules. Keeping full 1.8 support in the same code path would harm modern detections.
- JDK 21
- Paper (or fork) for the Spigot module
- Optional: ProtocolLib (future packet layer)
# Windows
gradlew.bat build
# Linux / macOS
./gradlew buildArtifacts:
negativity-spigot/build/libs/Negativity-<version>.jar— put inplugins/negativity-bungeecord/build/libs/Negativity-Bungee-<version>.jarnegativity-velocity/build/libs/Negativity-Velocity-<version>.jar
./gradlew :negativity-tests:test- Build or download the Spigot/Paper JAR
- Drop it into the server
plugins/folder - Start once to generate
config.yml,checks.yml,messages.yml,punishments.yml - Adjust thresholds; keep
punishments.enabled: falseuntil tuned
On proxies, install the matching companion and the plugin on each backend where players should be checked.
| Command | Permission | Description |
|---|---|---|
/negativity |
negativity.negativity |
Help / root |
/negativity alerts |
negativity.alert |
Toggle personal alerts |
/negativity check <player> |
negativity.check |
Live VL / latency |
/negativity violations <player> |
negativity.negativity |
Recent flags |
/negativity debug <player> <check> |
negativity.admin |
Why analysis is skipped |
/negativity reload |
negativity.reload |
Safe config reload |
/negativity info |
— | Version / TPS |
/negativity exempt <player> [seconds] |
negativity.exempt |
Manual exemption |
/negativity logs <player> |
negativity.negativity |
Alias of violations |
Aliases: /n, /neg
| File | Role |
|---|---|
config.yml |
Global, latency, TPS, alerts, storage, proxy |
checks.yml |
Per-check enable + VL thresholds + setback |
messages.yml |
User-facing messages (pt_BR defaults) |
punishments.yml |
Progressive command punishments |
Checks use buffers, decay, and separate alert / setback / punish thresholds. High ping does not hard-disable all detections; it increases movement tolerance.
NegativityAPI api = NegativityAPI.get();
api.exemptions().exempt(playerId, ExemptReason.PLUGIN, 2000);
api.violations().getVl(playerId, "speed");
api.checks().setEnabled("fly", false);negativity-api Public interfaces / records
negativity-common Managers, buffers, version, config defaults
negativity-spigot Paper plugin + checks + commands
negativity-proxy-common Shared proxy channel/validation
negativity-bungeecord Bungee companion
negativity-velocity Velocity companion
negativity-tests Unit tests
| Check | Subchecks | Notes |
|---|---|---|
| Speed | A/B | Ground/air + potions + latency |
| Fly | A/B | Hover / ascend air ticks |
| Timer | A | Movement packets/s window |
| NoFall | A/B | Ground spoof while falling |
| Jesus | A | Walking on liquids |
| Spider | A | Wall climb |
| Step | A | Impossible step height |
| Phase | A | Inside solid blocks |
| NoSlow / NoWeb / FastLadder | A | Slow contexts |
| AirJump | A | Double jump-like |
| ElytraFly | A/B | Glide speed / hover |
| InventoryMove | A | Move with GUI open |
| Reach | A | AABB edge distance |
| KillAura | A/B | Angle + multi-switch |
| AutoClick | A | CPS |
| Criticals / Velocity / FastBow | A | Combat helpers |
| Scaffold / Nuker / FastPlace | A/B | World interaction |
| Regen | A | Regen interval |
| BadPackets | A–F | Spam / impossible rates |
- ProtocolLib recommended for accurate Timer/BadPackets
- MySQL connection pool not implemented yet (SQLite/file ready; architecture allows later)
- Folia not supported
- Thresholds need live tuning on production traffic
- Legacy V1 sources under
/srcare not the runtime for modern JAR
Original Negativity by Elikill58 and contributors.
Modernization work is based on that codebase.