
AntiTpsu
ANTITPSU is a lightweight anti-cheat for Paper 1.21.1 that adds SUS (suspicion) points when players fail checks, alerts your staff with clickable alerts, and can block cheats like fly and killaura. Punishments are off by default and only run if you enable
1.1.1
Compatibility
Changes
ANTITPSU 1.1.1 — Blocking Fixes & Detection Improvements
This release fixes a movement-blocking regression introduced in 1.1.0, improves several detection paths, and adds staff tools for understanding why a player is being checked or exempted.
The main focus of this update is reliable enforcement after setbacks, better coverage of hovering and wall-crossing attempts, and more useful testing and diagnostics.
🛠️ Critical movement-blocking fix
Fixed an issue where correcting a player’s position invalidated their movement history in a way that caused the next movement event to skip several checks.
This affected:
- Fly
- Speed
- NoFall
- Step
- Phase
The movement system now establishes a valid baseline from the accepted correction, allowing the following movement to be checked again.
Additional improvements:
- Rejected movement does not become the player’s trusted movement state.
- Detection buffers remain available after the plugin’s own corrections.
- ANTITPSU setbacks do not grant the grace period intended for external teleports.
- Continued cheating attempts can still be evaluated immediately after a correction.
🪽 Improved Hover detection
Hover detection now tracks how long a player remains at approximately the same height while airborne.
Previously, sending horizontal movement could prevent the stationary-movement timer from building up, even when the player continued floating at a fixed height.
The updated detection:
- Measures sustained stationary height in the air.
- Continues evaluating players who move horizontally while hovering.
- Resets its measurement when the player’s height changes sufficiently.
- Retains ground, environmental, and platform-entity checks.
- Uses the configured buffer before reporting and applying a setback.
This improves coverage of hovering behavior that continues sending movement events.
🧱 Phase detection after idle periods
Fixed a gap where Phase could skip checking movement after a player had stood still for an extended period.
Collision checking no longer requires consecutive movement ticks. A long pause before moving does not make a detected wall-crossing attempt acceptable.
This works alongside the existing Phase behavior:
- Detection of movement into solid block collision shapes.
- Bounded sampling along supported horizontal movement paths.
- Immediate correction of detected penetration when setbacks are enabled.
- Separate buffering for violation reporting.
❄️ More focused environmental exemptions
Removed a shared exemption that could temporarily disable all movement checks after one check encountered a special block.
For example, an environmental exemption used by Speed near ice should not also disable Fly or Phase.
Each check now relies on its own environmental handling, improving coverage while retaining the exceptions relevant to that detection.
General protections for legitimate situations—including authorized flight, vehicles, liquids, gliding, knockback, and teleport grace periods—still apply.
⏱️ Timer detection improvements
Timer now uses Paper’s ClientTickEnd events, which correspond to actual client tick-end packets.
Previously, Timer counted PlayerMoveEvent calls. Those events do not represent every client tick, making them an unreliable basis for this measurement.
The updated Timer system:
- Measures client tick timing independently of movement-event frequency.
- Applies an additional latency allowance.
- Resets its timing measurement while the player is exempt.
- Accounts for an administratively changed server tick rate.
- Suspends its timing measurement during non-normal server ticking, such as freezing or temporary tick sprinting.
Automated scenarios verify normal 20 Hz timing, excessive 40 Hz timing on a normal server, and legitimate timing after the server’s tick rate is changed.
🔎 New staff command: Debug
/antitpsu debug <player>
Added a diagnostic command that shows whether a player is currently being checked and explains the active exemption when checks are skipped.
The output includes:
- Movement check status
- Combat check status
- World-action check status
- The current reason for skipping checks
- Remaining movement warmup
- Whether permission-bypass test mode is active
- Whether client tick packets have been observed
- Each check’s effective status:
- BLOCKING
- ALERT ONLY
- DISABLED
This helps staff identify configuration issues, bypass permissions, authorized flight, game-mode exemptions, and lag protections.
🧪 New staff command: Test mode
/antitpsu test <player>
Temporarily ignores the selected player’s bypass permission for two minutes, allowing staff to test enforcement using an account that normally bypasses ANTITPSU.
To end the test early:
/antitpsu test <player> off
Test mode overrides only the permission bypass. Other exemptions—including Creative mode, authorized flight, extreme ping, and grace periods—continue to apply.
For movement testing, use Survival mode without server-authorized flight and wait until the join grace period has ended.
✅ Expanded automated verification
The project now passes 22 automated tests, with no failures or skipped tests.
Coverage includes:
- Repeated Speed attempts after a setback
- Repeated Fly attempts after a correction
- Preservation of detection buffers
- Correct handling of the plugin’s own teleport callbacks
- Ordinary walking and a complete jump
- Hovering while moving horizontally
- Phase attempts after an idle period
- Separation of environmental exemptions
- Normal and excessive client tick rates
- Administratively changed server tick rates
- Immediate and sustained cancellation of impossible Reach attacks
- Acceptance of attacks within the allowed range
- Sustained FastPlace cancellation
- Permission bypass and temporary test mode
- Accurate reporting when cancellation is disabled
The pipeline tests exercise the actual listeners, check manager, checks, and enforcement code using mocked Paper entities and world conditions, with simulated teleport callbacks.
Live-server and cheat-client gameplay testing is still pending. These tests verify the covered code paths; they do not establish complete cheat coverage or guarantee the absence of false positives.
⚙️ Configuration and updating
Existing configuration files can be kept when updating to 1.1.1.
- Explicitly disabled checks remain disabled.
- Existing
setbackandcancel-on-flagsettings remain effective. - Automatic kicks and bans remain disabled by default.
- Aim and AutoClicker remain alert-only by default.
To update:
- Stop the server.
- Replace the previous ANTITPSU JAR with ANTITPSU-1.1.1.jar.
- Keep only one ANTITPSU JAR in the
pluginsfolder. - Restart the server.
- Use
/antitpsu debug <player>to inspect the effective checking and blocking status.
📦 Requirements
- Paper 1.21.11
- Java 21 or newer
- No ProtocolLib or PacketEvents required
20 checks remain available, including the NoSlow check added in version 1.1.0.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:bV3t6qfs:JQCWsYqU"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:bV3t6qfs:JQCWsYqU"
}
