Venusanticheat docs

CheckType and PunishmentType

Two small enums: how a check is classified, and what happens when it reaches its threshold.

CheckType

package xyz.kaosmc.anticheat.api.check
SignatureDescription
MOVEMENTPrediction, simulation and movement validation.
COMBATAttacking: reach, click patterns, swing behaviour.
KILL_AURARotation and targeting patterns typical of aura clients.
VELOCITYKnockback and explosion handling.
GROUND_SPOOFClaiming to be on ground the simulation disagrees with.
LATENCY_ABUSEExploiting packet delay: backtrack, blink, out-of-order latency tricks.
TICK_SPEEDTimer and tick-rate manipulation.
REACHInteraction distance.
BLOCK_INTERACTBreaking and placing blocks.
OCCLUDED_INTERACTInteracting through geometry that should block it.
PHASEMoving through solid blocks.
PACKETMalformed, contradictory or impossible packets.
INVENTORYInventory and container handling.
CHATChat and command behaviour.
CLOUDDetections produced by the cloud models.
OTHERAnything that does not fit the list above.
static CheckType[] VALUESA cached copy of values(), for hot loops.

PunishmentType

SignatureDescription
BANRuns the configured ban command(s).
KICKRemoves the player from the server.
BANWAVEQueues the player in the cloud ban wave instead of punishing immediately.
NONEAlerts and logs only; the check never punishes on its own.
grouping a report by type
Map<CheckType, Long> byType = api.checks().of(user).stream()
        .filter(check -> check.violationLevel() > 0)
        .collect(Collectors.groupingBy(Check::type, Collectors.counting()));

byType.forEach((type, flags) -> System.out.println(type + ": " + flags));

// Which of a player's active checks can punish on their own?
api.checks().of(user).stream()
        .filter(check -> check.punishmentType() != null
                && check.punishmentType() != PunishmentType.NONE)
        .forEach(check -> System.out.println(check.name() + " -> " + check.punishmentType()));