NoKnockback

[!] Inferential
Anti-knockback / Velocity — cancels, scales or redirects the KB a sprint-hit applies so the victim barely moves. One VL pool across four sub-signals: the VelocityC magnitude ratio, the absorbed-KB sustained gate, NoKB(VelocityB) vertical ratio, and NoKB(Vector) direction mismatch. Nemesis VelocityA/B/C proxy.
id: noKnockback  ·  class: NoKnockbackCheck  ·  group: Combat

What it detects

Anti-knockback / Velocity — cancels, scales or redirects the KB a sprint-hit applies so the victim barely moves. One VL pool across four sub-signals: the VelocityC magnitude ratio, the absorbed-KB sustained gate, NoKB(VelocityB) vertical ratio, and NoKB(Vector) direction mismatch. Nemesis VelocityA/B/C proxy.

Observer signature

On AttackEvent records the hit tick, attacker yaw and attacker-sprinting into the victim's context. process accumulates the victim's horizontal displacement over a 3-tick post-hit window and flags at 1.0 when it falls under cfg.threshold (0.61) of the EXPECTED KB displacement (impulse x friction-integral, from VelocitySignal on broadcast-velocity servers or vanilla sprint-KB where it is not broadcast). The expected denominator is scaled by the observed fraction of the window, and by ATTACK_SLOWDOWN (0.6) for a hit inside the 2-tick i-frame window. A gate of 3 absorbed verdicts in the last 5 marks the ratio anti-KB sustained rather than a one-off. Two further branches share the pool: NoKB(VelocityB) flags a first-airborne dy / kbVy < 0.995 (the victim never leaves the ground), and NoKB(Vector) flags a post-hit displacement direction off the attacker facing by more than 35 degrees.

False-positive guards

  • Gated on attacker-sprinting (only sprint-KB is strong enough)
  • Victim-in-vehicle/gliding/riptide exempt
  • Recent-teleport exempt (tick - lastTeleportTick < 5)
  • Server-lag exempt (tick - lastServerLagTick <= 4 or lastLagBurstTick <= 2)
  • KB-dampening surface at feet exempt (liquid/cobweb/soul sand/honey)
  • Wall in KB direction exempt (multi-band sweep)
  • Shield exempt: a player holding up a shield takes no sprint-KB in vanilla, so a legit blocker's ~zero displacement never trips the ratio
  • VelocityB is gated on the victim being grounded at the hit: the launches-them-off-the-ground premise is undefined for an already-airborne victim, who contributes their own motion
  • VelocityB fails open where velocity is not broadcast (kbVy stays 0), and a first-airborne dy in the 0.38-0.46 band is exempt as an ambiguous vanilla jump

Configuration

Defaults (editable in-game via the YACL config screen or /ius config):

FieldDefault
enabledtrue
setbackVL5.0
decay1.0
threshold0.61
window3 ticks
ratio bar< 0.61 of the expected KB displacement
sustained gate3 of the last 5 hits
i-frame scalingx0.6 for a hit within 2 ticks of the previous one
VelocityBdy/kbVy < 0.995, jump band 0.38-0.46 exempt
Vectoroff attacker facing by > 35 deg, pre-hit speed < 0.05, min move 0.1

Source

src/main/kotlin/dev/iustitia/checks/combat/NoKnockbackCheck.kt  ↗